diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 17115ddebe..933e7d84d9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -81,6 +81,21 @@ jobs: echo "No documentation changes in crates/lib/core/docs/ - OK" fi + check-constraints: + name: check recursive constraint artifacts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Cleanup large tools for build space + uses: ./.github/actions/cleanup-runner + - uses: Swatinem/rust-cache@v2 + with: + save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/next' }} + - name: Install rust + run: rustup update --no-self-update + - name: Check recursive constraint artifacts for drift + run: make check-constraints + run-examples: name: run masm examples runs-on: warp-ubuntu-latest-x64-4x diff --git a/.gitignore b/.gitignore index 88a02e29d4..5728cdb9d6 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,7 @@ crates/lib/core/assets/core.masl # mdBook book/ + +# Constraint analysis tooling +.constraint-tooling/ +scripts/__pycache__/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f9937475a..53bc44593c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ - Documented non-overlap requirement for `memcopy_words`, `memcopy_elements`, and AEAD encrypt/decrypt procedures ([#2941](https://github.com/0xMiden/miden-vm/pull/2941)). - Added chainable `Test` builders for common test setup in `miden-utils-testing` ([#2957](https://github.com/0xMiden/miden-vm/pull/2957)). - Speed-up AUX range check trace generation by changing divisors to a flat Vec layout ([#2966](https://github.com/0xMiden/miden-vm/pull/2966)). +- Removed AIR constraint tagging instrumentation, applied a uniform constraint description style across components, and optimized constraint evaluation ([#2856](https://github.com/0xMiden/miden-vm/pull/2856)). + ## 0.22.1 #### Enhancements diff --git a/Cargo.lock b/Cargo.lock index d36be8a77e..c1a326829f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1265,6 +1265,7 @@ dependencies = [ name = "miden-air" version = "0.23.0" dependencies = [ + "insta", "miden-ace-codegen", "miden-core", "miden-crypto", diff --git a/Makefile b/Makefile index 8fac4f9457..9832fae841 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,8 @@ help: @printf " make test-prover # Test prover crate\n" @printf " make test-core-lib # Test core-lib crate\n" @printf " make test-verifier # Test verifier crate\n" + @printf " make check-constraints # Check core-lib constraint artifacts\n" + @printf " make regenerate-constraints # Regenerate core-lib constraint artifacts\n" @printf "\nExamples:\n" @printf " make test-air test=\"some_test\" # Test specific function\n" @printf " make test-fast # Fast tests (no proptests/CLI)\n" @@ -220,6 +222,14 @@ exec-avx2: ## Builds an executable with AVX2 acceleration enabled exec-sve: ## Builds an executable with SVE acceleration enabled RUSTFLAGS="-C target-feature=+sve" cargo build --profile optimized $(FEATURES_CONCURRENT_EXEC) +.PHONY: regenerate-constraints +regenerate-constraints: ## Regenerate core-lib constraint artifacts + cargo run --package miden-core-lib --features constraints-tools --bin regenerate-constraints -- --write + +.PHONY: check-constraints +check-constraints: ## Check core-lib constraint artifacts for drift + cargo run --package miden-core-lib --features constraints-tools --bin regenerate-constraints -- --check + .PHONY: exec-info exec-info: ## Builds an executable with log tree enabled cargo build --profile optimized $(FEATURES_LOG_TREE) diff --git a/air/Cargo.toml b/air/Cargo.toml index 1ee696c1d2..1243735a7a 100644 --- a/air/Cargo.toml +++ b/air/Cargo.toml @@ -35,5 +35,6 @@ thiserror.workspace = true tracing.workspace = true [dev-dependencies] +insta.workspace = true miden-ace-codegen = { workspace = true, features = ["testing"] } proptest.workspace = true diff --git a/air/src/ace.rs b/air/src/ace.rs index 7f34aa2e7d..16f7d85083 100644 --- a/air/src/ace.rs +++ b/air/src/ace.rs @@ -49,8 +49,9 @@ pub enum MessageElement { pub enum ProductFactor { /// Claimed final value of an auxiliary trace column, by column index. BusBoundary(usize), - /// A bus message computed from its elements as `alpha + sum(beta^i * elements[i])`. - Message(Vec), + /// A bus message computed from its elements as `bus_prefix[bus] + sum(beta^i * elements[i])`. + /// The first field is the bus type index (see `trace::bus_types`). + Message(usize, Vec), /// Multiset product reduced from variable-length public inputs, by group index. Vlpi(usize), } @@ -131,7 +132,7 @@ where for factor in factors { let node = match factor { ProductFactor::BusBoundary(idx) => builder.input(InputKey::AuxBusBoundary(*idx)), - ProductFactor::Message(elements) => encode_bus_message(builder, elements), + ProductFactor::Message(bus, elements) => encode_bus_message(builder, *bus, elements), ProductFactor::Vlpi(idx) => builder.input(InputKey::VlpiReduction(*idx)), }; acc = builder.mul(acc, node); @@ -154,20 +155,38 @@ where sum } -/// Encode a bus message as `alpha + sum(beta^i * elements[i])`. -fn encode_bus_message(builder: &mut DagBuilder, elements: &[MessageElement]) -> NodeId +/// Encode a bus message as `bus_prefix[bus] + sum(beta^i * elements[i])`. +/// +/// The bus prefix provides domain separation: `bus_prefix[bus] = alpha + (bus+1) * gamma` +/// where `gamma = beta^MAX_MESSAGE_WIDTH`. This matches [`trace::Challenges::encode`]. +fn encode_bus_message( + builder: &mut DagBuilder, + bus: usize, + elements: &[MessageElement], +) -> NodeId where EF: ExtensionField, { let alpha = builder.input(InputKey::AuxRandAlpha); let beta = builder.input(InputKey::AuxRandBeta); - // acc = alpha + sum(beta^i * elem_i) + // Compute gamma = beta^MAX_MESSAGE_WIDTH. + let mut gamma = builder.constant(EF::ONE); + for _ in 0..trace::MAX_MESSAGE_WIDTH { + gamma = builder.mul(gamma, beta); + } + + // bus_prefix = alpha + (bus + 1) * gamma + let scale = builder.constant(EF::from(Felt::from_u32((bus as u32) + 1))); + let offset = builder.mul(gamma, scale); + let bus_prefix = builder.add(alpha, offset); + + // acc = bus_prefix + sum(beta^i * elem_i) // // Beta powers are built incrementally. The DagBuilder is hash-consed, so // identical beta^i nodes across multiple message encodings are shared // automatically. - let mut acc = alpha; + let mut acc = bus_prefix; let mut beta_power = builder.constant(EF::ONE); for elem in elements { let node = match elem { @@ -190,6 +209,7 @@ where pub fn reduced_aux_batch_config() -> ReducedAuxBatchConfig { use MessageElement::{Constant, PublicInput}; use ProductFactor::{BusBoundary, Message, Vlpi}; + use trace::bus_types; // Aux boundary column indices. let p1 = trace::DECODER_AUX_TRACE_OFFSET; @@ -251,10 +271,10 @@ pub fn reduced_aux_batch_config() -> ReducedAuxBatchConfig { BusBoundary(s_aux), BusBoundary(b_hash_kernel), BusBoundary(b_chiplets), - Message(ph_msg), - Message(default_msg), + Message(bus_types::BLOCK_HASH_TABLE, ph_msg), + Message(bus_types::LOG_PRECOMPILE_TRANSCRIPT, default_msg), ], - denominator: vec![Message(final_msg), Vlpi(0)], + denominator: vec![Message(bus_types::LOG_PRECOMPILE_TRANSCRIPT, final_msg), Vlpi(0)], sum_columns: vec![b_range, v_wiring], } } diff --git a/air/src/config.rs b/air/src/config.rs index 326a500084..ee16c29448 100644 --- a/air/src/config.rs +++ b/air/src/config.rs @@ -85,10 +85,10 @@ pub fn pcs_params() -> PcsParams { /// Compile-time constant binding the Fiat-Shamir transcript to the Miden VM AIR. /// Must match the constants in `crates/lib/core/asm/sys/vm/mod.masm`. pub const RELATION_DIGEST: [Felt; 4] = [ - Felt::new(14932224741264950205), - Felt::new(13231194489255299102), - Felt::new(9539190039789656767), - Felt::new(16072183680659208914), + Felt::new(7682526984894530630), + Felt::new(13019009422810970716), + Felt::new(16037978224454945133), + Felt::new(1332031755710493241), ]; /// Observes PCS protocol parameters and per-proof trace height into the challenger. @@ -293,3 +293,59 @@ pub fn keccak_config(params: PcsParams) -> MidenStarkConfig(&air, config, &batch_config).unwrap(); + let encoded = circuit.to_ace().unwrap(); + let circuit_commitment: [Felt; 4] = encoded.circuit_hash().into(); + + let input: Vec = core::iter::once(Felt::new(PROTOCOL_ID)) + .chain(circuit_commitment.iter().copied()) + .collect(); + let digest = Poseidon2::hash_elements(&input); + let expected: Vec = + digest.as_elements().iter().map(|f| f.as_canonical_u64()).collect(); + + let snapshot = format!( + "num_inputs: {}\nnum_eval_gates: {}\nrelation_digest: {:?}", + encoded.num_vars(), + encoded.num_eval_rows(), + expected, + ); + insta::assert_snapshot!(snapshot); + + let actual: Vec = + super::RELATION_DIGEST.iter().map(|f| f.as_canonical_u64()).collect(); + assert_eq!( + actual, expected, + "RELATION_DIGEST in config.rs is stale. Regenerate with: {REGEN_HINT}" + ); + } +} diff --git a/air/src/constraints/bus.rs b/air/src/constraints/bus.rs index 12dfd65b10..a6183d3e0c 100644 --- a/air/src/constraints/bus.rs +++ b/air/src/constraints/bus.rs @@ -10,7 +10,6 @@ //! - v_wiring (ACE wiring LogUp) /// Auxiliary trace column indices. -#[allow(dead_code)] pub mod indices { /// Block stack table (decoder control flow) pub const P1_BLOCK_STACK: usize = 0; diff --git a/air/src/constraints/chiplets/ace.rs b/air/src/constraints/chiplets/ace.rs index 35279ed6f2..e8c4bab43a 100644 --- a/air/src/constraints/chiplets/ace.rs +++ b/air/src/constraints/chiplets/ace.rs @@ -28,465 +28,183 @@ //! | m0 | Wire bus multiplicity for node 0 | use miden_core::field::PrimeCharacteristicRing; +use miden_crypto::stark::air::AirBuilder; -use super::selectors::{ace_chiplet_flag, memory_chiplet_flag}; +use super::selectors::ChipletFlags; use crate::{ - Felt, MainTraceRow, - constraints::tagging::{TagGroup, TaggingAirBuilderExt, tagged_assert_zero_integrity}, - trace::chiplets::ace::{ - CLK_IDX, CTX_IDX, EVAL_OP_IDX, ID_0_IDX, ID_1_IDX, PTR_IDX, READ_NUM_EVAL_IDX, - SELECTOR_BLOCK_IDX, SELECTOR_START_IDX, V_0_0_IDX, V_0_1_IDX, V_1_0_IDX, V_1_1_IDX, - V_2_0_IDX, V_2_1_IDX, + MainCols, MidenAirBuilder, + constraints::{ + constants::{F_1, F_4}, + ext_field::{QuadFeltAirBuilder, QuadFeltExpr}, + utils::BoolNot, }, }; -// CONSTANTS -// ================================================================================================ - -// ACE chiplet offset from CHIPLETS_OFFSET (after s0, s1, s2, s3). -const ACE_OFFSET: usize = 4; - -// TAGGING IDS -// ================================================================================================ - -const ACE_BASE_ID: usize = super::memory::MEMORY_BASE_ID + super::memory::MEMORY_COUNT; -pub(super) const ACE_COUNT: usize = 20; - -const ACE_BINARY_BASE_ID: usize = ACE_BASE_ID; -const ACE_SECTION_BASE_ID: usize = ACE_BASE_ID + 2; -const ACE_WITHIN_SECTION_BASE_ID: usize = ACE_BASE_ID + 7; -const ACE_READ_ID_ID: usize = ACE_BASE_ID + 11; -const ACE_READ_TO_EVAL_ID: usize = ACE_BASE_ID + 12; -const ACE_EVAL_OP_ID: usize = ACE_BASE_ID + 13; -const ACE_EVAL_RESULT_BASE_ID: usize = ACE_BASE_ID + 14; -const ACE_FINAL_BASE_ID: usize = ACE_BASE_ID + 16; -const ACE_FIRST_ROW_ID: usize = ACE_BASE_ID + 19; - -const ACE_BINARY_NAMESPACE: &str = "chiplets.ace.selector.binary"; -const ACE_SECTION_NAMESPACE: &str = "chiplets.ace.section.flags"; -const ACE_WITHIN_SECTION_NAMESPACE: &str = "chiplets.ace.section.transition"; -const ACE_READ_ID_NAMESPACE: &str = "chiplets.ace.read.ids"; -const ACE_READ_TO_EVAL_NAMESPACE: &str = "chiplets.ace.read.to_eval"; -const ACE_EVAL_OP_NAMESPACE: &str = "chiplets.ace.eval.op"; -const ACE_EVAL_RESULT_NAMESPACE: &str = "chiplets.ace.eval.result"; -const ACE_FINAL_NAMESPACE: &str = "chiplets.ace.final.zero"; -const ACE_FIRST_ROW_NAMESPACE: &str = "chiplets.ace.first_row.start"; - -const ACE_BINARY_NAMES: [&str; 2] = [ACE_BINARY_NAMESPACE; 2]; -const ACE_SECTION_NAMES: [&str; 5] = [ACE_SECTION_NAMESPACE; 5]; -const ACE_WITHIN_SECTION_NAMES: [&str; 4] = [ACE_WITHIN_SECTION_NAMESPACE; 4]; -const ACE_READ_ID_NAMES: [&str; 1] = [ACE_READ_ID_NAMESPACE; 1]; -const ACE_READ_TO_EVAL_NAMES: [&str; 1] = [ACE_READ_TO_EVAL_NAMESPACE; 1]; -const ACE_EVAL_OP_NAMES: [&str; 1] = [ACE_EVAL_OP_NAMESPACE; 1]; -const ACE_EVAL_RESULT_NAMES: [&str; 2] = [ACE_EVAL_RESULT_NAMESPACE; 2]; -const ACE_FINAL_NAMES: [&str; 3] = [ACE_FINAL_NAMESPACE; 3]; -const ACE_FIRST_ROW_NAMES: [&str; 1] = [ACE_FIRST_ROW_NAMESPACE; 1]; - -const ACE_BINARY_TAGS: TagGroup = TagGroup { - base: ACE_BINARY_BASE_ID, - names: &ACE_BINARY_NAMES, -}; -const ACE_SECTION_TAGS: TagGroup = TagGroup { - base: ACE_SECTION_BASE_ID, - names: &ACE_SECTION_NAMES, -}; -const ACE_WITHIN_SECTION_TAGS: TagGroup = TagGroup { - base: ACE_WITHIN_SECTION_BASE_ID, - names: &ACE_WITHIN_SECTION_NAMES, -}; -const ACE_READ_ID_TAGS: TagGroup = TagGroup { - base: ACE_READ_ID_ID, - names: &ACE_READ_ID_NAMES, -}; -const ACE_READ_TO_EVAL_TAGS: TagGroup = TagGroup { - base: ACE_READ_TO_EVAL_ID, - names: &ACE_READ_TO_EVAL_NAMES, -}; -const ACE_EVAL_OP_TAGS: TagGroup = TagGroup { - base: ACE_EVAL_OP_ID, - names: &ACE_EVAL_OP_NAMES, -}; -const ACE_EVAL_RESULT_TAGS: TagGroup = TagGroup { - base: ACE_EVAL_RESULT_BASE_ID, - names: &ACE_EVAL_RESULT_NAMES, -}; -const ACE_FINAL_TAGS: TagGroup = TagGroup { - base: ACE_FINAL_BASE_ID, - names: &ACE_FINAL_NAMES, -}; -const ACE_FIRST_ROW_TAGS: TagGroup = TagGroup { - base: ACE_FIRST_ROW_ID, - names: &ACE_FIRST_ROW_NAMES, -}; - // ENTRY POINTS // ================================================================================================ -/// Enforce ACE chiplet constraints with transition handling. -pub fn enforce_ace_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: TaggingAirBuilderExt, -{ - // Load selectors - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let s2: AB::Expr = local.chiplets[2].clone().into(); - let s2_next: AB::Expr = next.chiplets[2].clone().into(); - let s3_next: AB::Expr = next.chiplets[3].clone().into(); - - // Gate transition constraints by is_transition() to avoid last-row issues - let is_transition: AB::Expr = builder.is_transition(); - - // ACE constraints on all rows (already internally gated) - enforce_ace_constraints_all_rows(builder, local, next); - - // ACE first row constraints (transitioning from memory to ACE) - // Flag: current row is memory (s0*s1*!s2), next row is ACE (s2'=1 AND s3'=0) - // The s3'=0 check is critical because: - // 1. A trace may skip ACE entirely (going memory -> kernel ROM) - // 2. When not in ACE, chiplets[4] is s4 (selector), not sstart - // 3. Without the s3'=0 check, we'd read the wrong column - // Must be gated by is_transition since it accesses next-row values - let memory_flag = memory_chiplet_flag(s0, s1, s2); - // ace_next = s2' * !s3' - let ace_next = s2_next * (AB::Expr::ONE - s3_next); - let flag_next_row_first_ace = is_transition * memory_flag * ace_next; - enforce_ace_constraints_first_row(builder, local, next, flag_next_row_first_ace); -} - /// Enforce ACE chiplet constraints that apply to all rows. pub fn enforce_ace_constraints_all_rows( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, + flags: &ChipletFlags, ) where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { - // Compute ACE active flag from top-level selectors - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let s2: AB::Expr = local.chiplets[2].clone().into(); - let s3: AB::Expr = local.chiplets[3].clone().into(); - let s3_next: AB::Expr = next.chiplets[3].clone().into(); - - let ace_flag = ace_chiplet_flag(s0.clone(), s1.clone(), s2.clone(), s3.clone()); - - // Load ACE columns - let sstart: AB::Expr = load_ace_col::(local, SELECTOR_START_IDX); - let sstart_next: AB::Expr = load_ace_col::(next, SELECTOR_START_IDX); - let sblock: AB::Expr = load_ace_col::(local, SELECTOR_BLOCK_IDX); - let sblock_next: AB::Expr = load_ace_col::(next, SELECTOR_BLOCK_IDX); - let ctx: AB::Expr = load_ace_col::(local, CTX_IDX); - let ctx_next: AB::Expr = load_ace_col::(next, CTX_IDX); - let ptr: AB::Expr = load_ace_col::(local, PTR_IDX); - let ptr_next: AB::Expr = load_ace_col::(next, PTR_IDX); - let clk: AB::Expr = load_ace_col::(local, CLK_IDX); - let clk_next: AB::Expr = load_ace_col::(next, CLK_IDX); - let op: AB::Expr = load_ace_col::(local, EVAL_OP_IDX); - let id0: AB::Expr = load_ace_col::(local, ID_0_IDX); - let id0_next: AB::Expr = load_ace_col::(next, ID_0_IDX); - let id1: AB::Expr = load_ace_col::(local, ID_1_IDX); - // n_eval stores (num_eval_rows - 1) so READ→EVAL switches when id0' == n_eval. - let n_eval: AB::Expr = load_ace_col::(local, READ_NUM_EVAL_IDX); - let n_eval_next: AB::Expr = load_ace_col::(next, READ_NUM_EVAL_IDX); - - let v0_0: AB::Expr = load_ace_col::(local, V_0_0_IDX); - let v0_1: AB::Expr = load_ace_col::(local, V_0_1_IDX); - let v1_0: AB::Expr = load_ace_col::(local, V_1_0_IDX); - let v1_1: AB::Expr = load_ace_col::(local, V_1_1_IDX); - let v2_0: AB::Expr = load_ace_col::(local, V_2_0_IDX); - let v2_1: AB::Expr = load_ace_col::(local, V_2_1_IDX); - - let one: AB::Expr = AB::Expr::ONE; - let four: AB::Expr = AB::Expr::from_u32(4); - - // Gate all transition constraints by is_transition() to avoid last-row issues - let is_transition: AB::Expr = builder.is_transition(); - - // ACE continuing to the next row (not transitioning out). - // Includes is_transition because it reads next-row values. - let flag_ace_next = is_transition.clone() * (one.clone() - s3_next.clone()); - // Last ACE row (next row transitions out of ACE). - // Includes is_transition because it reads next-row values. - let flag_ace_last = is_transition.clone() * s3_next.clone(); + let local = local.ace(); + let next = next.ace(); + + let ace_flag = flags.is_active.clone(); + let ace_transition = flags.is_transition.clone(); + let ace_last = flags.is_last.clone(); + + // Derived section flags + let s_start = local.s_start; + let s_start_next = next.s_start; + let s_transition = s_start_next.into().not(); + + // ========================================================================== + // FIRST ROW CONSTRAINTS + // ========================================================================== + + // First row of ACE must have sstart' = 1 + builder.when(flags.next_is_first.clone()).assert_one(s_start_next); // ========================================================================== // BINARY CONSTRAINTS // ========================================================================== - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &ACE_BINARY_TAGS, - &mut idx, - ace_flag.clone() * sstart.clone() * (sstart.clone() - one.clone()), - ); - tagged_assert_zero_integrity( - builder, - &ACE_BINARY_TAGS, - &mut idx, - ace_flag.clone() * sblock.clone() * (sblock.clone() - one.clone()), - ); + // When ACE is active, section flags must be boolean. + { + let builder = &mut builder.when(ace_flag.clone()); + builder.assert_bool(local.s_start); + builder.assert_bool(local.s_block); + } + + let f_eval = local.s_block; + let f_eval_next = next.s_block; + let f_read = f_eval.into().not(); + let f_read_next = f_eval_next.into().not(); // ========================================================================== // SECTION/BLOCK FLAGS CONSTRAINTS // ========================================================================== + { + // Last row of ACE chiplet cannot be section start + builder.when(ace_last.clone()).assert_zero(s_start); + + // Prevent consecutive section starts within ACE chiplet + builder.when(ace_transition.clone()).when(s_start).assert_zero(s_start_next); + + // Sections must start with READ blocks (not EVAL) + builder.when(ace_flag.clone()).when(s_start).assert_zero(f_eval); - let f_next = one.clone() - sstart_next.clone(); - - // Sections must end with EVAL blocks (not READ). - // OR(t*a, t*b) = t*OR(a, b) when t is binary. - let f_end = binary_or((one.clone() - s3_next.clone()) * sstart_next.clone(), s3_next.clone()); - - let mut idx = 0; - // Last row of ACE chiplet cannot be section start - tagged_assert_zero_integrity( - builder, - &ACE_SECTION_TAGS, - &mut idx, - ace_flag.clone() * flag_ace_last.clone() * sstart.clone(), - ); - // Prevent consecutive section starts within ACE chiplet - tagged_assert_zero_integrity( - builder, - &ACE_SECTION_TAGS, - &mut idx, - ace_flag.clone() * flag_ace_next.clone() * sstart.clone() * sstart_next.clone(), - ); - // Sections must start with READ blocks (not EVAL): f_eval = 0 when f_start - tagged_assert_zero_integrity( - builder, - &ACE_SECTION_TAGS, - &mut idx, - ace_flag.clone() * sstart.clone() * sblock.clone(), - ); - // EVAL blocks cannot be followed by READ blocks within same section - tagged_assert_zero_integrity( - builder, - &ACE_SECTION_TAGS, - &mut idx, - ace_flag.clone() - * flag_ace_next.clone() - * f_next.clone() - * sblock.clone() - * (one.clone() - sblock_next.clone()), - ); - // Sections must end with EVAL blocks (not READ) - tagged_assert_zero_integrity( - builder, - &ACE_SECTION_TAGS, - &mut idx, - ace_flag.clone() * is_transition.clone() * f_end.clone() * (one.clone() - sblock.clone()), - ); + // EVAL blocks cannot be followed by READ blocks within same section + builder + .when(ace_transition.clone()) + .when(s_transition.clone()) + .when(f_eval) + .assert_zero(f_read_next.clone()); + } // ========================================================================== // SECTION CONSTRAINTS (within section) // ========================================================================== - let flag_within_section = one.clone() - sstart_next.clone(); - let f_read = one.clone() - sblock.clone(); - let f_eval = sblock.clone(); - - // Context consistency within a section - // Use a combined gate to share `ace_flag * flag_ace_next * flag_within_section` - // across all within-section transition constraints. - let within_section_gate = - ace_flag.clone() * flag_ace_next.clone() * flag_within_section.clone(); - - // Memory pointer increments: +4 in READ, +1 in EVAL - // ptr' = ptr + 4 * f_read + f_eval - let expected_ptr_next = ptr.clone() + four.clone() * f_read.clone() + f_eval.clone(); - - // Node ID decrements: -2 in READ, -1 in EVAL - // id0 = id0' + 2 * f_read + f_eval - let expected_id0 = id0_next.clone() + f_read.clone().double() + f_eval.clone(); - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &ACE_WITHIN_SECTION_TAGS, - &mut idx, - within_section_gate.clone() * (ctx_next.clone() - ctx.clone()), - ); - tagged_assert_zero_integrity( - builder, - &ACE_WITHIN_SECTION_TAGS, - &mut idx, - within_section_gate.clone() * (clk_next.clone() - clk.clone()), - ); - tagged_assert_zero_integrity( - builder, - &ACE_WITHIN_SECTION_TAGS, - &mut idx, - within_section_gate.clone() * (ptr_next.clone() - expected_ptr_next), - ); - tagged_assert_zero_integrity( - builder, - &ACE_WITHIN_SECTION_TAGS, - &mut idx, - within_section_gate * (id0.clone() - expected_id0), - ); + // Within-section transitions: context, clock, pointer, and node ID consistency. + { + let builder = &mut builder.when(ace_transition.clone() * s_transition); + + // clk and ctx are stable + builder.assert_eq(next.ctx, local.ctx); + builder.assert_eq(next.clk, local.clk); + + // Memory pointer increments: +4 in READ, +1 in EVAL + // ptr' = ptr + 4 * f_read + f_eval + let expected_ptr: AB::Expr = local.ptr + f_read.clone() * F_4 + f_eval; + builder.assert_eq(next.ptr, expected_ptr); + + // Node ID decrements: -2 in READ, -1 in EVAL + // id0 = id0' + 2 * f_read + f_eval + let expected_id0: AB::Expr = next.id_0 + f_read.double() + f_eval; + builder.assert_eq(local.id_0, expected_id0); + } // ========================================================================== // READ BLOCK CONSTRAINTS // ========================================================================== // In READ block, the two node IDs should be consecutive (id1 = id0 - 1) - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &ACE_READ_ID_TAGS, - &mut idx, - ace_flag.clone() * f_read.clone() * (id1.clone() - id0.clone() + one.clone()), - ); + builder + .when(ace_flag.clone()) + .when(f_read.clone()) + .assert_eq(local.id_1, local.id_0 - F_1); // READ→EVAL transition occurs when n_eval matches the first EVAL id0. // n_eval is constant across READ rows and encodes (num_eval_rows - 1). // Enforce: f_read * (f_read' * n_eval' + f_eval' * id0' - n_eval) = 0 - let f_read_next = one.clone() - sblock_next.clone(); - let f_eval_next = sblock_next.clone(); - let selected = f_read_next * n_eval_next.clone() + f_eval_next * id0_next.clone(); - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &ACE_READ_TO_EVAL_TAGS, - &mut idx, - is_transition.clone() * ace_flag.clone() * f_read.clone() * (selected - n_eval), - ); + let selected: AB::Expr = f_read_next * next.read().num_eval + f_eval_next * next.id_0; + builder + .when(ace_transition.clone()) + .when(f_read.clone()) + .assert_eq(selected, local.read().num_eval); // ========================================================================== // EVAL BLOCK CONSTRAINTS // ========================================================================== - // op must be -1, 0, or 1: op * (op - 1) * (op + 1) = 0 - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &ACE_EVAL_OP_TAGS, - &mut idx, - ace_flag.clone() - * f_eval.clone() - * op.clone() - * (op.clone() - one.clone()) - * (op.clone() + one.clone()), - ); - - // Arithmetic operation constraints - let eval_gate = ace_flag.clone() * f_eval.clone(); - let (expected_0, expected_1) = compute_arithmetic_expected::(op, v1_0, v1_1, v2_0, v2_1); - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &ACE_EVAL_RESULT_TAGS, - &mut idx, - eval_gate.clone() * (expected_0 - v0_0.clone()), - ); - tagged_assert_zero_integrity( - builder, - &ACE_EVAL_RESULT_TAGS, - &mut idx, - eval_gate.clone() * (expected_1 - v0_1.clone()), - ); + // EVAL block: op ternary validity and arithmetic operation result. + { + let builder = &mut builder.when(ace_flag.clone() * f_eval); + let op: AB::Expr = local.eval_op.into(); + + let op_square = op.square(); + // op must be -1, 0, or 1: ternary validity + // op * (op² - 1) = op ( op - 1) ( op + 1 ) + builder.assert_zero(op.clone() * (op_square.clone() - F_1)); + + // Compute expected EVAL block output (v0) from op and operands. + // + // Operations in extension field 𝔽ₚ[x]/(x² - 7): + // - op = -1: Subtraction (v0 = v1 - v2) + // - op = 0: Multiplication (v0 = v1 × v2) + // - op = 1: Addition (v0 = v1 + v2) + let v0: QuadFeltExpr = local.v_0.into_expr(); + let v1: QuadFeltExpr = local.v_1.into_expr(); + let v2: QuadFeltExpr = local.eval().v_2.into_expr(); + + let expected = { + // Linear operation: v1 + op * v2 (works for ADD when op=1, SUB when op=-1) + let linear = v1.clone() + v2.clone() * op; + + // Non-linear operation: multiplication in extension field (α² = 7) + let nonlinear = v1 * v2; + + // Select based on op²: if op² = 1, use linear; if op² = 0, use nonlinear + // result = op² * (linear - nonlinear) + nonlinear + (linear - nonlinear.clone()) * op_square + nonlinear + }; + builder.assert_eq_quad(v0, expected); + } // ========================================================================== // FINALIZATION CONSTRAINTS // ========================================================================== - // At section end: v0 = 0, id0 = 0 - // Use a combined gate to share `ace_flag * is_transition * f_end` across all finalization - // constraints. - let gate = ace_flag * is_transition * f_end; - let mut idx = 0; - tagged_assert_zero_integrity(builder, &ACE_FINAL_TAGS, &mut idx, gate.clone() * v0_0); - tagged_assert_zero_integrity(builder, &ACE_FINAL_TAGS, &mut idx, gate.clone() * v0_1); - tagged_assert_zero_integrity(builder, &ACE_FINAL_TAGS, &mut idx, gate * id0); -} - -/// Enforce ACE first row constraints. -/// -/// On the first row of ACE chiplet, sstart' must be 1. -pub fn enforce_ace_constraints_first_row( - builder: &mut AB, - _local: &MainTraceRow, - next: &MainTraceRow, - flag_next_row_first_ace: AB::Expr, -) where - AB: TaggingAirBuilderExt, -{ - let sstart_next: AB::Expr = load_ace_col::(next, SELECTOR_START_IDX); - let one: AB::Expr = AB::Expr::ONE; - - // First row of ACE must have sstart' = 1 - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &ACE_FIRST_ROW_TAGS, - &mut idx, - flag_next_row_first_ace * (sstart_next - one), - ); -} + // At section end: result value and node ID must be zero. + { + // f_end fires on the last ACE row or on section boundaries. + let f_end = flags.is_last.clone() + flags.is_transition.clone() * s_start_next; + let builder = &mut builder.when(f_end); -// INTERNAL HELPERS -// ================================================================================================ + // Sections must end with EVAL blocks (not READ). + builder.assert_zero(f_read); -/// Load a column from the ACE section of chiplets. -fn load_ace_col(row: &MainTraceRow, ace_col_idx: usize) -> AB::Expr -where - AB: TaggingAirBuilderExt, -{ - // ACE columns start after s0, s1, s2, s3 (4 selectors) - let local_idx = ACE_OFFSET + ace_col_idx; - row.chiplets[local_idx].clone().into() -} - -/// Compute expected EVAL block outputs (v0) from op and operands. -/// -/// Operations in extension field 𝔽ₚ[x]/(x² - 7): -/// - op = -1: Subtraction (v0 = v1 - v2) -/// - op = 0: Multiplication (v0 = v1 × v2) -/// - op = 1: Addition (v0 = v1 + v2) -fn compute_arithmetic_expected( - op: AB::Expr, - v1_0: AB::Expr, - v1_1: AB::Expr, - v2_0: AB::Expr, - v2_1: AB::Expr, -) -> (AB::Expr, AB::Expr) -where - AB: TaggingAirBuilderExt, -{ - use crate::constraints::ext_field::QuadFeltExpr; + let v0: QuadFeltExpr = local.v_0.into_expr(); - let v1 = QuadFeltExpr(v1_0, v1_1); - let v2 = QuadFeltExpr(v2_0, v2_1); + builder.assert_eq_quad(v0, QuadFeltExpr::new(AB::Expr::ZERO, AB::Expr::ZERO)); - // Linear operation: v1 + op * v2 (works for ADD when op=1, SUB when op=-1) - let linear = v1.clone() + v2.clone() * op.clone(); - - // Non-linear operation: multiplication in extension field (α² = 7) - let nonlinear = v1 * v2; - - // Select based on op²: if op² = 1, use linear; if op² = 0, use nonlinear - // op_square * (linear - nonlinear) + nonlinear = v0 - let op_square = op.clone() * op; - let expected = QuadFeltExpr( - op_square.clone() * (linear.0.clone() - nonlinear.0.clone()) + nonlinear.0, - op_square * (linear.1.clone() - nonlinear.1.clone()) + nonlinear.1, - ); - - expected.into_parts().into() -} - -/// Computes binary OR: `a + b - a * b` -/// -/// Assumes both a and b are binary (0 or 1). -/// Returns 1 if either a=1 or b=1. -#[inline] -pub fn binary_or(a: E, b: E) -> E -where - E: Clone + core::ops::Add + core::ops::Sub + core::ops::Mul, -{ - a.clone() + b.clone() - a * b + builder.assert_zero(local.id_0); + } } diff --git a/air/src/constraints/chiplets/bitwise.rs b/air/src/constraints/chiplets/bitwise.rs index 5b1bed25cc..afe74e1bbd 100644 --- a/air/src/constraints/chiplets/bitwise.rs +++ b/air/src/constraints/chiplets/bitwise.rs @@ -21,103 +21,20 @@ //! | zp | Previous aggregated output | //! | z | Current aggregated output | -use alloc::vec::Vec; +use core::{array, borrow::Borrow}; use miden_core::field::PrimeCharacteristicRing; -use super::{ - hasher::periodic::NUM_PERIODIC_COLUMNS as HASHER_NUM_PERIODIC_COLUMNS, - selectors::bitwise_chiplet_flag, -}; +use super::selectors::ChipletFlags; use crate::{ - Felt, MainTraceRow, - constraints::tagging::{TagGroup, TaggingAirBuilderExt, tagged_assert_zero_integrity}, - trace::{ - CHIPLETS_OFFSET, - chiplets::{ - BITWISE_A_COL_IDX, BITWISE_A_COL_RANGE, BITWISE_B_COL_IDX, BITWISE_B_COL_RANGE, - BITWISE_OUTPUT_COL_IDX, BITWISE_PREV_OUTPUT_COL_IDX, BITWISE_SELECTOR_COL_IDX, - }, + AirBuilder, MainCols, MidenAirBuilder, + constraints::{ + chiplets::columns::{BitwiseCols, PeriodicCols}, + constants::F_16, + utils::horner_eval_bits, }, }; -// CONSTANTS -// ================================================================================================ - -/// Index of k_first periodic column (marks first row of 8-row cycle). -/// Placed after hasher periodic columns. -pub const P_BITWISE_K_FIRST: usize = HASHER_NUM_PERIODIC_COLUMNS; - -/// Index of k_transition periodic column (marks non-last rows of 8-row cycle). -pub const P_BITWISE_K_TRANSITION: usize = HASHER_NUM_PERIODIC_COLUMNS + 1; - -/// Total number of periodic columns (hasher + bitwise periodic columns). -#[cfg(all(test, feature = "std"))] -pub const NUM_PERIODIC_COLUMNS: usize = HASHER_NUM_PERIODIC_COLUMNS + 2; - -/// Number of bits processed per row. -const NUM_BITS_PER_ROW: usize = 4; - -// TAGGING IDS -// ================================================================================================ - -pub(super) const BITWISE_BASE_ID: usize = - super::hasher::HASHER_MERKLE_ROUTING_BASE_ID + super::hasher::HASHER_MERKLE_ROUTING_COUNT; -pub(super) const BITWISE_COUNT: usize = 17; -const BITWISE_OP_BINARY_ID: usize = BITWISE_BASE_ID; -const BITWISE_A_BITS_BINARY_BASE_ID: usize = BITWISE_BASE_ID + 2; -const BITWISE_B_BITS_BINARY_BASE_ID: usize = BITWISE_A_BITS_BINARY_BASE_ID + NUM_BITS_PER_ROW; -const BITWISE_FIRST_ROW_BASE_ID: usize = BITWISE_B_BITS_BINARY_BASE_ID + NUM_BITS_PER_ROW; -const BITWISE_INPUT_TRANSITION_BASE_ID: usize = BITWISE_FIRST_ROW_BASE_ID + 3; -const BITWISE_OUTPUT_PREV_ID: usize = BITWISE_INPUT_TRANSITION_BASE_ID + 2; -const BITWISE_OUTPUT_AGG_ID: usize = BITWISE_OUTPUT_PREV_ID + 1; - -const OP_BINARY_NAMESPACE: &str = "chiplets.bitwise.op.binary"; -const OP_STABILITY_NAMESPACE: &str = "chiplets.bitwise.op.stability"; -const A_BITS_BINARY_NAMESPACE: &str = "chiplets.bitwise.a_bits.binary"; -const B_BITS_BINARY_NAMESPACE: &str = "chiplets.bitwise.b_bits.binary"; -const FIRST_ROW_NAMESPACE: &str = "chiplets.bitwise.first_row"; -const INPUT_TRANSITION_NAMESPACE: &str = "chiplets.bitwise.input.transition"; -const OUTPUT_PREV_NAMESPACE: &str = "chiplets.bitwise.output.prev"; -const OUTPUT_AGG_NAMESPACE: &str = "chiplets.bitwise.output.aggregate"; - -const OP_NAMES: [&str; 2] = [OP_BINARY_NAMESPACE, OP_STABILITY_NAMESPACE]; -const A_BITS_NAMES: [&str; NUM_BITS_PER_ROW] = [A_BITS_BINARY_NAMESPACE; NUM_BITS_PER_ROW]; -const B_BITS_NAMES: [&str; NUM_BITS_PER_ROW] = [B_BITS_BINARY_NAMESPACE; NUM_BITS_PER_ROW]; -const FIRST_ROW_NAMES: [&str; 3] = [FIRST_ROW_NAMESPACE; 3]; -const INPUT_TRANSITION_NAMES: [&str; 2] = [INPUT_TRANSITION_NAMESPACE; 2]; -const OUTPUT_PREV_NAMES: [&str; 1] = [OUTPUT_PREV_NAMESPACE; 1]; -const OUTPUT_AGG_NAMES: [&str; 1] = [OUTPUT_AGG_NAMESPACE; 1]; - -const OP_TAGS: TagGroup = TagGroup { - base: BITWISE_OP_BINARY_ID, - names: &OP_NAMES, -}; -const A_BITS_TAGS: TagGroup = TagGroup { - base: BITWISE_A_BITS_BINARY_BASE_ID, - names: &A_BITS_NAMES, -}; -const B_BITS_TAGS: TagGroup = TagGroup { - base: BITWISE_B_BITS_BINARY_BASE_ID, - names: &B_BITS_NAMES, -}; -const FIRST_ROW_TAGS: TagGroup = TagGroup { - base: BITWISE_FIRST_ROW_BASE_ID, - names: &FIRST_ROW_NAMES, -}; -const INPUT_TRANSITION_TAGS: TagGroup = TagGroup { - base: BITWISE_INPUT_TRANSITION_BASE_ID, - names: &INPUT_TRANSITION_NAMES, -}; -const OUTPUT_PREV_TAGS: TagGroup = TagGroup { - base: BITWISE_OUTPUT_PREV_ID, - names: &OUTPUT_PREV_NAMES, -}; -const OUTPUT_AGG_TAGS: TagGroup = TagGroup { - base: BITWISE_OUTPUT_AGG_ID, - names: &OUTPUT_AGG_NAMES, -}; - // ENTRY POINTS // ================================================================================================ @@ -129,102 +46,73 @@ const OUTPUT_AGG_TAGS: TagGroup = TagGroup { /// 3. Output aggregation constraints pub fn enforce_bitwise_constraints( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, + flags: &ChipletFlags, ) where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { - let (k_first, k_transition) = { - // Clone out what we need to avoid holding a borrow of `builder` while asserting - // constraints. - let periodic = builder.periodic_values(); - debug_assert!(periodic.len() > P_BITWISE_K_TRANSITION); - (periodic[P_BITWISE_K_FIRST].into(), periodic[P_BITWISE_K_TRANSITION].into()) - }; + let periodic: &PeriodicCols<_> = builder.periodic_values().borrow(); + let k_first = periodic.bitwise.k_first; + let k_transition = periodic.bitwise.k_transition; - // Compute bitwise active flag from top-level selectors - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let bitwise_flag = bitwise_chiplet_flag(s0, s1); + let bitwise_flag = flags.is_active.clone(); - // Load bitwise columns using typed struct - let cols: BitwiseColumns = BitwiseColumns::from_row(local); - let cols_next: BitwiseColumns = BitwiseColumns::from_row(next); + let cols: &BitwiseCols = local.bitwise(); + let cols_next: &BitwiseCols = next.bitwise(); - let one: AB::Expr = AB::Expr::ONE; - let sixteen: AB::Expr = AB::Expr::from_u32(16); + // All bitwise constraints are gated on the bitwise chiplet being active. + let bitwise_builder = &mut builder.when(bitwise_flag); // ========================================================================== // OPERATION FLAG CONSTRAINTS // ========================================================================== // op_flag must be binary (0 for AND, 1 for XOR) - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &OP_TAGS, - &mut idx, - bitwise_flag.clone() * cols.op_flag.clone() * (cols.op_flag.clone() - one.clone()), - ); + let op_flag = cols.op_flag; + bitwise_builder.assert_bool(op_flag); // op_flag must remain constant within the 8-row cycle (can only change when k1=0) - let gate_transition = k_transition.clone() * bitwise_flag.clone(); - tagged_assert_zero_integrity( - builder, - &OP_TAGS, - &mut idx, - gate_transition.clone() * (cols.op_flag.clone() - cols_next.op_flag.clone()), - ); + let op_flag_next = cols_next.op_flag; + bitwise_builder.when(k_transition).assert_eq(op_flag, op_flag_next); // ========================================================================== // INPUT DECOMPOSITION CONSTRAINTS // ========================================================================== + let (a, a_bits) = (cols.a, cols.a_bits); + let (b, b_bits) = (cols.b, cols.b_bits); // Bit decomposition columns must be binary - let gate = bitwise_flag.clone(); - let mut idx = 0; - for i in 0..NUM_BITS_PER_ROW { - tagged_assert_zero_integrity( - builder, - &A_BITS_TAGS, - &mut idx, - gate.clone() * cols.a_bits[i].clone() * (cols.a_bits[i].clone() - one.clone()), - ); - } - - let mut idx = 0; - for i in 0..NUM_BITS_PER_ROW { - tagged_assert_zero_integrity( - builder, - &B_BITS_TAGS, - &mut idx, - gate.clone() * cols.b_bits[i].clone() * (cols.b_bits[i].clone() - one.clone()), - ); - } + bitwise_builder.assert_bools(a_bits); + bitwise_builder.assert_bools(b_bits); // First row of cycle (k0=1): a = aggregated bits, b = aggregated bits - let a_agg = aggregate_limbs(&cols.a_bits); - let b_agg = aggregate_limbs(&cols.b_bits); - let gate_first = k_first.clone() * bitwise_flag.clone(); - let mut idx = 0; - for expr in [cols.a.clone() - a_agg, cols.b.clone() - b_agg, cols.prev_output.clone()] { - tagged_assert_zero_integrity(builder, &FIRST_ROW_TAGS, &mut idx, gate_first.clone() * expr); + // First row: input aggregation must match, and previous output must be zero. + { + let builder = &mut bitwise_builder.when(k_first); + + let a_expected = horner_eval_bits(&a_bits); + builder.assert_eq(a, a_expected); + + let b_expected = horner_eval_bits(&b_bits); + builder.assert_eq(b, b_expected); + + builder.assert_zero(cols.prev_output); } + let (a_next, a_next_bits) = (cols_next.a, cols_next.a_bits); + let (b_next, b_next_bits) = (cols_next.b, cols_next.b_bits); + // Transition rows (k1=1): a' = 16*a + agg(a'_bits), b' = 16*b + agg(b'_bits) - let a_agg_next = aggregate_limbs(&cols_next.a_bits); - let b_agg_next = aggregate_limbs(&cols_next.b_bits); - let mut idx = 0; - for expr in [ - cols_next.a.clone() - (cols.a.clone() * sixteen.clone() + a_agg_next), - cols_next.b.clone() - (cols.b.clone() * sixteen.clone() + b_agg_next), - ] { - tagged_assert_zero_integrity( - builder, - &INPUT_TRANSITION_TAGS, - &mut idx, - gate_transition.clone() * expr, - ); + // Transition rows: inputs aggregate with 16x shift. + { + let builder = &mut bitwise_builder.when(k_transition); + + let a_next_expected = a * F_16 + horner_eval_bits(&a_next_bits); + builder.assert_eq(a_next, a_next_expected); + + let b_next_expected = b * F_16 + horner_eval_bits(&b_next_bits); + builder.assert_eq(b_next, b_next_expected); } // ========================================================================== @@ -232,148 +120,27 @@ pub fn enforce_bitwise_constraints( // ========================================================================== // Transition rows (k1=1): output_prev' = output - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &OUTPUT_PREV_TAGS, - &mut idx, - gate_transition * (cols_next.prev_output.clone() - cols.output.clone()), - ); + let output = cols.output; + let prev_output_next = cols_next.prev_output; + bitwise_builder.when(k_transition).assert_eq(output, prev_output_next); // Every row: output = 16*output_prev + bitwise_result - let a_and_b = compute_limb_and(&cols.a_bits, &cols.b_bits); - let a_xor_b = compute_limb_xor(&cols.a_bits, &cols.b_bits); - - // z = zp * 16 + (op_flag ? a_xor_b : a_and_b) - // Equivalent: z = zp * 16 + a_and_b + op_flag * (a_xor_b - a_and_b) - let expected_z = cols.prev_output.clone() * sixteen - + a_and_b.clone() - + cols.op_flag.clone() * (a_xor_b.clone() - a_and_b); - - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &OUTPUT_AGG_TAGS, - &mut idx, - bitwise_flag * (cols.output.clone() - expected_z), - ); -} -// INTERNAL HELPERS -// ================================================================================================ + // Compute AND of 4-bit limbs: sum(2^i * (a[i] * b[i])) + let a_and_b_bits: [AB::Expr; 4] = array::from_fn(|i| a_bits[i] * b_bits[i]); + let a_and_b: AB::Expr = horner_eval_bits(&a_and_b_bits); -/// Typed access to bitwise chiplet columns. -/// -/// This struct provides named access to bitwise columns, eliminating error-prone -/// index arithmetic. Created from a `MainTraceRow` reference. -pub struct BitwiseColumns { - /// Operation flag: 0=AND, 1=XOR - pub op_flag: E, - /// Aggregated value of input a - pub a: E, - /// Aggregated value of input b - pub b: E, - /// 4-bit decomposition of a (little-endian) - pub a_bits: [E; NUM_BITS_PER_ROW], - /// 4-bit decomposition of b (little-endian) - pub b_bits: [E; NUM_BITS_PER_ROW], - /// Previous aggregated output - pub prev_output: E, - /// Current aggregated output - pub output: E, -} + // Compute XOR of 4-bit limbs: sum(2^i * (a[i] + b[i] - 2*a[i]*b[i])) + // Reuses a_and_b_bits: xor_bit = a + b - 2*and_bit + let a_xor_b_bits: [AB::Expr; 4] = + array::from_fn(|i| a_bits[i] + b_bits[i] - a_and_b_bits[i].clone().double()); + let a_xor_b: AB::Expr = horner_eval_bits(&a_xor_b_bits); -impl BitwiseColumns { - /// Extract bitwise columns from a main trace row. - pub fn from_row(row: &MainTraceRow) -> Self - where - V: Into + Clone, - { - let op_idx = BITWISE_SELECTOR_COL_IDX - CHIPLETS_OFFSET; - let a_idx = BITWISE_A_COL_IDX - CHIPLETS_OFFSET; - let b_idx = BITWISE_B_COL_IDX - CHIPLETS_OFFSET; - let a_bits_start = BITWISE_A_COL_RANGE.start - CHIPLETS_OFFSET; - let b_bits_start = BITWISE_B_COL_RANGE.start - CHIPLETS_OFFSET; - let zp_idx = BITWISE_PREV_OUTPUT_COL_IDX - CHIPLETS_OFFSET; - let z_idx = BITWISE_OUTPUT_COL_IDX - CHIPLETS_OFFSET; - - BitwiseColumns { - op_flag: row.chiplets[op_idx].clone().into(), - a: row.chiplets[a_idx].clone().into(), - b: row.chiplets[b_idx].clone().into(), - a_bits: core::array::from_fn(|i| row.chiplets[a_bits_start + i].clone().into()), - b_bits: core::array::from_fn(|i| row.chiplets[b_bits_start + i].clone().into()), - prev_output: row.chiplets[zp_idx].clone().into(), - output: row.chiplets[z_idx].clone().into(), - } - } -} - -/// Aggregate 4 bits into a value (little-endian): sum(2^i * limb[i]) -/// Uses Horner's method: ((b3*2 + b2)*2 + b1)*2 + b0 -fn aggregate_limbs(limbs: &[E; 4]) -> E { - limbs - .iter() - .rev() - .cloned() - .reduce(|acc, bit| acc.double() + bit) - .expect("non-empty array") -} - -/// Compute AND of 4-bit limbs: sum(2^i * (a[i] * b[i])) -/// Uses Horner's method for aggregation -fn compute_limb_and(a: &[E; 4], b: &[E; 4]) -> E { - (0..4) - .rev() - .map(|i| a[i].clone() * b[i].clone()) - .reduce(|acc, bit| acc.double() + bit) - .expect("non-empty range") -} - -/// Compute XOR of 4-bit limbs: sum(2^i * (a[i] + b[i] - 2*a[i]*b[i])) -/// Uses Horner's method for aggregation -fn compute_limb_xor(a: &[E; 4], b: &[E; 4]) -> E { - (0..4) - .rev() - .map(|i| { - let and_bit = a[i].clone() * b[i].clone(); - a[i].clone() + b[i].clone() - and_bit.double() - }) - .reduce(|acc, bit| acc.double() + bit) - .expect("non-empty range") -} - -// ============================================================================= -// PERIODIC COLUMNS -// ============================================================================= - -/// Generate periodic columns for the bitwise chiplet. -/// -/// Returns [k_first, k_transition] where: -/// - k_first: [1, 0, 0, 0, 0, 0, 0, 0] (period 8) -/// - k_transition: [1, 1, 1, 1, 1, 1, 1, 0] (period 8) -pub fn periodic_columns() -> [Vec; 2] { - let k_first = vec![ - Felt::ONE, - Felt::ZERO, - Felt::ZERO, - Felt::ZERO, - Felt::ZERO, - Felt::ZERO, - Felt::ZERO, - Felt::ZERO, - ]; - - let k_transition = vec![ - Felt::ONE, - Felt::ONE, - Felt::ONE, - Felt::ONE, - Felt::ONE, - Felt::ONE, - Felt::ONE, - Felt::ZERO, - ]; + // z = zp * 16 + (op_flag ? a_xor_b : a_and_b) + // Equivalent: z = zp * 16 + a_and_b + op_flag * (a_xor_b - a_and_b) + let zp = cols.prev_output; + let expected_z = zp * F_16 + a_and_b.clone() + op_flag * (a_xor_b - a_and_b); - [k_first, k_transition] + let z = cols.output; + bitwise_builder.assert_eq(z, expected_z); } diff --git a/air/src/constraints/chiplets/bus/chiplets.rs b/air/src/constraints/chiplets/bus/chiplets.rs index 0f5fb83116..fe2cf466b9 100644 --- a/air/src/constraints/chiplets/bus/chiplets.rs +++ b/air/src/constraints/chiplets/bus/chiplets.rs @@ -22,7 +22,7 @@ //! - state = sum(beta^(3+i) * hasher_state[i]) for i in 0..12 //! //! ### Bitwise Chiplet Messages (5 elements) -//! Format: alpha + beta^0*label + beta^1*a + beta^2*b + beta^3*z +//! Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*a + beta^2*b + beta^3*z //! //! ### Memory Chiplet Messages (6-9 elements) //! Element format: alpha + beta^0*label + ... + beta^4*element @@ -31,19 +31,20 @@ //! ## References //! - Processor: processor/src/chiplets/aux_trace/bus/ +use core::borrow::Borrow; + use miden_core::{FMP_ADDR, FMP_INIT_VALUE, field::PrimeCharacteristicRing, operations::opcodes}; -use miden_crypto::stark::air::{ExtensionBuilder, LiftedAirBuilder, WindowAccess}; +use miden_crypto::stark::air::{ExtensionBuilder, WindowAccess}; use crate::{ - Felt, MainTraceRow, + Felt, MainCols, MidenAirBuilder, constraints::{ bus::indices::B_CHIPLETS, - chiplets::bitwise::P_BITWISE_K_TRANSITION, + chiplets::{columns::PeriodicCols, selectors::ChipletSelectors}, op_flags::OpFlags, - tagging::{TaggingAirBuilderExt, ids::TAG_CHIPLETS_BUS_BASE}, }, trace::{ - Challenges, + Challenges, bus_types, chiplets::{ NUM_ACE_SELECTORS, NUM_KERNEL_ROM_SELECTORS, ace::{ @@ -61,7 +62,6 @@ use crate::{ MEMORY_WRITE_WORD_LABEL, }, }, - decoder::{ADDR_COL_IDX, HASHER_STATE_RANGE, USER_OP_HELPERS_OFFSET}, log_precompile::{ HELPER_ADDR_IDX, HELPER_CAP_PREV_RANGE, STACK_CAP_NEXT_RANGE, STACK_COMM_RANGE, STACK_R0_RANGE, STACK_R1_RANGE, STACK_TAG_RANGE, @@ -74,10 +74,6 @@ const INPUT_LABEL_OFFSET: u16 = 16; /// Label offset for output (end) messages on the chiplets bus. const OUTPUT_LABEL_OFFSET: u16 = 32; -/// Tag ID and namespace for the main chiplets bus transition constraint. -const CHIPLET_BUS_ID: usize = TAG_CHIPLETS_BUS_BASE; -const CHIPLET_BUS_NAMESPACE: &str = "chiplets.bus.chiplets.transition"; - // ENTRY POINTS // ================================================================================================ @@ -93,12 +89,13 @@ const CHIPLET_BUS_NAMESPACE: &str = "chiplets.bus.chiplets.transition"; /// `responses` are messages removed by chiplet operations. pub fn enforce_chiplets_bus_constraint( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, + selectors: &ChipletSelectors, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { // Auxiliary trace must be present. @@ -252,43 +249,30 @@ pub fn enforce_chiplets_bus_constraint( // Responses come from chiplet rows. Chiplet selectors are mutually exclusive. // --- Get periodic columns for bitwise cycle gating --- - let k_transition: AB::Expr = builder.periodic_values()[P_BITWISE_K_TRANSITION].into(); - - // --- Chiplet selector flags (from chiplets columns) --- - let chiplet_s0: AB::Expr = local.chiplets[0].clone().into(); - let chiplet_s1: AB::Expr = local.chiplets[1].clone().into(); - let chiplet_s2: AB::Expr = local.chiplets[2].clone().into(); - let chiplet_s3: AB::Expr = local.chiplets[3].clone().into(); - let chiplet_s4: AB::Expr = local.chiplets[4].clone().into(); - - // Bitwise chiplet active: s0=1, s1=0 - // Bitwise responds only on last row of 8-row cycle (when k_transition=0) - let is_bitwise_row: AB::Expr = chiplet_s0.clone() * (AB::Expr::ONE - chiplet_s1.clone()); - let is_bitwise_responding: AB::Expr = is_bitwise_row * (AB::Expr::ONE - k_transition); - - // Memory chiplet active: s0=1, s1=1, s2=0 - let is_memory: AB::Expr = - chiplet_s0.clone() * chiplet_s1.clone() * (AB::Expr::ONE - chiplet_s2.clone()); - - // ACE chiplet active: s0=1, s1=1, s2=1, s3=0 - // Response only on start rows (ace_start_selector = 1) - let is_ace_row: AB::Expr = chiplet_s0.clone() - * chiplet_s1.clone() - * chiplet_s2.clone() - * (AB::Expr::ONE - chiplet_s3.clone()); + let periodic: &PeriodicCols = builder.periodic_values().borrow(); + let k_transition: AB::Expr = periodic.bitwise.k_transition.into(); + + // --- Chiplet response flags (from precomputed ChipletSelectors) --- + // Bitwise responds only on the last row of its 8-row cycle (k_transition=0). + let is_bitwise_responding: AB::Expr = + selectors.bitwise.is_active.clone() * (AB::Expr::ONE - k_transition); + + let is_memory: AB::Expr = selectors.memory.is_active.clone(); + + // ACE responds only on start rows (ace_start_selector = 1). let ace_start_selector: AB::Expr = - local.chiplets[NUM_ACE_SELECTORS + SELECTOR_START_IDX].clone().into(); - let is_ace: AB::Expr = is_ace_row * ace_start_selector; + local.chiplets[NUM_ACE_SELECTORS + SELECTOR_START_IDX].into(); + let is_ace: AB::Expr = selectors.ace.is_active.clone() * ace_start_selector; - // Kernel ROM chiplet active: s0=1, s1=1, s2=1, s3=1, s4=0 - let is_kernel_rom: AB::Expr = chiplet_s0.clone() - * chiplet_s1.clone() - * chiplet_s2.clone() - * chiplet_s3.clone() - * (AB::Expr::ONE - chiplet_s4.clone()); + let is_kernel_rom: AB::Expr = selectors.kernel_rom.is_active.clone(); // --- Hasher response (complex, depends on cycle position and selectors) --- - let hasher_response = compute_hasher_response::(local, next, challenges); + let hasher_response = compute_hasher_response::( + local, + next, + challenges, + selectors.controller.is_active.clone(), + ); // --- Bitwise response --- let v_bitwise = compute_bitwise_response::(local, challenges); @@ -323,9 +307,7 @@ pub fn enforce_chiplets_bus_constraint( let lhs: AB::ExprEF = Into::::into(b_next_val) * requests; let rhs: AB::ExprEF = Into::::into(b_local_val) * responses; - builder.tagged(CHIPLET_BUS_ID, CHIPLET_BUS_NAMESPACE, |builder| { - builder.when_transition().assert_zero_ext(lhs - rhs); - }); + builder.when_transition().assert_eq_ext(lhs, rhs); } // BITWISE MESSAGE HELPERS @@ -333,12 +315,12 @@ pub fn enforce_chiplets_bus_constraint( /// Computes the bitwise request message value. /// -/// Format: alpha + beta^0*label + beta^1*a + beta^2*b + beta^3*z +/// Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*a + beta^2*b + beta^3*z /// /// Stack layout for U32AND/U32XOR: [a, b, ...] -> [z, ...] -fn compute_bitwise_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_bitwise_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, is_xor: bool, ) -> AB::ExprEF { @@ -346,18 +328,18 @@ fn compute_bitwise_request>( let label: AB::Expr = AB::Expr::from(label); // Stack values - let a: AB::Expr = local.stack[0].clone().into(); - let b: AB::Expr = local.stack[1].clone().into(); - let z: AB::Expr = next.stack[0].clone().into(); + let a: AB::Expr = local.stack.get(0).into(); + let b: AB::Expr = local.stack.get(1).into(); + let z: AB::Expr = next.stack.get(0).into(); - challenges.encode([label, a, b, z]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, a, b, z]) } /// Computes the bitwise chiplet response message value. /// -/// Format: alpha + beta^0*label + beta^1*a + beta^2*b + beta^3*z -fn compute_bitwise_response>( - local: &MainTraceRow, +/// Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*a + beta^2*b + beta^3*z +fn compute_bitwise_response( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { use crate::trace::chiplets::NUM_BITWISE_SELECTORS; @@ -368,17 +350,17 @@ fn compute_bitwise_response>( // Get bitwise operation selector and compute label // The AND/XOR selector is at bitwise[0] = local.chiplets[bw_offset] // label = (1 - sel) * AND_LABEL + sel * XOR_LABEL - let sel: AB::Expr = local.chiplets[bw_offset].clone().into(); + let sel: AB::Expr = local.chiplets[bw_offset].into(); let one_minus_sel = AB::Expr::ONE - sel.clone(); let label = one_minus_sel * AB::Expr::from(BITWISE_AND_LABEL) + sel.clone() * AB::Expr::from(BITWISE_XOR_LABEL); // Bitwise chiplet data columns (offset by bw_offset + bitwise internal indices) - let a: AB::Expr = local.chiplets[bw_offset + bitwise::A_COL_IDX].clone().into(); - let b: AB::Expr = local.chiplets[bw_offset + bitwise::B_COL_IDX].clone().into(); - let z: AB::Expr = local.chiplets[bw_offset + bitwise::OUTPUT_COL_IDX].clone().into(); + let a: AB::Expr = local.chiplets[bw_offset + bitwise::A_COL_IDX].into(); + let b: AB::Expr = local.chiplets[bw_offset + bitwise::B_COL_IDX].into(); + let z: AB::Expr = local.chiplets[bw_offset + bitwise::OUTPUT_COL_IDX].into(); - challenges.encode([label, a, b, z]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, a, b, z]) } // MEMORY MESSAGE HELPERS @@ -386,14 +368,14 @@ fn compute_bitwise_response>( /// Computes the memory word request message value. /// -/// Format: alpha + beta^0*label + beta^1*ctx + beta^2*addr + beta^3*clk + +/// Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*ctx + beta^2*addr + beta^3*clk + /// beta^4..beta^7 * word /// /// Stack layout for MLOADW: [addr, ...] -> [word[0], word[1], word[2], word[3], ...] /// Stack layout for MSTOREW: [addr, word[0], word[1], word[2], word[3], ...] -fn compute_memory_word_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_memory_word_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, is_read: bool, ) -> AB::ExprEF { @@ -405,40 +387,41 @@ fn compute_memory_word_request>( let label: AB::Expr = AB::Expr::from_u16(label as u16); // Context and clock from system columns - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); // Address is at stack[0] - let addr: AB::Expr = local.stack[0].clone().into(); + let addr: AB::Expr = local.stack.get(0).into(); // Word values depend on read vs write let (w0, w1, w2, w3) = if is_read { // MLOADW: word comes from next stack state ( - next.stack[0].clone().into(), - next.stack[1].clone().into(), - next.stack[2].clone().into(), - next.stack[3].clone().into(), + next.stack.get(0).into(), + next.stack.get(1).into(), + next.stack.get(2).into(), + next.stack.get(3).into(), ) } else { // MSTOREW: word comes from current stack[1..5] ( - local.stack[1].clone().into(), - local.stack[2].clone().into(), - local.stack[3].clone().into(), - local.stack[4].clone().into(), + local.stack.get(1).into(), + local.stack.get(2).into(), + local.stack.get(3).into(), + local.stack.get(4).into(), ) }; - challenges.encode([label, ctx, addr, clk, w0, w1, w2, w3]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, ctx, addr, clk, w0, w1, w2, w3]) } /// Computes the memory element request message value. /// -/// Format: alpha + beta^0*label + beta^1*ctx + beta^2*addr + beta^3*clk + beta^4*element -fn compute_memory_element_request>( - local: &MainTraceRow, - next: &MainTraceRow, +/// Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*ctx + beta^2*addr + beta^3*clk + +/// beta^4*element +fn compute_memory_element_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, is_read: bool, ) -> AB::ExprEF { @@ -450,248 +433,275 @@ fn compute_memory_element_request>( let label: AB::Expr = AB::Expr::from_u16(label as u16); // Context and clock from system columns - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); // Address is at stack[0] - let addr: AB::Expr = local.stack[0].clone().into(); + let addr: AB::Expr = local.stack.get(0).into(); // Element value let element = if is_read { // MLOAD: element comes from next stack[0] - next.stack[0].clone().into() + next.stack.get(0).into() } else { // MSTORE: element comes from current stack[1] - local.stack[1].clone().into() + local.stack.get(1).into() }; - challenges.encode([label, ctx, addr, clk, element]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, ctx, addr, clk, element]) } /// Computes the MSTREAM request message value (two word reads). -fn compute_mstream_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_mstream_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { let label: AB::Expr = AB::Expr::from_u16(MEMORY_READ_WORD_LABEL as u16); - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - let addr: AB::Expr = local.stack[12].clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); + let addr: AB::Expr = local.stack.get(12).into(); let four: AB::Expr = AB::Expr::from_u16(4); // First word: next.stack[0..4] at addr let word1 = [ - next.stack[0].clone().into(), - next.stack[1].clone().into(), - next.stack[2].clone().into(), - next.stack[3].clone().into(), + next.stack.get(0).into(), + next.stack.get(1).into(), + next.stack.get(2).into(), + next.stack.get(3).into(), ]; // Second word: next.stack[4..8] at addr + 4 let word2 = [ - next.stack[4].clone().into(), - next.stack[5].clone().into(), - next.stack[6].clone().into(), - next.stack[7].clone().into(), + next.stack.get(4).into(), + next.stack.get(5).into(), + next.stack.get(6).into(), + next.stack.get(7).into(), ]; - let msg1 = challenges.encode([ - label.clone(), - ctx.clone(), - addr.clone(), - clk.clone(), - word1[0].clone(), - word1[1].clone(), - word1[2].clone(), - word1[3].clone(), - ]); - - let msg2 = challenges.encode([ - label, - ctx, - addr + four.clone(), - clk, - word2[0].clone(), - word2[1].clone(), - word2[2].clone(), - word2[3].clone(), - ]); + let msg1 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + label.clone(), + ctx.clone(), + addr.clone(), + clk.clone(), + word1[0].clone(), + word1[1].clone(), + word1[2].clone(), + word1[3].clone(), + ], + ); + + let msg2 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + label, + ctx, + addr + four.clone(), + clk, + word2[0].clone(), + word2[1].clone(), + word2[2].clone(), + word2[3].clone(), + ], + ); msg1 * msg2 } /// Computes the PIPE request message value (two word writes). -fn compute_pipe_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_pipe_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { let label: AB::Expr = AB::Expr::from_u16(MEMORY_WRITE_WORD_LABEL as u16); - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - let addr: AB::Expr = local.stack[12].clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); + let addr: AB::Expr = local.stack.get(12).into(); let four: AB::Expr = AB::Expr::from_u16(4); // First word to addr: next.stack[0..4] let word1 = [ - next.stack[0].clone().into(), - next.stack[1].clone().into(), - next.stack[2].clone().into(), - next.stack[3].clone().into(), + next.stack.get(0).into(), + next.stack.get(1).into(), + next.stack.get(2).into(), + next.stack.get(3).into(), ]; // Second word to addr + 4: next.stack[4..8] let word2 = [ - next.stack[4].clone().into(), - next.stack[5].clone().into(), - next.stack[6].clone().into(), - next.stack[7].clone().into(), + next.stack.get(4).into(), + next.stack.get(5).into(), + next.stack.get(6).into(), + next.stack.get(7).into(), ]; - let msg1 = challenges.encode([ - label.clone(), - ctx.clone(), - addr.clone(), - clk.clone(), - word1[0].clone(), - word1[1].clone(), - word1[2].clone(), - word1[3].clone(), - ]); - - let msg2 = challenges.encode([ - label, - ctx, - addr + four.clone(), - clk, - word2[0].clone(), - word2[1].clone(), - word2[2].clone(), - word2[3].clone(), - ]); + let msg1 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + label.clone(), + ctx.clone(), + addr.clone(), + clk.clone(), + word1[0].clone(), + word1[1].clone(), + word1[2].clone(), + word1[3].clone(), + ], + ); + + let msg2 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + label, + ctx, + addr + four.clone(), + clk, + word2[0].clone(), + word2[1].clone(), + word2[2].clone(), + word2[3].clone(), + ], + ); msg1 * msg2 } /// Computes the CRYPTOSTREAM request value (two word reads + two word writes). -fn compute_cryptostream_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_cryptostream_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { let read_label: AB::Expr = AB::Expr::from_u16(MEMORY_READ_WORD_LABEL as u16); let write_label: AB::Expr = AB::Expr::from_u16(MEMORY_WRITE_WORD_LABEL as u16); - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - let src: AB::Expr = local.stack[12].clone().into(); - let dst: AB::Expr = local.stack[13].clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); + let src: AB::Expr = local.stack.get(12).into(); + let dst: AB::Expr = local.stack.get(13).into(); let four: AB::Expr = AB::Expr::from_u16(4); - let rate: [AB::Expr; 8] = core::array::from_fn(|i| local.stack[i].clone().into()); - let cipher: [AB::Expr; 8] = core::array::from_fn(|i| next.stack[i].clone().into()); + let rate: [AB::Expr; 8] = core::array::from_fn(|i| local.stack.get(i).into()); + let cipher: [AB::Expr; 8] = core::array::from_fn(|i| next.stack.get(i).into()); let plain: [AB::Expr; 8] = core::array::from_fn(|i| cipher[i].clone() - rate[i].clone()); - let read_msg1 = challenges.encode([ - read_label.clone(), - ctx.clone(), - src.clone(), - clk.clone(), - plain[0].clone(), - plain[1].clone(), - plain[2].clone(), - plain[3].clone(), - ]); - - let read_msg2 = challenges.encode([ - read_label, - ctx.clone(), - src + four.clone(), - clk.clone(), - plain[4].clone(), - plain[5].clone(), - plain[6].clone(), - plain[7].clone(), - ]); - - let write_msg1 = challenges.encode([ - write_label.clone(), - ctx.clone(), - dst.clone(), - clk.clone(), - cipher[0].clone(), - cipher[1].clone(), - cipher[2].clone(), - cipher[3].clone(), - ]); - - let write_msg2 = challenges.encode([ - write_label, - ctx, - dst + four, - clk, - cipher[4].clone(), - cipher[5].clone(), - cipher[6].clone(), - cipher[7].clone(), - ]); + let read_msg1 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + read_label.clone(), + ctx.clone(), + src.clone(), + clk.clone(), + plain[0].clone(), + plain[1].clone(), + plain[2].clone(), + plain[3].clone(), + ], + ); + + let read_msg2 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + read_label, + ctx.clone(), + src + four.clone(), + clk.clone(), + plain[4].clone(), + plain[5].clone(), + plain[6].clone(), + plain[7].clone(), + ], + ); + + let write_msg1 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + write_label.clone(), + ctx.clone(), + dst.clone(), + clk.clone(), + cipher[0].clone(), + cipher[1].clone(), + cipher[2].clone(), + cipher[3].clone(), + ], + ); + + let write_msg2 = challenges.encode( + bus_types::CHIPLETS_BUS, + [ + write_label, + ctx, + dst + four, + clk, + cipher[4].clone(), + cipher[5].clone(), + cipher[6].clone(), + cipher[7].clone(), + ], + ); read_msg1 * read_msg2 * write_msg1 * write_msg2 } /// Computes the HORNERBASE request value (two element reads). -fn compute_hornerbase_request>( - local: &MainTraceRow, +fn compute_hornerbase_request( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { let label: AB::Expr = AB::Expr::from_u16(MEMORY_READ_ELEMENT_LABEL as u16); - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - let addr: AB::Expr = local.stack[13].clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); + let addr: AB::Expr = local.stack.get(13).into(); let one: AB::Expr = AB::Expr::ONE; // Helper registers hold eval_point_0 and eval_point_1 - let helper0_idx = USER_OP_HELPERS_OFFSET; - let helper1_idx = helper0_idx + 1; - let eval0: AB::Expr = local.decoder[helper0_idx].clone().into(); - let eval1: AB::Expr = local.decoder[helper1_idx].clone().into(); + let eval0: AB::Expr = local.decoder.hasher_state[2].into(); + let eval1: AB::Expr = local.decoder.hasher_state[3].into(); - let msg0 = challenges.encode([label.clone(), ctx.clone(), addr.clone(), clk.clone(), eval0]); + let msg0 = challenges.encode( + bus_types::CHIPLETS_BUS, + [label.clone(), ctx.clone(), addr.clone(), clk.clone(), eval0], + ); - let msg1 = challenges.encode([label, ctx, addr + one, clk, eval1]); + let msg1 = challenges.encode(bus_types::CHIPLETS_BUS, [label, ctx, addr + one, clk, eval1]); msg0 * msg1 } /// Computes the HORNEREXT request value (one word read). -fn compute_hornerext_request>( - local: &MainTraceRow, +fn compute_hornerext_request( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { let label: AB::Expr = AB::Expr::from_u16(MEMORY_READ_WORD_LABEL as u16); - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - let addr: AB::Expr = local.stack[13].clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); + let addr: AB::Expr = local.stack.get(13).into(); // Helpers 0..3 hold eval_point_0, eval_point_1, mem_junk_0, mem_junk_1 - let base = USER_OP_HELPERS_OFFSET; let word = [ - local.decoder[base].clone().into(), - local.decoder[base + 1].clone().into(), - local.decoder[base + 2].clone().into(), - local.decoder[base + 3].clone().into(), + local.decoder.hasher_state[2].into(), + local.decoder.hasher_state[3].into(), + local.decoder.hasher_state[4].into(), + local.decoder.hasher_state[5].into(), ]; - challenges.encode([ - label, - ctx, - addr, - clk, - word[0].clone(), - word[1].clone(), - word[2].clone(), - word[3].clone(), - ]) + challenges.encode( + bus_types::CHIPLETS_BUS, + [ + label, + ctx, + addr, + clk, + word[0].clone(), + word[1].clone(), + word[2].clone(), + word[3].clone(), + ], + ) } /// Computes the memory chiplet response message value. @@ -699,8 +709,8 @@ fn compute_hornerext_request>( /// The memory chiplet uses different labels for read/write and element/word operations. /// Address is computed as: word + 2*idx1 + idx0 /// For element access, the correct element is selected based on idx0, idx1. -fn compute_memory_response>( - local: &MainTraceRow, +fn compute_memory_response( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { use crate::trace::chiplets::{NUM_MEMORY_SELECTORS, memory}; @@ -708,14 +718,13 @@ fn compute_memory_response>( // Memory chiplet columns (offset by NUM_MEMORY_SELECTORS=3 for s0, s1, s2 selectors) // local.chiplets is relative to CHIPLETS_OFFSET, memory columns start at index 3 let mem_offset = NUM_MEMORY_SELECTORS; - let is_read: AB::Expr = local.chiplets[mem_offset + memory::IS_READ_COL_IDX].clone().into(); - let is_word: AB::Expr = - local.chiplets[mem_offset + memory::IS_WORD_ACCESS_COL_IDX].clone().into(); - let ctx: AB::Expr = local.chiplets[mem_offset + memory::CTX_COL_IDX].clone().into(); - let word: AB::Expr = local.chiplets[mem_offset + memory::WORD_COL_IDX].clone().into(); - let idx0: AB::Expr = local.chiplets[mem_offset + memory::IDX0_COL_IDX].clone().into(); - let idx1: AB::Expr = local.chiplets[mem_offset + memory::IDX1_COL_IDX].clone().into(); - let clk: AB::Expr = local.chiplets[mem_offset + memory::CLK_COL_IDX].clone().into(); + let is_read: AB::Expr = local.chiplets[mem_offset + memory::IS_READ_COL_IDX].into(); + let is_word: AB::Expr = local.chiplets[mem_offset + memory::IS_WORD_ACCESS_COL_IDX].into(); + let ctx: AB::Expr = local.chiplets[mem_offset + memory::CTX_COL_IDX].into(); + let word: AB::Expr = local.chiplets[mem_offset + memory::WORD_COL_IDX].into(); + let idx0: AB::Expr = local.chiplets[mem_offset + memory::IDX0_COL_IDX].into(); + let idx1: AB::Expr = local.chiplets[mem_offset + memory::IDX1_COL_IDX].into(); + let clk: AB::Expr = local.chiplets[mem_offset + memory::CLK_COL_IDX].into(); // Compute address: addr = word + 2*idx1 + idx0 let addr: AB::Expr = word + idx1.clone() * AB::Expr::from_u16(2) + idx0.clone(); @@ -733,10 +742,10 @@ fn compute_memory_response>( let label = (one.clone() - is_read.clone()) * write_label + is_read.clone() * read_label; // Get value columns (v0, v1, v2, v3) - let v0: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start].clone().into(); - let v1: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start + 1].clone().into(); - let v2: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start + 2].clone().into(); - let v3: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start + 3].clone().into(); + let v0: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start].into(); + let v1: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start + 1].into(); + let v2: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start + 2].into(); + let v3: AB::Expr = local.chiplets[mem_offset + memory::V_COL_RANGE.start + 3].into(); // For element access, select the correct element based on idx0, idx1: // - (0,0) -> v0, (1,0) -> v1, (0,1) -> v2, (1,1) -> v3 @@ -751,11 +760,14 @@ fn compute_memory_response>( let is_element = one.clone() - is_word.clone(); // Element access: include the selected element in the last slot. - let element_msg = - challenges.encode([label.clone(), ctx.clone(), addr.clone(), clk.clone(), element]); + let element_msg = challenges.encode( + bus_types::CHIPLETS_BUS, + [label.clone(), ctx.clone(), addr.clone(), clk.clone(), element], + ); // Word access: include all 4 values. - let word_msg = challenges.encode([label, ctx, addr, clk, v0, v1, v2, v3]); + let word_msg = + challenges.encode(bus_types::CHIPLETS_BUS, [label, ctx, addr, clk, v0, v1, v2, v3]); // Select based on is_word element_msg * is_element + word_msg * is_word @@ -772,89 +784,77 @@ struct HasherResponse { /// Computes the hasher chiplet response. /// -/// Only hasher controller rows (dispatch, perm_seg=0) produce bus responses. -/// Hasher permutation segment rows (compute, perm_seg=1) do not contribute. +/// Only hasher controller rows (dispatch, `s_ctrl = 1`) produce bus responses. +/// Hasher permutation segment rows (compute, `s_perm = 1`) do not contribute. /// -/// **Controller input rows** (s0=1, perm_seg=0): -/// - Sponge start (is_boundary=1, s1=0, s2=0): full 12-element state -/// - Sponge continuation (is_boundary=0, s1=0, s2=0): rate-only 8 elements (RESPAN) -/// - Tree start (is_boundary=1, s1=1 or s2=1): leaf word +/// **Controller input rows** (`s0 = 1`): +/// - Sponge start (`is_boundary=1`, `s1=0`, `s2=0`): full 12-element state +/// - Sponge continuation (`is_boundary=0`, `s1=0`, `s2=0`): rate-only 8 elements (RESPAN) +/// - Tree start (`is_boundary=1`, `s1=1` or `s2=1`): leaf word /// -/// **Controller output rows** (s0=0, s1=0, perm_seg=0): -/// - HOUT (s2=0): digest -/// - SOUT (s2=1) + is_boundary=1: full 12-element state +/// **Controller output rows** (`s0 = 0`, `s1 = 0`): +/// - HOUT (`s2=0`): digest +/// - SOUT (`s2=1`) + `is_boundary=1`: full 12-element state /// -/// No response on: hasher permutation segment rows, padding rows ([0,1,0]), -/// tree continuations (is_boundary=0), or intermediate SOUT (is_boundary=0). -fn compute_hasher_response>( - local: &MainTraceRow, - next: &MainTraceRow, +/// No response on: hasher permutation segment rows, padding rows (`s0=0, s1=1`), +/// tree continuations (`is_boundary=0`), or intermediate SOUT (`is_boundary=0`). +fn compute_hasher_response( + local: &MainCols, + next: &MainCols, challenges: &Challenges, + controller_flag: AB::Expr, ) -> HasherResponse { use crate::trace::{ CHIPLETS_OFFSET, - chiplets::{ - HASHER_IS_BOUNDARY_COL_IDX, HASHER_NODE_INDEX_COL_IDX, HASHER_PERM_SEG_COL_IDX, - HASHER_STATE_COL_RANGE, - }, + chiplets::{HASHER_IS_BOUNDARY_COL_IDX, HASHER_NODE_INDEX_COL_IDX, HASHER_STATE_COL_RANGE}, }; let one = AB::Expr::ONE; - // Controller flag: hasher active AND not in perm segment - let hasher_active: AB::Expr = one.clone() - local.chiplets[0].clone().into(); - let perm_seg: AB::Expr = - local.chiplets[HASHER_PERM_SEG_COL_IDX - CHIPLETS_OFFSET].clone().into(); - let controller_flag = hasher_active * (one.clone() - perm_seg); - // Hasher internal selectors - let hs0: AB::Expr = local.chiplets[1].clone().into(); - let hs1: AB::Expr = local.chiplets[2].clone().into(); - let hs2: AB::Expr = local.chiplets[3].clone().into(); + let s0: AB::Expr = local.chiplets[1].into(); + let s1: AB::Expr = local.chiplets[2].into(); + let s2: AB::Expr = local.chiplets[3].into(); // Lifecycle columns - let is_boundary: AB::Expr = - local.chiplets[HASHER_IS_BOUNDARY_COL_IDX - CHIPLETS_OFFSET].clone().into(); + let is_boundary: AB::Expr = local.chiplets[HASHER_IS_BOUNDARY_COL_IDX - CHIPLETS_OFFSET].into(); // State and node_index let state: [AB::Expr; 12] = core::array::from_fn(|i| { let col_idx = HASHER_STATE_COL_RANGE.start - CHIPLETS_OFFSET + i; - local.chiplets[col_idx].clone().into() + local.chiplets[col_idx].into() }); - let node_index: AB::Expr = - local.chiplets[HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET].clone().into(); + let node_index: AB::Expr = local.chiplets[HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET].into(); // Address - let addr_next: AB::Expr = local.clk.clone().into() + one.clone(); + let addr_next: AB::Expr = local.system.clk.into() + one.clone(); // --- Response flags (inner, without controller_flag to keep degree low) --- // - // controller_flag (degree 2) is factored out and applied to the entire response sum, - // keeping the max flag*message degree at 6 instead of 8. + // controller_flag (degree 1, = s_ctrl) is factored out and applied to the entire response + // sum, keeping the max inner flag*message degree at 6 and the final degree at 7. // Sponge start: input, s1=0, s2=0, is_boundary=1 - let f_sponge_start = hs0.clone() - * (one.clone() - hs1.clone()) - * (one.clone() - hs2.clone()) - * is_boundary.clone(); + let f_sponge_start = + s0.clone() * (one.clone() - s1.clone()) * (one.clone() - s2.clone()) * is_boundary.clone(); // Sponge continuation (RESPAN): input, s1=0, s2=0, is_boundary=0 - let f_sponge_respan = hs0.clone() - * (one.clone() - hs1.clone()) - * (one.clone() - hs2.clone()) + let f_sponge_respan = s0.clone() + * (one.clone() - s1.clone()) + * (one.clone() - s2.clone()) * (one.clone() - is_boundary.clone()); // Merkle tree op start inputs (only is_boundary=1 produces response) - let f_mp_start = hs0.clone() * (one.clone() - hs1.clone()) * hs2.clone() * is_boundary.clone(); - let f_mv_start = hs0.clone() * hs1.clone() * (one.clone() - hs2.clone()) * is_boundary.clone(); - let f_mu_start = hs0.clone() * hs1.clone() * hs2.clone() * is_boundary.clone(); + let f_mp_start = s0.clone() * (one.clone() - s1.clone()) * s2.clone() * is_boundary.clone(); + let f_mv_start = s0.clone() * s1.clone() * (one.clone() - s2.clone()) * is_boundary.clone(); + let f_mu_start = s0.clone() * s1.clone() * s2.clone() * is_boundary.clone(); // HOUT output (always responds) let f_hout = - (one.clone() - hs0.clone()) * (one.clone() - hs1.clone()) * (one.clone() - hs2.clone()); + (one.clone() - s0.clone()) * (one.clone() - s1.clone()) * (one.clone() - s2.clone()); // SOUT output with is_boundary=1 only (HPERM return) let f_sout_final = - (one.clone() - hs0.clone()) * (one.clone() - hs1.clone()) * hs2.clone() * is_boundary; + (one.clone() - s0.clone()) * (one.clone() - s1.clone()) * s2.clone() * is_boundary; // --- Message values --- @@ -888,7 +888,7 @@ fn compute_hasher_response>( // Merkle tree inputs: leaf word selected by direction bit let two = AB::Expr::from_u16(2); let node_index_next: AB::Expr = - next.chiplets[HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET].clone().into(); + next.chiplets[HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET].into(); let bit = node_index.clone() - two * node_index_next; let leaf_word: [AB::Expr; 4] = [ (one.clone() - bit.clone()) * state[0].clone() + bit.clone() * state[4].clone(), @@ -936,7 +936,7 @@ fn compute_hasher_response>( // // The inner flag_sum and sum are computed without controller_flag. The controller_flag // is applied as a multiplicative factor to the entire sum, keeping the degree within - // budget: inner_flag(4) * message(2) = 6, * controller_flag(2) = 8. + // budget: inner_flag(4) * message(2) = 6, * controller_flag(1) = 7. let inner_flag_sum = f_sponge_start.clone() + f_sponge_respan.clone() @@ -974,21 +974,19 @@ fn compute_hasher_response>( /// The combined request is the product of these two message values. /// /// Stack layout: [s0, s1, ..., s11, ...] -> [s0', s1', ..., s11', ...] -fn compute_hperm_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_hperm_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { - use crate::trace::decoder::USER_OP_HELPERS_OFFSET; - // Hasher address from helper register 0 - let addr: AB::Expr = local.decoder[USER_OP_HELPERS_OFFSET].clone().into(); + let addr: AB::Expr = local.decoder.hasher_state[2].into(); // Input state from current stack[0..12] - let input_state: [AB::Expr; 12] = core::array::from_fn(|i| local.stack[i].clone().into()); + let input_state: [AB::Expr; 12] = core::array::from_fn(|i| local.stack.get(i).into()); // Output state from next stack[0..12] - let output_state: [AB::Expr; 12] = core::array::from_fn(|i| next.stack[i].clone().into()); + let output_state: [AB::Expr; 12] = core::array::from_fn(|i| next.stack.get(i).into()); // Input message: transition_label = LINEAR_HASH_LABEL + 16 = 3 + 16 = 19 let input_label: AB::Expr = AB::Expr::from_u16(LINEAR_HASH_LABEL as u16 + INPUT_LABEL_OFFSET); @@ -1025,25 +1023,24 @@ fn compute_hperm_request>( /// /// LOG_PRECOMPILE absorbs `[COMM, TAG]` with capacity `CAP_PREV` and returns `[R0, R1, CAP_NEXT]`. /// The request is the product of input (LINEAR_HASH + 16) and output (RETURN_STATE + 32) messages. -fn compute_log_precompile_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_log_precompile_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { - // Helper registers - let helper_base = USER_OP_HELPERS_OFFSET; - let addr: AB::Expr = local.decoder[helper_base + HELPER_ADDR_IDX].clone().into(); + // Helper registers (user op helpers start at hasher_state[2]) + let addr: AB::Expr = local.decoder.hasher_state[2 + HELPER_ADDR_IDX].into(); // CAP_PREV from helper registers (4 lanes) let cap_prev: [AB::Expr; 4] = core::array::from_fn(|i| { - local.decoder[helper_base + HELPER_CAP_PREV_RANGE.start + i].clone().into() + local.decoder.hasher_state[2 + HELPER_CAP_PREV_RANGE.start + i].into() }); // COMM and TAG from the current stack let comm: [AB::Expr; 4] = - core::array::from_fn(|i| local.stack[STACK_COMM_RANGE.start + i].clone().into()); + core::array::from_fn(|i| local.stack.get(STACK_COMM_RANGE.start + i).into()); let tag: [AB::Expr; 4] = - core::array::from_fn(|i| local.stack[STACK_TAG_RANGE.start + i].clone().into()); + core::array::from_fn(|i| local.stack.get(STACK_TAG_RANGE.start + i).into()); // Input state [COMM, TAG, CAP_PREV] let state_input: [AB::Expr; 12] = [ @@ -1063,11 +1060,11 @@ fn compute_log_precompile_request>( // Output state from next stack [R0, R1, CAP_NEXT] let r0: [AB::Expr; 4] = - core::array::from_fn(|i| next.stack[STACK_R0_RANGE.start + i].clone().into()); + core::array::from_fn(|i| next.stack.get(STACK_R0_RANGE.start + i).into()); let r1: [AB::Expr; 4] = - core::array::from_fn(|i| next.stack[STACK_R1_RANGE.start + i].clone().into()); + core::array::from_fn(|i| next.stack.get(STACK_R1_RANGE.start + i).into()); let cap_next: [AB::Expr; 4] = - core::array::from_fn(|i| next.stack[STACK_CAP_NEXT_RANGE.start + i].clone().into()); + core::array::from_fn(|i| next.stack.get(STACK_CAP_NEXT_RANGE.start + i).into()); let state_output: [AB::Expr; 12] = [ r0[0].clone(), r0[1].clone(), @@ -1114,72 +1111,81 @@ fn compute_log_precompile_request>( /// Format: header + state where: /// - header = alpha + beta^0 * transition_label + beta^1 * addr + beta^2 * node_index /// - state = sum(beta^(3+i) * hasher_state[i]) for i in 0..12 -fn compute_hasher_message>( +fn compute_hasher_message( challenges: &Challenges, transition_label: AB::Expr, addr: AB::Expr, node_index: AB::Expr, state: &[AB::Expr; 12], ) -> AB::ExprEF { - challenges.encode([ - transition_label, - addr, - node_index, - state[0].clone(), - state[1].clone(), - state[2].clone(), - state[3].clone(), - state[4].clone(), - state[5].clone(), - state[6].clone(), - state[7].clone(), - state[8].clone(), - state[9].clone(), - state[10].clone(), - state[11].clone(), - ]) + challenges.encode( + bus_types::CHIPLETS_BUS, + [ + transition_label, + addr, + node_index, + state[0].clone(), + state[1].clone(), + state[2].clone(), + state[3].clone(), + state[4].clone(), + state[5].clone(), + state[6].clone(), + state[7].clone(), + state[8].clone(), + state[9].clone(), + state[10].clone(), + state[11].clone(), + ], + ) } /// Computes a hasher message for a 4-lane word. -fn compute_hasher_word_message>( +fn compute_hasher_word_message( challenges: &Challenges, transition_label: AB::Expr, addr: AB::Expr, node_index: AB::Expr, word: &[AB::Expr; 4], ) -> AB::ExprEF { - challenges.encode([ - transition_label, - addr, - node_index, - word[0].clone(), - word[1].clone(), - word[2].clone(), - word[3].clone(), - ]) + challenges.encode( + bus_types::CHIPLETS_BUS, + [ + transition_label, + addr, + node_index, + word[0].clone(), + word[1].clone(), + word[2].clone(), + word[3].clone(), + ], + ) } /// Computes a hasher message for an 8-lane rate. -fn compute_hasher_rate_message>( +fn compute_hasher_rate_message( challenges: &Challenges, transition_label: AB::Expr, addr: AB::Expr, node_index: AB::Expr, rate: &[AB::Expr; 8], ) -> AB::ExprEF { - challenges.encode([ - transition_label, - addr, - node_index, - rate[0].clone(), - rate[1].clone(), - rate[2].clone(), - rate[3].clone(), - rate[4].clone(), - rate[5].clone(), - rate[6].clone(), - rate[7].clone(), - ]) + challenges.encode( + bus_types::CHIPLETS_BUS, + [ + transition_label, + addr, + node_index, + rate[0].clone(), + rate[1].clone(), + rate[2].clone(), + rate[3].clone(), + rate[4].clone(), + rate[5].clone(), + rate[6].clone(), + rate[7].clone(), + ], + ) } // ACE MESSAGE HELPERS @@ -1187,32 +1193,32 @@ fn compute_hasher_rate_message>( /// Computes the ACE request message value. /// -/// Format: alpha + beta^0*label + beta^1*clk + beta^2*ctx + beta^3*ptr +/// Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*clk + beta^2*ctx + beta^3*ptr /// + beta^4*num_read_rows + beta^5*num_eval_rows /// /// Stack layout for EVALCIRCUIT: [ptr, num_read_rows, num_eval_rows, ...] -fn compute_ace_request>( - local: &MainTraceRow, +fn compute_ace_request( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // Label is ACE_INIT_LABEL let label: AB::Expr = AB::Expr::from(ACE_INIT_LABEL); // Context and clock from system columns - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); // Stack values - let ptr: AB::Expr = local.stack[0].clone().into(); - let num_read_rows: AB::Expr = local.stack[1].clone().into(); - let num_eval_rows: AB::Expr = local.stack[2].clone().into(); + let ptr: AB::Expr = local.stack.get(0).into(); + let num_read_rows: AB::Expr = local.stack.get(1).into(); + let num_eval_rows: AB::Expr = local.stack.get(2).into(); - challenges.encode([label, clk, ctx, ptr, num_read_rows, num_eval_rows]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, clk, ctx, ptr, num_read_rows, num_eval_rows]) } /// Computes the ACE chiplet response message value. /// -/// Format: alpha + beta^0*label + beta^1*clk + beta^2*ctx + beta^3*ptr +/// Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*clk + beta^2*ctx + beta^3*ptr /// + beta^4*num_read_rows + beta^5*num_eval_rows /// /// The chiplet reads from its internal columns: @@ -1221,30 +1227,29 @@ fn compute_ace_request>( /// - ptr from PTR_IDX /// - num_eval_rows computed from READ_NUM_EVAL_IDX + 1 /// - num_read_rows = id_0 + 1 - num_eval_rows -fn compute_ace_response>( - local: &MainTraceRow, +fn compute_ace_response( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // Label is ACE_INIT_LABEL let label: AB::Expr = AB::Expr::from(ACE_INIT_LABEL); // Read values from ACE chiplet columns (offset by NUM_ACE_SELECTORS) - let clk: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CLK_IDX].clone().into(); - let ctx: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CTX_IDX].clone().into(); - let ptr: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + PTR_IDX].clone().into(); + let clk: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CLK_IDX].into(); + let ctx: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CTX_IDX].into(); + let ptr: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + PTR_IDX].into(); // num_eval_rows = READ_NUM_EVAL_IDX value + 1 - let read_num_eval: AB::Expr = - local.chiplets[NUM_ACE_SELECTORS + READ_NUM_EVAL_IDX].clone().into(); + let read_num_eval: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + READ_NUM_EVAL_IDX].into(); let num_eval_rows: AB::Expr = read_num_eval + AB::Expr::ONE; // id_0 from ID_0_IDX - let id_0: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + ID_0_IDX].clone().into(); + let id_0: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + ID_0_IDX].into(); // num_read_rows = id_0 + 1 - num_eval_rows let num_read_rows: AB::Expr = id_0 + AB::Expr::ONE - num_eval_rows.clone(); - challenges.encode([label, clk, ctx, ptr, num_read_rows, num_eval_rows]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, clk, ctx, ptr, num_read_rows, num_eval_rows]) } // KERNEL ROM MESSAGE HELPERS @@ -1252,18 +1257,18 @@ fn compute_ace_response>( /// Computes the kernel ROM chiplet response message value. /// -/// Format: alpha + beta^0*label + beta^1*digest[0] + beta^2*digest[1] +/// Format: bus_prefix[CHIPLETS_BUS] + beta^0*label + beta^1*digest[0] + beta^2*digest[1] /// + beta^3*digest[2] + beta^4*digest[3] /// /// The label depends on s_first flag: /// - s_first=1: KERNEL_PROC_INIT_LABEL (responding to verifier/public input init request) /// - s_first=0: KERNEL_PROC_CALL_LABEL (responding to decoder SYSCALL request) -fn compute_kernel_rom_response>( - local: &MainTraceRow, +fn compute_kernel_rom_response( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // s_first flag is at CHIPLETS_OFFSET + 5 (after 5 selectors), which is chiplets[5] - let s_first: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS].clone().into(); + let s_first: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS].into(); // Label depends on s_first: // label = s_first * INIT_LABEL + (1 - s_first) * CALL_LABEL @@ -1273,12 +1278,12 @@ fn compute_kernel_rom_response>( // Kernel procedure digest (root0..root3) at columns 6, 7, 8, 9 relative to chiplets // These are at NUM_KERNEL_ROM_SELECTORS + 1..5 (after s_first which is at +0) - let root0: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 1].clone().into(); - let root1: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 2].clone().into(); - let root2: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 3].clone().into(); - let root3: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 4].clone().into(); + let root0: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 1].into(); + let root1: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 2].into(); + let root2: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 3].into(); + let root3: AB::Expr = local.chiplets[NUM_KERNEL_ROM_SELECTORS + 4].into(); - challenges.encode([label, root0, root1, root2, root3]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, root0, root1, root2, root3]) } // CONTROL BLOCK REQUEST HELPERS @@ -1317,9 +1322,9 @@ impl ControlBlockOp { /// - transition_label = LINEAR_HASH_LABEL + 16 /// - addr_next = decoder address at next row (from next row's addr column) /// - hasher_state = rate lanes from decoder hasher columns + opcode in capacity domain position -fn compute_control_block_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_control_block_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, op: ControlBlockOp, ) -> AB::ExprEF { @@ -1328,11 +1333,11 @@ fn compute_control_block_request>( AB::Expr::from_u16(LINEAR_HASH_LABEL as u16 + INPUT_LABEL_OFFSET); // addr_next = next row's decoder address - let addr_next: AB::Expr = next.decoder[ADDR_COL_IDX].clone().into(); + let addr_next: AB::Expr = next.decoder.addr.into(); // Get decoder hasher state (8 elements) let hasher_state: [AB::Expr; 8] = - core::array::from_fn(|i| local.decoder[HASHER_STATE_RANGE.start + i].clone().into()); + core::array::from_fn(|i| local.decoder.hasher_state[i].into()); // op_code as domain in capacity position let op_code: AB::Expr = AB::Expr::from_u16(op.opcode() as u16); @@ -1363,9 +1368,9 @@ fn compute_control_block_request>( /// CALL sends: /// 1. Control block request (with decoder hasher state) /// 2. FMP initialization write request (to set up new execution context) -fn compute_call_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_call_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // Control block request @@ -1383,9 +1388,9 @@ fn compute_call_request>( /// DYN sends: /// 1. Control block request (with zeros for hasher state since callee is dynamic) /// 2. Memory read request for callee hash from stack[0] -fn compute_dyn_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_dyn_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // Control block request with zeros for hasher state (callee is dynamic) @@ -1404,9 +1409,9 @@ fn compute_dyn_request>( /// 1. Control block request (with zeros for hasher state since callee is dynamic) /// 2. Memory read request for callee hash from stack[0] /// 3. FMP initialization write request -fn compute_dyncall_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_dyncall_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // Control block request with zeros for hasher state (callee is dynamic) @@ -1427,9 +1432,9 @@ fn compute_dyncall_request>( /// SYSCALL sends: /// 1. Control block request (with decoder hasher state) /// 2. Kernel ROM lookup request (to verify kernel procedure) -fn compute_syscall_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_syscall_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // Control block request @@ -1437,13 +1442,14 @@ fn compute_syscall_request>( compute_control_block_request::(local, next, challenges, ControlBlockOp::Syscall); // Kernel ROM lookup request (digest from first 4 elements of decoder hasher state) - let root0: AB::Expr = local.decoder[HASHER_STATE_RANGE.start].clone().into(); - let root1: AB::Expr = local.decoder[HASHER_STATE_RANGE.start + 1].clone().into(); - let root2: AB::Expr = local.decoder[HASHER_STATE_RANGE.start + 2].clone().into(); - let root3: AB::Expr = local.decoder[HASHER_STATE_RANGE.start + 3].clone().into(); + let root0: AB::Expr = local.decoder.hasher_state[0].into(); + let root1: AB::Expr = local.decoder.hasher_state[1].into(); + let root2: AB::Expr = local.decoder.hasher_state[2].into(); + let root3: AB::Expr = local.decoder.hasher_state[3].into(); let label: AB::Expr = AB::Expr::from(KERNEL_PROC_CALL_LABEL); - let kernel_req = challenges.encode([label, root0, root1, root2, root3]); + let kernel_req = + challenges.encode(bus_types::CHIPLETS_BUS, [label, root0, root1, root2, root3]); control_req * kernel_req } @@ -1451,9 +1457,9 @@ fn compute_syscall_request>( /// Computes the SPAN block request message value. /// /// Format: header + full 12-lane sponge state (8 rate lanes + 4 capacity lanes zeroed) -fn compute_span_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_span_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // transition_label = LINEAR_HASH_LABEL + 16 @@ -1461,11 +1467,11 @@ fn compute_span_request>( AB::Expr::from_u16(LINEAR_HASH_LABEL as u16 + INPUT_LABEL_OFFSET); // addr_next = next row's decoder address - let addr_next: AB::Expr = next.decoder[ADDR_COL_IDX].clone().into(); + let addr_next: AB::Expr = next.decoder.addr.into(); // Get decoder hasher state (8 elements) let hasher_state: [AB::Expr; 8] = - core::array::from_fn(|i| local.decoder[HASHER_STATE_RANGE.start + i].clone().into()); + core::array::from_fn(|i| local.decoder.hasher_state[i].into()); // Build full 12-lane state with capacity zeroed let state: [AB::Expr; 12] = [ @@ -1489,9 +1495,9 @@ fn compute_span_request>( /// Computes the RESPAN block request message value. /// /// Rate occupies message positions 3..10 (after label/addr/node_index). -fn compute_respan_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_respan_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // transition_label = LINEAR_HASH_LABEL + 32 @@ -1501,12 +1507,12 @@ fn compute_respan_request>( // RESPAN message uses addr_next directly (the next row's decoder address). // In the controller/perm split, addr_next points directly to the continuation // input row -- no offset needed. - let addr_next: AB::Expr = next.decoder[ADDR_COL_IDX].clone().into(); + let addr_next: AB::Expr = next.decoder.addr.into(); let addr_for_msg = addr_next; // Get decoder hasher state (8 elements) let hasher_state: [AB::Expr; 8] = - core::array::from_fn(|i| local.decoder[HASHER_STATE_RANGE.start + i].clone().into()); + core::array::from_fn(|i| local.decoder.hasher_state[i].into()); compute_hasher_rate_message::( challenges, @@ -1520,8 +1526,8 @@ fn compute_respan_request>( /// Computes the END block request message value. /// /// Digest occupies message positions 3..6 (after label/addr/node_index). -fn compute_end_request>( - local: &MainTraceRow, +fn compute_end_request( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { // transition_label = RETURN_HASH_LABEL + 32 = 1 + 32 @@ -1529,20 +1535,19 @@ fn compute_end_request>( AB::Expr::from_u16(RETURN_HASH_LABEL as u16 + OUTPUT_LABEL_OFFSET); // addr = decoder.addr + (CONTROLLER_ROWS_PER_PERMUTATION - 1) = addr + 1 - let addr: AB::Expr = local.decoder[ADDR_COL_IDX].clone().into() + let addr: AB::Expr = local.decoder.addr.into() + AB::Expr::from_u16((CONTROLLER_ROWS_PER_PERMUTATION - 1) as u16); // Get digest from decoder hasher state (first 4 elements) - let digest: [AB::Expr; 4] = - core::array::from_fn(|i| local.decoder[HASHER_STATE_RANGE.start + i].clone().into()); + let digest: [AB::Expr; 4] = core::array::from_fn(|i| local.decoder.hasher_state[i].into()); compute_hasher_word_message::(challenges, transition_label, addr, AB::Expr::ZERO, &digest) } /// Computes control block request with zeros for hasher state (for DYN/DYNCALL). -fn compute_control_block_request_zeros>( - _local: &MainTraceRow, - next: &MainTraceRow, +fn compute_control_block_request_zeros( + _local: &MainCols, + next: &MainCols, challenges: &Challenges, opcode: u8, ) -> AB::ExprEF { @@ -1551,7 +1556,7 @@ fn compute_control_block_request_zeros>( AB::Expr::from_u16(LINEAR_HASH_LABEL as u16 + INPUT_LABEL_OFFSET); // addr_next = next row's decoder address - let addr_next: AB::Expr = next.decoder[ADDR_COL_IDX].clone().into(); + let addr_next: AB::Expr = next.decoder.addr.into(); // op_code as domain let op_code: AB::Expr = AB::Expr::from_u16(opcode as u16); @@ -1578,42 +1583,42 @@ fn compute_control_block_request_zeros>( /// Computes the FMP initialization write request. /// /// This writes FMP_INIT_VALUE to FMP_ADDR in the new context. -fn compute_fmp_write_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_fmp_write_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { let label: AB::Expr = AB::Expr::from_u16(MEMORY_WRITE_ELEMENT_LABEL as u16); // ctx from next row (new execution context) - let ctx: AB::Expr = next.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); + let ctx: AB::Expr = next.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); let addr: AB::Expr = AB::Expr::from(FMP_ADDR); let element: AB::Expr = AB::Expr::from(FMP_INIT_VALUE); - challenges.encode([label, ctx, addr, clk, element]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, ctx, addr, clk, element]) } /// Computes the callee hash read request for DYN/DYNCALL. /// /// Reads a word from the address at stack[0] containing the callee hash. -fn compute_dyn_callee_hash_read>( - local: &MainTraceRow, +fn compute_dyn_callee_hash_read( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { let label: AB::Expr = AB::Expr::from_u16(MEMORY_READ_WORD_LABEL as u16); - let ctx: AB::Expr = local.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - let addr: AB::Expr = local.stack[0].clone().into(); + let ctx: AB::Expr = local.system.ctx.into(); + let clk: AB::Expr = local.system.clk.into(); + let addr: AB::Expr = local.stack.get(0).into(); // The callee hash is read into decoder hasher state first half - let w0: AB::Expr = local.decoder[HASHER_STATE_RANGE.start].clone().into(); - let w1: AB::Expr = local.decoder[HASHER_STATE_RANGE.start + 1].clone().into(); - let w2: AB::Expr = local.decoder[HASHER_STATE_RANGE.start + 2].clone().into(); - let w3: AB::Expr = local.decoder[HASHER_STATE_RANGE.start + 3].clone().into(); + let w0: AB::Expr = local.decoder.hasher_state[0].into(); + let w1: AB::Expr = local.decoder.hasher_state[1].into(); + let w2: AB::Expr = local.decoder.hasher_state[2].into(); + let w3: AB::Expr = local.decoder.hasher_state[3].into(); - challenges.encode([label, ctx, addr, clk, w0, w1, w2, w3]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, ctx, addr, clk, w0, w1, w2, w3]) } // MPVERIFY/MRUPDATE REQUEST HELPERS @@ -1624,20 +1629,18 @@ fn compute_dyn_callee_hash_read>( /// MPVERIFY sends two messages as a product: /// 1. Input: node value (stack[0..4]) with node_index /// 2. Output: root digest (stack[6..10]) at the computed output address -fn compute_mpverify_request>( - local: &MainTraceRow, +fn compute_mpverify_request( + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { - use crate::trace::decoder::USER_OP_HELPERS_OFFSET; - - let helper_0: AB::Expr = local.decoder[USER_OP_HELPERS_OFFSET].clone().into(); + let helper_0: AB::Expr = local.decoder.hasher_state[2].into(); let rows_per_perm: AB::Expr = AB::Expr::from_u16(CONTROLLER_ROWS_PER_PERMUTATION as u16); // Stack layout: [node_value0..3, node_depth, node_index, root0..3, ...] - let node_value: [AB::Expr; 4] = core::array::from_fn(|i| local.stack[i].clone().into()); - let node_depth: AB::Expr = local.stack[4].clone().into(); - let node_index: AB::Expr = local.stack[5].clone().into(); - let root: [AB::Expr; 4] = core::array::from_fn(|i| local.stack[6 + i].clone().into()); + let node_value: [AB::Expr; 4] = core::array::from_fn(|i| local.stack.get(i).into()); + let node_depth: AB::Expr = local.stack.get(4).into(); + let node_index: AB::Expr = local.stack.get(5).into(); + let root: [AB::Expr; 4] = core::array::from_fn(|i| local.stack.get(6 + i).into()); let input_label: AB::Expr = AB::Expr::from_u16(MP_VERIFY_LABEL as u16 + INPUT_LABEL_OFFSET); let input_msg = compute_hasher_word_message::( @@ -1669,25 +1672,23 @@ fn compute_mpverify_request>( /// 2. Output old: old root digest (stack[6..10]) at computed output address /// 3. Input new: new node value (stack[10..14]) with node_index /// 4. Output new: new root digest (next.stack[0..4]) at computed output address -fn compute_mrupdate_request>( - local: &MainTraceRow, - next: &MainTraceRow, +fn compute_mrupdate_request( + local: &MainCols, + next: &MainCols, challenges: &Challenges, ) -> AB::ExprEF { - use crate::trace::decoder::USER_OP_HELPERS_OFFSET; - - let helper_0: AB::Expr = local.decoder[USER_OP_HELPERS_OFFSET].clone().into(); + let helper_0: AB::Expr = local.decoder.hasher_state[2].into(); let rows_per_perm: AB::Expr = AB::Expr::from_u16(CONTROLLER_ROWS_PER_PERMUTATION as u16); let two_legs_rows: AB::Expr = rows_per_perm.clone() + rows_per_perm.clone(); // Stack layout: [old_node0..3, depth, index, old_root0..3, new_node0..3, ...] - let old_node: [AB::Expr; 4] = core::array::from_fn(|i| local.stack[i].clone().into()); - let depth: AB::Expr = local.stack[4].clone().into(); - let index: AB::Expr = local.stack[5].clone().into(); - let old_root: [AB::Expr; 4] = core::array::from_fn(|i| local.stack[6 + i].clone().into()); - let new_node: [AB::Expr; 4] = core::array::from_fn(|i| local.stack[10 + i].clone().into()); + let old_node: [AB::Expr; 4] = core::array::from_fn(|i| local.stack.get(i).into()); + let depth: AB::Expr = local.stack.get(4).into(); + let index: AB::Expr = local.stack.get(5).into(); + let old_root: [AB::Expr; 4] = core::array::from_fn(|i| local.stack.get(6 + i).into()); + let new_node: [AB::Expr; 4] = core::array::from_fn(|i| local.stack.get(10 + i).into()); // New root is at next.stack[0..4] - let new_root: [AB::Expr; 4] = core::array::from_fn(|i| next.stack[i].clone().into()); + let new_root: [AB::Expr; 4] = core::array::from_fn(|i| next.stack.get(i).into()); let input_old_label: AB::Expr = AB::Expr::from_u16(MR_UPDATE_OLD_LABEL as u16 + INPUT_LABEL_OFFSET); diff --git a/air/src/constraints/chiplets/bus/hash_kernel.rs b/air/src/constraints/chiplets/bus/hash_kernel.rs index f7bef11cc5..172979d5a2 100644 --- a/air/src/constraints/chiplets/bus/hash_kernel.rs +++ b/air/src/constraints/chiplets/bus/hash_kernel.rs @@ -9,34 +9,28 @@ //! //! Rows contribute either a request term, a response term, or the identity (when no flag is set). //! The request/response values use the standard message format: -//! `alpha + sum_i beta^i * element[i]`. +//! `bus_prefix[bus] + sum_i beta^i * element[i]`. use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{LiftedAirBuilder, WindowAccess}; +use miden_crypto::stark::air::{ExtensionBuilder, LiftedAirBuilder, WindowAccess}; use crate::{ - Felt, MainTraceRow, + Felt, MainCols, MidenAirBuilder, constraints::{ - bus::indices::B_HASH_KERNEL, - chiplets::hasher::flags, - op_flags::OpFlags, - tagging::{ - TagGroup, TaggingAirBuilderExt, ids::TAG_HASH_KERNEL_BUS_BASE, tagged_assert_zero_ext, - }, + bus::indices::B_HASH_KERNEL, chiplets::selectors::ChipletSelectors, op_flags::OpFlags, }, trace::{ - CHIPLETS_OFFSET, Challenges, LOG_PRECOMPILE_LABEL, + CHIPLETS_OFFSET, Challenges, LOG_PRECOMPILE_LABEL, bus_types, chiplets::{ - HASHER_MRUPDATE_ID_COL_IDX, HASHER_NODE_INDEX_COL_IDX, HASHER_PERM_SEG_COL_IDX, - HASHER_SELECTOR_COL_RANGE, HASHER_STATE_COL_RANGE, NUM_ACE_SELECTORS, + HASHER_MRUPDATE_ID_COL_IDX, HASHER_NODE_INDEX_COL_IDX, HASHER_STATE_COL_RANGE, + NUM_ACE_SELECTORS, ace::{ ACE_INSTRUCTION_ID1_OFFSET, ACE_INSTRUCTION_ID2_OFFSET, CLK_IDX, CTX_IDX, - EVAL_OP_IDX, ID_1_IDX, ID_2_IDX, PTR_IDX, SELECTOR_BLOCK_IDX, V_0_0_IDX, V_0_1_IDX, - V_1_0_IDX, V_1_1_IDX, + EVAL_OP_IDX, ID_1_IDX, ID_2_IDX, PTR_IDX, V_0_0_IDX, V_0_1_IDX, V_1_0_IDX, + V_1_1_IDX, }, memory::{MEMORY_READ_ELEMENT_LABEL, MEMORY_READ_WORD_LABEL}, }, - decoder::USER_OP_HELPERS_OFFSET, log_precompile::{HELPER_CAP_PREV_RANGE, STACK_CAP_NEXT_RANGE}, }, }; @@ -45,20 +39,9 @@ use crate::{ // ================================================================================================ // Column offsets relative to chiplets array. -const S_START: usize = HASHER_SELECTOR_COL_RANGE.start - CHIPLETS_OFFSET; const H_START: usize = HASHER_STATE_COL_RANGE.start - CHIPLETS_OFFSET; const IDX_COL: usize = HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET; const MRUPDATE_ID_COL: usize = HASHER_MRUPDATE_ID_COL_IDX - CHIPLETS_OFFSET; -const PERM_SEG_COL: usize = HASHER_PERM_SEG_COL_IDX - CHIPLETS_OFFSET; - -/// Tag ID and namespace for the hash-kernel (virtual table) bus transition constraint. -const HASH_KERNEL_BUS_ID: usize = TAG_HASH_KERNEL_BUS_BASE; -const HASH_KERNEL_BUS_NAMESPACE: &str = "chiplets.bus.hash_kernel.transition"; -const HASH_KERNEL_BUS_NAMES: [&str; 1] = [HASH_KERNEL_BUS_NAMESPACE; 1]; -const HASH_KERNEL_BUS_TAGS: TagGroup = TagGroup { - base: HASH_KERNEL_BUS_ID, - names: &HASH_KERNEL_BUS_NAMES, -}; // ENTRY POINTS // ================================================================================================ @@ -71,12 +54,13 @@ const HASH_KERNEL_BUS_TAGS: TagGroup = TagGroup { /// 3. Log precompile transcript tracking pub fn enforce_hash_kernel_constraint( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, + selectors: &ChipletSelectors, ) where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { // ========================================================================= // AUXILIARY TRACE ACCESS @@ -96,27 +80,21 @@ pub fn enforce_hash_kernel_constraint( // COMMON VALUES // ========================================================================= - // Hasher chiplet rows have s0 = 0 (chiplet selector). - let chiplet_selector: AB::Expr = local.chiplets[0].clone().into(); - let is_hasher: AB::Expr = one.clone() - chiplet_selector.clone(); - - // Hasher controller flag: active on hasher controller rows (perm_seg=0), not on - // hasher permutation segment rows (perm_seg=1). - let perm_seg: AB::Expr = local.chiplets[PERM_SEG_COL].clone().into(); - let controller_flag: AB::Expr = is_hasher.clone() * (one.clone() - perm_seg); + // Controller flag from the precomputed chiplet selectors. + let controller_flag: AB::Expr = selectors.controller.is_active.clone(); - // Hasher operation selectors (only meaningful on hasher controller rows) - let s0: AB::Expr = local.chiplets[S_START].clone().into(); - let s1: AB::Expr = local.chiplets[S_START + 1].clone().into(); - let s2: AB::Expr = local.chiplets[S_START + 2].clone().into(); + // Hasher operation selectors (only meaningful on hasher controller rows). + // On controller rows: `s0=1` = input row, `(s0,s1,s2)` encodes the operation. + // On permutation rows these columns hold S-box witnesses — gated out by controller_flag. + let ctrl = local.controller(); // Node index and mrupdate_id for sibling table - let node_index: AB::Expr = local.chiplets[IDX_COL].clone().into(); - let node_index_next: AB::Expr = next.chiplets[IDX_COL].clone().into(); - let mrupdate_id: AB::Expr = local.chiplets[MRUPDATE_ID_COL].clone().into(); + let node_index: AB::Expr = local.chiplets[IDX_COL].into(); + let node_index_next: AB::Expr = next.chiplets[IDX_COL].into(); + let mrupdate_id: AB::Expr = local.chiplets[MRUPDATE_ID_COL].into(); // Hasher state for sibling values - let h: [AB::Expr; 12] = core::array::from_fn(|i| local.chiplets[H_START + i].clone().into()); + let h: [AB::Expr; 12] = core::array::from_fn(|i| local.chiplets[H_START + i].into()); // ========================================================================= // SIBLING TABLE FLAGS AND VALUES @@ -125,8 +103,10 @@ pub fn enforce_hash_kernel_constraint( // In the controller/perm split, sibling table operations happen on controller input rows // for MU (new path - requests/removes) and MV (old path - responses/adds). // All MU/MV input rows participate (not just is_start=1). - let f_mu: AB::Expr = controller_flag.clone() * flags::f_mu(s0.clone(), s1.clone(), s2.clone()); - let f_mv: AB::Expr = controller_flag.clone() * flags::f_mv(s0.clone(), s1.clone(), s2.clone()); + // f_mu = s0 * s1 * s2 + let f_mu: AB::Expr = controller_flag.clone() * ctrl.f_mu(); + // f_mv = s0 * s1 * !s2 + let f_mv: AB::Expr = controller_flag.clone() * ctrl.f_mv(); // Direction bit b = input_node_index - 2 * output_node_index (next row is the paired output). let b: AB::Expr = node_index.clone() - node_index_next.clone().double(); @@ -142,58 +122,44 @@ pub fn enforce_hash_kernel_constraint( // ACE MEMORY FLAGS AND VALUES // ========================================================================= - // ACE chiplet selector: s0=1, s1=1, s2=1, s3=0 - let s3: AB::Expr = local.chiplets[3].clone().into(); - let chiplet_s1: AB::Expr = local.chiplets[1].clone().into(); - let chiplet_s2: AB::Expr = local.chiplets[2].clone().into(); + // ACE row flag from the precomputed chiplet selectors. + let is_ace_row: AB::Expr = selectors.ace.is_active.clone(); + let ace = local.ace(); - let is_ace_row: AB::Expr = - chiplet_selector.clone() * chiplet_s1.clone() * chiplet_s2.clone() * (one.clone() - s3); - - // Block selector determines read (0) vs eval (1) - let block_selector: AB::Expr = - local.chiplets[NUM_ACE_SELECTORS + SELECTOR_BLOCK_IDX].clone().into(); - - let f_ace_read: AB::Expr = is_ace_row.clone() * (one.clone() - block_selector.clone()); - let f_ace_eval: AB::Expr = is_ace_row * block_selector; + let f_ace_read: AB::Expr = is_ace_row.clone() * ace.f_read(); + let f_ace_eval: AB::Expr = is_ace_row * ace.f_eval(); // ACE columns for memory messages - let ace_clk: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CLK_IDX].clone().into(); - let ace_ctx: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CTX_IDX].clone().into(); - let ace_ptr: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + PTR_IDX].clone().into(); + let ace_clk: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CLK_IDX].into(); + let ace_ctx: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + CTX_IDX].into(); + let ace_ptr: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + PTR_IDX].into(); // Word read value: label + ctx + ptr + clk + 4-lane value. let v_ace_word = { - let v0_0: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_0_0_IDX].clone().into(); - let v0_1: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_0_1_IDX].clone().into(); - let v1_0: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_1_0_IDX].clone().into(); - let v1_1: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_1_1_IDX].clone().into(); + let v0_0: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_0_0_IDX].into(); + let v0_1: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_0_1_IDX].into(); + let v1_0: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_1_0_IDX].into(); + let v1_1: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + V_1_1_IDX].into(); let label: AB::Expr = AB::Expr::from(Felt::from_u8(MEMORY_READ_WORD_LABEL)); - challenges.encode([ - label, - ace_ctx.clone(), - ace_ptr.clone(), - ace_clk.clone(), - v0_0, - v0_1, - v1_0, - v1_1, - ]) + challenges.encode( + bus_types::CHIPLETS_BUS, + [label, ace_ctx.clone(), ace_ptr.clone(), ace_clk.clone(), v0_0, v0_1, v1_0, v1_1], + ) }; // Element read value: label + ctx + ptr + clk + element. let v_ace_element = { - let id_1: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + ID_1_IDX].clone().into(); - let id_2: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + ID_2_IDX].clone().into(); - let eval_op: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + EVAL_OP_IDX].clone().into(); + let id_1: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + ID_1_IDX].into(); + let id_2: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + ID_2_IDX].into(); + let eval_op: AB::Expr = local.chiplets[NUM_ACE_SELECTORS + EVAL_OP_IDX].into(); let offset1: AB::Expr = AB::Expr::from(ACE_INSTRUCTION_ID1_OFFSET); let offset2: AB::Expr = AB::Expr::from(ACE_INSTRUCTION_ID2_OFFSET); let element = id_1 + id_2 * offset1 + (eval_op + one.clone()) * offset2; let label: AB::Expr = AB::Expr::from(Felt::from_u8(MEMORY_READ_ELEMENT_LABEL)); - challenges.encode([label, ace_ctx, ace_ptr, ace_clk, element]) + challenges.encode(bus_types::CHIPLETS_BUS, [label, ace_ctx, ace_ptr, ace_clk, element]) }; // ========================================================================= @@ -204,34 +170,38 @@ pub fn enforce_hash_kernel_constraint( // CAP_PREV from helper registers (provided and constrained by the decoder logic). let cap_prev: [AB::Expr; 4] = core::array::from_fn(|i| { - local.decoder[USER_OP_HELPERS_OFFSET + HELPER_CAP_PREV_RANGE.start + i] - .clone() - .into() + local.decoder.hasher_state[2 + HELPER_CAP_PREV_RANGE.start + i].into() }); // CAP_NEXT from next-row stack. let cap_next: [AB::Expr; 4] = - core::array::from_fn(|i| next.stack[STACK_CAP_NEXT_RANGE.start + i].clone().into()); + core::array::from_fn(|i| next.stack.get(STACK_CAP_NEXT_RANGE.start + i).into()); let log_label: AB::Expr = AB::Expr::from(Felt::from_u8(LOG_PRECOMPILE_LABEL)); // CAP_PREV value (request - removed). - let v_cap_prev = challenges.encode([ - log_label.clone(), - cap_prev[0].clone(), - cap_prev[1].clone(), - cap_prev[2].clone(), - cap_prev[3].clone(), - ]); + let v_cap_prev = challenges.encode( + bus_types::LOG_PRECOMPILE_TRANSCRIPT, + [ + log_label.clone(), + cap_prev[0].clone(), + cap_prev[1].clone(), + cap_prev[2].clone(), + cap_prev[3].clone(), + ], + ); // CAP_NEXT value (response - inserted). - let v_cap_next = challenges.encode([ - log_label, - cap_next[0].clone(), - cap_next[1].clone(), - cap_next[2].clone(), - cap_next[3].clone(), - ]); + let v_cap_next = challenges.encode( + bus_types::LOG_PRECOMPILE_TRANSCRIPT, + [ + log_label, + cap_next[0].clone(), + cap_next[1].clone(), + cap_next[2].clone(), + cap_next[3].clone(), + ], + ); // ========================================================================= // RUNNING PRODUCT CONSTRAINT @@ -255,13 +225,9 @@ pub fn enforce_hash_kernel_constraint( let p_local_ef: AB::ExprEF = p_local.into(); let p_next_ef: AB::ExprEF = p_next.into(); - let mut idx = 0; - tagged_assert_zero_ext( - builder, - &HASH_KERNEL_BUS_TAGS, - &mut idx, - p_next_ef * requests - p_local_ef * responses, - ); + builder + .when_transition() + .assert_zero_ext(p_next_ef * requests - p_local_ef * responses); } // INTERNAL HELPERS @@ -277,7 +243,8 @@ const SIBLING_B1_LAYOUT: [usize; 6] = [1, 2, 3, 4, 5, 6]; /// Compute sibling value when b=0 (sibling at h[4..8], i.e., rate1). /// -/// Message: `alpha + beta[1]*mrupdate_id + beta[2]*node_index + beta[7..11]*h[4..8]` +/// Message: `bus_prefix[SIBLING_TABLE] + beta[1]*mrupdate_id + beta[2]*node_index + +/// beta[7..11]*h[4..8]` fn compute_sibling_b0( challenges: &Challenges, mrupdate_id: &AB::Expr, @@ -288,6 +255,7 @@ where AB: LiftedAirBuilder, { challenges.encode_sparse( + bus_types::SIBLING_TABLE, SIBLING_B0_LAYOUT, [ mrupdate_id.clone(), @@ -302,7 +270,8 @@ where /// Compute sibling value when b=1 (sibling at h[0..4], i.e., rate0). /// -/// Message: `alpha + beta[1]*mrupdate_id + beta[2]*node_index + beta[3..7]*h[0..4]` +/// Message: `bus_prefix[SIBLING_TABLE] + beta[1]*mrupdate_id + beta[2]*node_index + +/// beta[3..7]*h[0..4]` fn compute_sibling_b1( challenges: &Challenges, mrupdate_id: &AB::Expr, @@ -313,6 +282,7 @@ where AB: LiftedAirBuilder, { challenges.encode_sparse( + bus_types::SIBLING_TABLE, SIBLING_B1_LAYOUT, [ mrupdate_id.clone(), diff --git a/air/src/constraints/chiplets/bus/mod.rs b/air/src/constraints/chiplets/bus/mod.rs index e953d706d7..fd57e4d396 100644 --- a/air/src/constraints/chiplets/bus/mod.rs +++ b/air/src/constraints/chiplets/bus/mod.rs @@ -10,21 +10,25 @@ pub mod chiplets; pub mod hash_kernel; pub mod wiring; -use miden_crypto::stark::air::LiftedAirBuilder; - -use crate::{Felt, MainTraceRow, constraints::op_flags::OpFlags, trace::Challenges}; +use super::selectors::ChipletSelectors; +use crate::{MainCols, MidenAirBuilder, constraints::op_flags::OpFlags, trace::Challenges}; /// Enforces chiplets bus constraints. pub fn enforce_bus( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, + selectors: &ChipletSelectors, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - hash_kernel::enforce_hash_kernel_constraint(builder, local, next, op_flags, challenges); - chiplets::enforce_chiplets_bus_constraint(builder, local, next, op_flags, challenges); - wiring::enforce_wiring_bus_constraint(builder, local, next, challenges); + hash_kernel::enforce_hash_kernel_constraint( + builder, local, next, op_flags, challenges, selectors, + ); + chiplets::enforce_chiplets_bus_constraint( + builder, local, next, op_flags, challenges, selectors, + ); + wiring::enforce_wiring_bus_constraint(builder, local, next, challenges, selectors); } diff --git a/air/src/constraints/chiplets/bus/wiring.rs b/air/src/constraints/chiplets/bus/wiring.rs index b0233508dd..c3cb6408c0 100644 --- a/air/src/constraints/chiplets/bus/wiring.rs +++ b/air/src/constraints/chiplets/bus/wiring.rs @@ -21,30 +21,23 @@ //! The `idle_flag * delta` term is important as on bitwise, kernel-ROM, and padding rows, none of //! the stacked `v_wiring` contributors are active, but the accumulator must still propagate //! unchanged so its last-row boundary value remains bound to the earlier accumulation. -//! -//! TODO(Al): Revisit the above equations. The three assertions above could also be collapsed -//! into a single assertion later once we rebase and remove tags. + +use core::borrow::Borrow; use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{LiftedAirBuilder, WindowAccess}; +use miden_crypto::stark::air::{ExtensionBuilder, LiftedAirBuilder, WindowAccess}; use crate::{ - Felt, MainTraceRow, + Felt, MainCols, MidenAirBuilder, constraints::{ bus::indices::V_WIRING, - chiplets::{ - hasher::periodic::{P_IS_EXT, P_IS_INIT_EXT, P_IS_INT_EXT, P_IS_PACKED_INT}, - selectors::{ace_chiplet_flag, memory_chiplet_flag}, - }, - tagging::{ - TagGroup, TaggingAirBuilderExt, ids::TAG_WIRING_BUS_BASE, tagged_assert_zero_ext, - }, + chiplets::{columns::PeriodicCols, selectors::ChipletSelectors}, }, trace::{ - CHIPLETS_OFFSET, Challenges, + CHIPLETS_OFFSET, Challenges, bus_types, chiplets::{ - HASHER_NODE_INDEX_COL_IDX, HASHER_PERM_SEG_COL_IDX, HASHER_STATE_COL_RANGE, - MEMORY_WORD_ADDR_HI_COL_IDX, MEMORY_WORD_ADDR_LO_COL_IDX, + HASHER_NODE_INDEX_COL_IDX, HASHER_STATE_COL_RANGE, MEMORY_WORD_ADDR_HI_COL_IDX, + MEMORY_WORD_ADDR_LO_COL_IDX, ace::{ CLK_IDX, CTX_IDX, ID_0_IDX, ID_1_IDX, ID_2_IDX, M_0_IDX, M_1_IDX, SELECTOR_BLOCK_IDX, V_0_0_IDX, V_0_1_IDX, V_1_0_IDX, V_1_1_IDX, V_2_0_IDX, @@ -59,16 +52,6 @@ use crate::{ const ACE_OFFSET: usize = 4; -const WIRING_BUS_ID: usize = TAG_WIRING_BUS_BASE; -const WIRING_BUS_NAME: &str = "chiplets.bus.wiring.transition"; -const WIRING_MEM_NAME: &str = "chiplets.bus.wiring.memory_range"; -const WIRING_PERM_LINK_NAME: &str = "chiplets.bus.wiring.hasher_perm_link"; -const WIRING_BUS_NAMES: [&str; 3] = [WIRING_BUS_NAME, WIRING_MEM_NAME, WIRING_PERM_LINK_NAME]; -const WIRING_BUS_TAGS: TagGroup = TagGroup { - base: WIRING_BUS_ID, - names: &WIRING_BUS_NAMES, -}; - // ENTRY POINT // ================================================================================================ @@ -86,11 +69,12 @@ const WIRING_BUS_TAGS: TagGroup = TagGroup { /// `idle_flag * delta` term forces the shared accumulator to propagate unchanged. pub fn enforce_wiring_bus_constraint( builder: &mut AB, - local: &MainTraceRow, - _next: &MainTraceRow, + local: &MainCols, + _next: &MainCols, challenges: &Challenges, + selectors: &ChipletSelectors, ) where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { // --- Auxiliary trace access --- let (v_local, v_next) = { @@ -107,25 +91,24 @@ pub fn enforce_wiring_bus_constraint( // --- Periodic columns for hasher cycle detection --- // Row 0 = is_init_ext. Row 15 (boundary) = 1 - selector_sum. let (p_cycle_row_0, p_cycle_row_boundary) = { - let p = builder.periodic_values(); - let row_0: AB::Expr = p[P_IS_INIT_EXT].into(); - let selector_sum: AB::Expr = Into::::into(p[P_IS_INIT_EXT]) - + Into::::into(p[P_IS_EXT]) - + Into::::into(p[P_IS_PACKED_INT]) - + Into::::into(p[P_IS_INT_EXT]); + let periodic: &PeriodicCols = builder.periodic_values().borrow(); + let row_0: AB::Expr = periodic.hasher.is_init_ext.into(); + let selector_sum: AB::Expr = Into::::into(periodic.hasher.is_init_ext) + + Into::::into(periodic.hasher.is_ext) + + Into::::into(periodic.hasher.is_packed_int) + + Into::::into(periodic.hasher.is_int_ext); let row_boundary = AB::Expr::ONE - selector_sum; (row_0, row_boundary) }; - // --- Chiplet selectors --- - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let s2: AB::Expr = local.chiplets[2].clone().into(); - let s3: AB::Expr = local.chiplets[3].clone().into(); - - let ace_flag = ace_chiplet_flag(s0.clone(), s1.clone(), s2.clone(), s3); - let memory_flag = memory_chiplet_flag(s0.clone(), s1.clone(), s2); - let hasher_flag = AB::Expr::ONE - s0.clone(); + // --- Chiplet region flags (from precomputed ChipletSelectors) --- + // hasher_flag covers both controller and permutation rows (their selector products + // are mutually exclusive, so addition gives the union). ace_flag and memory_flag + // come directly from the precomputed `is_active` selector products. + let ace_flag = selectors.ace.is_active.clone(); + let memory_flag = selectors.memory.is_active.clone(); + let hasher_flag = + selectors.controller.is_active.clone() + selectors.permutation.is_active.clone(); let idle_flag = AB::Expr::ONE - ace_flag.clone() - memory_flag.clone() - hasher_flag.clone(); // --- ACE term --- @@ -139,6 +122,8 @@ pub fn enforce_wiring_bus_constraint( &delta, hasher_flag, idle_flag, + selectors.controller.is_active.clone(), + selectors.permutation.is_active.clone(), local, challenges, p_cycle_row_0, @@ -146,10 +131,9 @@ pub fn enforce_wiring_bus_constraint( ); // --- Three separate constraints --- - let mut idx = 0; - tagged_assert_zero_ext(builder, &WIRING_BUS_TAGS, &mut idx, ace_term); - tagged_assert_zero_ext(builder, &WIRING_BUS_TAGS, &mut idx, mem_term); - tagged_assert_zero_ext(builder, &WIRING_BUS_TAGS, &mut idx, perm_link_term); + builder.when_transition().assert_zero_ext(ace_term); + builder.when_transition().assert_zero_ext(mem_term); + builder.when_transition().assert_zero_ext(perm_link_term); } // ACE TERM @@ -160,11 +144,11 @@ pub fn enforce_wiring_bus_constraint( fn compute_ace_term( delta: &AB::ExprEF, ace_flag: AB::Expr, - local: &MainTraceRow, + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { // Block selector: sblock = 0 for READ, sblock = 1 for EVAL let sblock: AB::Expr = load_ace_col::(local, SELECTOR_BLOCK_IDX); @@ -220,26 +204,28 @@ where /// /// This is a SEPARATE constraint from the ACE wiring, using its own delta from the /// V_WIRING aux column. It subtracts 3 LogUp fractions per memory row: -/// 1/(alpha+w0) + 1/(alpha+w1) + 1/(alpha+4w1). +/// 1/(prefix+w0) + 1/(prefix+w1) + 1/(prefix+4w1). +/// +/// Uses `bus_prefix[RANGE_CHECK_BUS]` to match the range checker's encoding. fn compute_memory_term( delta: &AB::ExprEF, memory_flag: AB::Expr, - local: &MainTraceRow, + local: &MainCols, challenges: &Challenges, ) -> AB::ExprEF where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { - let alpha = &challenges.alpha; + let prefix = &challenges.bus_prefix[bus_types::RANGE_CHECK_BUS]; // Load word-index limbs - let w0: AB::Expr = local.chiplets[MEMORY_WORD_ADDR_LO_COL_IDX - CHIPLETS_OFFSET].clone().into(); - let w1: AB::Expr = local.chiplets[MEMORY_WORD_ADDR_HI_COL_IDX - CHIPLETS_OFFSET].clone().into(); + let w0: AB::Expr = local.chiplets[MEMORY_WORD_ADDR_LO_COL_IDX - CHIPLETS_OFFSET].into(); + let w1: AB::Expr = local.chiplets[MEMORY_WORD_ADDR_HI_COL_IDX - CHIPLETS_OFFSET].into(); let w1_mul4: AB::Expr = w1.clone() * AB::Expr::from_u16(4); - let den0: AB::ExprEF = alpha.clone() + Into::::into(w0); - let den1: AB::ExprEF = alpha.clone() + Into::::into(w1); - let den2: AB::ExprEF = alpha.clone() + Into::::into(w1_mul4); + let den0: AB::ExprEF = prefix.clone() + Into::::into(w0); + let den1: AB::ExprEF = prefix.clone() + Into::::into(w1); + let den2: AB::ExprEF = prefix.clone() + Into::::into(w1_mul4); // Common denominator and numerator let common_den = den0.clone() * den1.clone() * den2.clone(); @@ -256,11 +242,11 @@ where /// Computes the hasher perm-link contribution to the wiring bus and enforces idle propagation. /// /// This links hasher controller rows (dispatch) to hasher permutation segment (compute): -/// - Hasher controller input (perm_seg=0, hs0=1): +1/msg_in -/// - Hasher controller output (perm_seg=0, hs0=0, hs1=0): +1/msg_out +/// - Hasher controller input (s_perm=0, s0=1): +1/msg_in +/// - Hasher controller output (s_perm=0, s0=0, s1=0): +1/msg_out /// - Hasher permutation cycle row 0 (`is_init_ext = 1`): -m/msg_in -/// - Hasher permutation boundary row (cycle row 15, i.e. `perm_seg=1` and all row-type selectors -/// are 0): -m/msg_out +/// - Hasher permutation boundary row (cycle row 15, i.e. `s_perm=1` and all row-type selectors are +/// 0): -m/msg_out /// - Idle bitwise / kernel-ROM / padding rows: `delta = 0` /// /// Common-denominator form: @@ -274,45 +260,41 @@ fn compute_hasher_perm_link_term( delta: &AB::ExprEF, hasher_flag: AB::Expr, idle_flag: AB::Expr, - local: &MainTraceRow, + ctrl_is_active: AB::Expr, + perm_is_active: AB::Expr, + local: &MainCols, challenges: &Challenges, p_cycle_row_0: AB::Expr, p_cycle_row_boundary: AB::Expr, ) -> AB::ExprEF where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { - // --- Load hasher-internal selectors --- - // chiplets[1] = hasher s0 (hs0), chiplets[2] = hasher s1 (hs1) - let hs0: AB::Expr = local.chiplets[1].clone().into(); - let hs1: AB::Expr = local.chiplets[2].clone().into(); - - // perm_seg column - let perm_seg: AB::Expr = - local.chiplets[HASHER_PERM_SEG_COL_IDX - CHIPLETS_OFFSET].clone().into(); + // --- Load hasher-internal sub-selectors (only meaningful on controller rows) --- + // On controller rows: chiplets[1] = s0 (input flag), chiplets[2] = s1. + let s0: AB::Expr = local.chiplets[1].into(); + let s1: AB::Expr = local.chiplets[2].into(); // node_index (= multiplicity on perm segment rows) - let m: AB::Expr = local.chiplets[HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET].clone().into(); + let m: AB::Expr = local.chiplets[HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET].into(); // --- Flags --- let one = AB::Expr::ONE; - let ctrl = one.clone() - perm_seg.clone(); // 1 on controller rows - // f_in: controller input row (perm_seg=0, hs0=1) - let f_in = ctrl.clone() * hs0.clone(); + // f_in: controller input row (s_ctrl=1, s0=1) + let f_in = ctrl_is_active.clone() * s0.clone(); - // f_out: controller output row (perm_seg=0, hs0=0, hs1=0) - let f_out = ctrl * (one.clone() - hs0) * (one - hs1); + // f_out: controller output row (s_ctrl=1, s0=0, s1=0) + let f_out = ctrl_is_active * (one.clone() - s0) * (one - s1); - // f_p_in: packed permutation row 0 (`is_init_ext = 1`) - let f_p_in = perm_seg.clone() * p_cycle_row_0; + // f_p_in: packed permutation row 0 (s_perm=1 * is_init_ext=1) + let f_p_in = perm_is_active.clone() * p_cycle_row_0; - // f_p_out: perm boundary row (perm_seg=1, cycle boundary) - let f_p_out = perm_seg * p_cycle_row_boundary; + // f_p_out: perm boundary row (s_perm=1 * cycle boundary) + let f_p_out = perm_is_active * p_cycle_row_boundary; // --- Messages --- - // msg = challenges.encode([label, h0, h1, ..., h11]) -- 13 elements - // TODO: labels 0/1 risk collisions with other v_wiring contributors (see hasher_perm.rs). + // msg = challenges.encode(HASHER_PERM_LINK, [label, h0, h1, ..., h11]) -- 13 elements let msg_in = encode_perm_link_message::(local, challenges, AB::Expr::ZERO); let msg_out = encode_perm_link_message::(local, challenges, AB::Expr::ONE); @@ -334,25 +316,34 @@ where perm_link_term * hasher_flag + idle_term } -/// Encodes a perm-link message: `challenges.encode([label, h0, h1, ..., h11])`. +/// Encodes a perm-link message on the dedicated `HASHER_PERM_LINK` bus: `[label, h0, ..., h11]`. fn encode_perm_link_message( - local: &MainTraceRow, + local: &MainCols, challenges: &Challenges, label: AB::Expr, ) -> AB::ExprEF where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { let h_start = HASHER_STATE_COL_RANGE.start - CHIPLETS_OFFSET; - - // Build array: [label, h0, h1, ..., h11] - let label_ef: AB::ExprEF = label.into(); - let mut acc = challenges.alpha.clone() + challenges.beta_powers[0].clone() * label_ef; - for i in 0..12 { - let h_i: AB::ExprEF = local.chiplets[h_start + i].clone().into().into(); - acc += challenges.beta_powers[1 + i].clone() * h_i; - } - acc + challenges.encode( + bus_types::HASHER_PERM_LINK, + [ + label, + local.chiplets[h_start].into(), + local.chiplets[h_start + 1].into(), + local.chiplets[h_start + 2].into(), + local.chiplets[h_start + 3].into(), + local.chiplets[h_start + 4].into(), + local.chiplets[h_start + 5].into(), + local.chiplets[h_start + 6].into(), + local.chiplets[h_start + 7].into(), + local.chiplets[h_start + 8].into(), + local.chiplets[h_start + 9].into(), + local.chiplets[h_start + 10].into(), + local.chiplets[h_start + 11].into(), + ], + ) } // INTERNAL HELPERS @@ -365,7 +356,7 @@ struct AceWire { } fn load_ace_wire( - row: &MainTraceRow, + row: &MainCols, id_idx: usize, v0_idx: usize, v1_idx: usize, @@ -389,13 +380,16 @@ fn encode_wire( where AB: LiftedAirBuilder, { - challenges.encode([clk.clone(), ctx.clone(), wire.id.clone(), wire.v0.clone(), wire.v1.clone()]) + challenges.encode( + bus_types::ACE_WIRING_BUS, + [clk.clone(), ctx.clone(), wire.id.clone(), wire.v0.clone(), wire.v1.clone()], + ) } -fn load_ace_col(row: &MainTraceRow, ace_col_idx: usize) -> AB::Expr +fn load_ace_col(row: &MainCols, ace_col_idx: usize) -> AB::Expr where AB: LiftedAirBuilder, { let local_idx = ACE_OFFSET + ace_col_idx; - row.chiplets[local_idx].clone().into() + row.chiplets[local_idx].into() } diff --git a/air/src/constraints/chiplets/columns.rs b/air/src/constraints/chiplets/columns.rs new file mode 100644 index 0000000000..35b11c7b6b --- /dev/null +++ b/air/src/constraints/chiplets/columns.rs @@ -0,0 +1,774 @@ +//! Column structs for all chiplet sub-components and periodic columns. + +use alloc::{vec, vec::Vec}; +use core::{borrow::Borrow, mem::size_of}; + +use miden_core::{Felt, WORD_SIZE, chiplets::hasher::Hasher, field::PrimeCharacteristicRing}; + +use super::super::{columns::indices_arr, ext_field::QuadFeltExpr}; +use crate::trace::chiplets::{ + bitwise::NUM_DECOMP_BITS, + hasher::{CAPACITY_LEN, DIGEST_LEN, HASH_CYCLE_LEN, NUM_SELECTORS, RATE_LEN, STATE_WIDTH}, +}; + +// HELPERS +// ================================================================================================ + +/// Zero-copy cast from a slice to a `#[repr(C)]` chiplet column struct. +pub fn borrow_chiplet(slice: &[T]) -> &S { + let (prefix, cols, suffix) = unsafe { slice.align_to::() }; + debug_assert!(prefix.is_empty() && suffix.is_empty() && cols.len() == 1); + &cols[0] +} + +// PERMUTATION COLUMNS +// ================================================================================================ + +/// Permutation chiplet columns (19 columns), viewed from `chiplets[1..20]`. +/// +/// Logical overlay for permutation segment rows (`s_perm = 1`). The 3 witness columns +/// `w0..w2` share the same physical columns as the controller's `s0/s1/s2` selectors, +/// and `multiplicity` shares the same physical column as the controller's `node_index`. +/// +/// `s_ctrl` (= `chiplets[0]`) and `s_perm` (= `MainCols::s_perm`) are consumed by the chiplet +/// selector system and are NOT part of this overlay. +/// +/// The state holds a Poseidon2 sponge in `[RATE0, RATE1, CAPACITY]` layout. +/// Helper methods `rate0()`, `rate1()`, `capacity()`, and `digest()` provide +/// sub-views into the state array. +/// +/// ## Layout +/// +/// ```text +/// | witnesses[3] | state[12] | extra cols | +/// | | rate0[4] (= digest) | rate1[4] | capacity[4] | | +/// | w0, w1, w2 | h0..h3 | h4..h7 | h8..h11 | m -- -- -- | +/// ``` +#[repr(C)] +pub struct PermutationCols { + /// S-box witness columns (same physical columns as hasher selectors). + pub witnesses: [T; NUM_SELECTORS], + /// Poseidon2 state (12 field elements: 8 rate + 4 capacity). + pub state: [T; STATE_WIDTH], + /// Request multiplicity (same physical column as node_index). + pub multiplicity: T, + /// Physical slots for controller columns mrupdate_id, is_boundary, and direction_bit. + /// These must be zero on permutation rows; access via [`Self::unused_padding()`] only. + _unused: [T; 3], +} + +impl PermutationCols { + /// Returns the rate portion of the state (state[0..8]). + pub fn rate(&self) -> [T; RATE_LEN] { + [ + self.state[0], + self.state[1], + self.state[2], + self.state[3], + self.state[4], + self.state[5], + self.state[6], + self.state[7], + ] + } + + /// Returns the capacity portion of the state (state[8..12]). + pub fn capacity(&self) -> [T; CAPACITY_LEN] { + [self.state[8], self.state[9], self.state[10], self.state[11]] + } + + /// Returns the digest portion of the state (state[0..4]). + pub fn digest(&self) -> [T; DIGEST_LEN] { + [self.state[0], self.state[1], self.state[2], self.state[3]] + } + + /// Returns rate0 (state[0..4]). + pub fn rate0(&self) -> [T; DIGEST_LEN] { + [self.state[0], self.state[1], self.state[2], self.state[3]] + } + + /// Returns rate1 (state[4..8]). + pub fn rate1(&self) -> [T; DIGEST_LEN] { + [self.state[4], self.state[5], self.state[6], self.state[7]] + } + + /// Returns the 3 padding columns (mrupdate_id, is_boundary, direction_bit) that must + /// be zero on permutation rows. + pub fn unused_padding(&self) -> [T; 3] { + self._unused + } +} + +// CONTROLLER COLUMNS +// ================================================================================================ + +/// Controller chiplet columns (19 columns), viewed from `chiplets[1..20]`. +/// +/// Logical overlay for controller rows (`s_ctrl = 1`). `s0` distinguishes input rows +/// (`s0 = 1`) from output/padding rows (`s0 = 0`). The physical layout mirrors +/// [`PermutationCols`], but column names reflect the controller/permutation split. +/// +/// `s_ctrl` (= `chiplets[0]`) and `s_perm` (= `MainCols::s_perm`) are consumed by the chiplet +/// selector system and are NOT part of this overlay. Because the chiplet-level +/// non-hasher selector is only ever a virtual expression (`1 - s_ctrl - s_perm`) and is +/// never a named column or struct field, there is no name collision with the +/// controller-internal `s0` defined here. +/// +/// The state holds a Poseidon2 sponge in `[RATE0, RATE1, CAPACITY]` layout. +/// Helper methods `rate0()`, `rate1()`, `capacity()`, and `digest()` provide +/// sub-views into the state array. +/// +/// ## Layout +/// +/// ```text +/// | s0 s1 s2 | state[12] | extra cols | +/// | | rate0[4] (= digest) | rate1[4] | capacity[4] | | +/// | | h0..h3 | h4..h7 | h8..h11 | i mr bnd dir | +/// ``` +#[repr(C)] +pub struct ControllerCols { + /// Hasher-internal sub-selector: `s0 = 1` on controller input rows, 0 on output/padding. + pub s0: T, + /// Operation sub-selector s1. + pub s1: T, + /// Operation sub-selector s2. + pub s2: T, + /// Poseidon2 state (12 field elements: 8 rate + 4 capacity). + pub state: [T; STATE_WIDTH], + /// Merkle tree node index. + pub node_index: T, + /// Domain separator for sibling table across MRUPDATE ops. + pub mrupdate_id: T, + /// 1 on boundary rows (first input or last output of each permutation). + pub is_boundary: T, + /// Direction bit for Merkle path verification. + pub direction_bit: T, +} + +impl ControllerCols { + /// Returns the rate portion of the state (state[0..8]). + pub fn rate(&self) -> [T; RATE_LEN] { + [ + self.state[0], + self.state[1], + self.state[2], + self.state[3], + self.state[4], + self.state[5], + self.state[6], + self.state[7], + ] + } + + /// Returns the capacity portion of the state (state[8..12]). + pub fn capacity(&self) -> [T; CAPACITY_LEN] { + [self.state[8], self.state[9], self.state[10], self.state[11]] + } + + /// Returns the digest portion of the state (state[0..4]). + pub fn digest(&self) -> [T; DIGEST_LEN] { + [self.state[0], self.state[1], self.state[2], self.state[3]] + } + + /// Returns rate0 (state[0..4]). + pub fn rate0(&self) -> [T; DIGEST_LEN] { + [self.state[0], self.state[1], self.state[2], self.state[3]] + } + + /// Returns rate1 (state[4..8]). + pub fn rate1(&self) -> [T; DIGEST_LEN] { + [self.state[4], self.state[5], self.state[6], self.state[7]] + } + + /// Merkle-update new-path flag: `s0 * s1 * s2`. + /// + /// Active on controller input rows that insert the new Merkle path into the sibling + /// table (request/remove side of the running product). + pub fn f_mu(&self) -> E + where + T: Into, + { + self.s0.into() * self.s1.into() * self.s2.into() + } + + /// Merkle-verify / old-path flag: `s0 * s1 * (1 - s2)`. + /// + /// Active on controller input rows that extract the old Merkle path from the sibling + /// table (response/add side of the running product). + pub fn f_mv(&self) -> E + where + T: Into, + { + self.s0.into() * self.s1.into() * (E::ONE - self.s2.into()) + } +} + +// BITWISE COLUMNS +// ================================================================================================ + +/// Bitwise chiplet columns (13 columns), viewed from `chiplets[2..15]`. +/// +/// Bit decomposition columns (`a_bits`, `b_bits`) are in **little-endian** order: +/// `value = bits[0] + 2*bits[1] + 4*bits[2] + 8*bits[3]`. +#[repr(C)] +pub struct BitwiseCols { + /// Operation flag: 0 = AND, 1 = XOR. + pub op_flag: T, + /// Aggregated input a. + pub a: T, + /// Aggregated input b. + pub b: T, + /// 4-bit decomposition of a. + pub a_bits: [T; NUM_DECOMP_BITS], + /// 4-bit decomposition of b. + pub b_bits: [T; NUM_DECOMP_BITS], + /// Previous aggregated output. + pub prev_output: T, + /// Current aggregated output. + pub output: T, +} + +// MEMORY COLUMNS +// ================================================================================================ + +/// Memory chiplet columns (15 columns), viewed from `chiplets[3..18]`. +/// +/// When reading from a new word address (first access to a context/addr pair), the +/// `values` are initialized to zero. +#[repr(C)] +pub struct MemoryCols { + /// Read/write flag (0 = write, 1 = read). + pub is_read: T, + /// Element/word flag (0 = element, 1 = word). + pub is_word: T, + /// Memory context ID. + pub ctx: T, + /// Word address. + pub word_addr: T, + /// First bit of the address index within the word. + pub idx0: T, + /// Second bit of the address index within the word. + pub idx1: T, + /// Clock cycle of the memory access. + pub clk: T, + /// Values stored at this context/word/clock after the operation. + pub values: [T; WORD_SIZE], + /// Lower 16 bits of delta. + pub d0: T, + /// Upper 16 bits of delta. + pub d1: T, + /// Inverse of delta. + pub d_inv: T, + /// Flag: same context and same word address as previous operation (docs: `f_sca`). + pub is_same_ctx_and_addr: T, +} + +// ACE COLUMNS +// ================================================================================================ + +/// ACE chiplet columns (16 columns), viewed from `chiplets[4..20]`. +/// +/// The ACE (Arithmetic Circuit Evaluator) chiplet evaluates arithmetic circuits over +/// quadratic extension field elements. Each circuit evaluation consists of two phases: +/// +/// 1. **READ** (`s_block=0`): loads wire values from memory into the chiplet. +/// 2. **EVAL** (`s_block=1`): evaluates arithmetic gates on loaded wire values. +/// +/// The first 12 columns are common to both modes. The last 4 (`mode`) are overlaid +/// and reinterpreted depending on `s_block`: +/// +/// ```text +/// mode idx | READ (s_block=0) | EVAL (s_block=1) +/// ---------+------------------------+------------------- +/// 0 | num_eval | id_2 +/// 1 | (unused) | v_2.0 +/// 2 | m_1 (wire-1 mult) | v_2.1 +/// 3 | m_0 (wire-0 mult) | m_0 (wire-0 mult) +/// ``` +/// +/// Use `ace.read()` / `ace.eval()` for typed overlays of the mode columns. +#[repr(C)] +pub struct AceCols { + /// Start-of-circuit flag (1 on the first row of a new circuit evaluation). + pub s_start: T, + /// Block selector: 0 = READ (memory loads), 1 = EVAL (gate evaluation). + pub s_block: T, + /// Memory context for the current circuit evaluation. + pub ctx: T, + /// Memory pointer from which to read the next two wire values or instruction. + pub ptr: T, + /// Clock cycle at which the memory read is performed. + pub clk: T, + /// Arithmetic operation selector (determines which gate to evaluate in EVAL mode). + pub eval_op: T, + /// ID of the first wire (output wire / left operand). + pub id_0: T, + /// Value of the first wire (quadratic extension field element). + pub v_0: QuadFeltExpr, + /// ID of the second wire (first input / left operand). + pub id_1: T, + /// Value of the second wire (quadratic extension field element). + pub v_1: QuadFeltExpr, + /// Mode-dependent columns (interpretation depends on `s_block`; see table above). + mode: [T; 4], +} + +impl AceCols { + /// Returns a READ-mode overlay of the mode-dependent columns. + pub fn read(&self) -> &AceReadCols { + borrow_chiplet(&self.mode) + } + + /// Returns an EVAL-mode overlay of the mode-dependent columns. + pub fn eval(&self) -> &AceEvalCols { + borrow_chiplet(&self.mode) + } +} + +impl AceCols { + /// ACE read flag: `1 - s_block`. + /// + /// Active on ACE rows in READ mode (memory word reads for circuit inputs). + pub fn f_read(&self) -> E + where + T: Into, + { + E::ONE - self.s_block.into() + } + + /// ACE eval flag: `s_block`. + /// + /// Active on ACE rows in EVAL mode (circuit gate evaluation). + pub fn f_eval(&self) -> E + where + T: Into, + { + self.s_block.into() + } +} + +/// READ mode overlay for ACE mode-dependent columns (4 columns). +/// +/// In READ mode, the chiplet loads wire values from memory. The multiplicity columns +/// (`m_0`, `m_1`) track how many times each wire participates in circuit gates, used +/// by the wiring bus to verify correct wire connections. +#[repr(C)] +pub struct AceReadCols { + /// Number of EVAL rows that follow this READ block. + pub num_eval: T, + /// Unused column (padding for layout alignment with EVAL overlay). + pub unused: T, + /// Multiplicity of the second wire (wire 1). + pub m_1: T, + /// Multiplicity of the first wire (wire 0). + pub m_0: T, +} + +/// EVAL mode overlay for ACE mode-dependent columns (4 columns). +/// +/// In EVAL mode, the chiplet evaluates an arithmetic gate on three wires: two inputs +/// (`id_1`, `id_2`) and one output (`id_0`). The third wire's ID and value occupy the +/// same physical columns as `num_eval`/`unused`/`m_1` in READ mode. +#[repr(C)] +pub struct AceEvalCols { + /// ID of the third wire (second input / right operand). + pub id_2: T, + /// Value of the third wire. + pub v_2: QuadFeltExpr, + /// Multiplicity of the first wire (wire 0). + pub m_0: T, +} + +// ACE COLUMN INDEX MAPS +// ================================================================================================ + +/// Compile-time index map for the top-level ACE chiplet columns (16 columns). +#[allow(dead_code)] +pub const ACE_COL_MAP: AceCols = { + assert!(size_of::>() == 16); + unsafe { core::mem::transmute(indices_arr::<{ size_of::>() }>()) } +}; + +/// Compile-time index map for the READ overlay (relative to `mode`). +pub const ACE_READ_COL_MAP: AceReadCols = { + assert!(size_of::>() == 4); + unsafe { core::mem::transmute(indices_arr::<{ size_of::>() }>()) } +}; + +/// Compile-time index map for the EVAL overlay (relative to `mode`). +pub const ACE_EVAL_COL_MAP: AceEvalCols = { + assert!(size_of::>() == 4); + unsafe { core::mem::transmute(indices_arr::<{ size_of::>() }>()) } +}; + +/// Offset of the `mode` array within the ACE chiplet columns. +#[allow(dead_code)] +pub const MODE_OFFSET: usize = ACE_COL_MAP.mode[0]; + +const _: () = { + assert!(size_of::>() == 16); + assert!(size_of::>() == 4); + assert!(size_of::>() == 4); + + // m_0 is at the same position in both overlays. + assert!(ACE_READ_COL_MAP.m_0 == ACE_EVAL_COL_MAP.m_0); + + // READ-only and EVAL-only columns overlap at the expected positions. + assert!(ACE_READ_COL_MAP.num_eval == ACE_EVAL_COL_MAP.id_2); + assert!(ACE_READ_COL_MAP.m_1 == ACE_EVAL_COL_MAP.v_2.1); +}; + +// KERNEL ROM COLUMNS +// ================================================================================================ + +/// Kernel ROM chiplet columns (5 columns), viewed from `chiplets[5..10]`. +#[repr(C)] +pub struct KernelRomCols { + /// First-row-of-hash flag. + pub s_first: T, + /// Kernel procedure root digest. + pub root: [T; WORD_SIZE], +} + +// PERIODIC COLUMNS +// ================================================================================================ + +/// All chiplet periodic columns (20 columns). +/// +/// Aggregates hasher (18 columns) and bitwise (2 columns) periodic values into a single +/// typed view. Use `builder.periodic_values().borrow()` to obtain a `&PeriodicCols<_>`. +#[derive(Clone, Copy)] +#[repr(C)] +pub struct PeriodicCols { + /// Hasher periodic columns (cycle markers, step selectors, round constants). + pub hasher: HasherPeriodicCols, + /// Bitwise periodic columns. + pub bitwise: BitwisePeriodicCols, +} + +/// Hasher chiplet periodic columns (16 columns, period = 16 rows). +/// +/// Provides step-type selectors and Poseidon2 round constants for the hasher chiplet. +/// The hasher operates on a 16-row cycle (15 transitions + 1 boundary row). +/// +/// ## Layout +/// +/// | Index | Name | Description | +/// |-------|----------------|-------------| +/// | 0 | is_init_ext | 1 on row 0 (init linear + first external round) | +/// | 1 | is_ext | 1 on rows 1-3, 12-14 (single external round) | +/// | 2 | is_packed_int | 1 on rows 4-10 (3 packed internal rounds) | +/// | 3 | is_int_ext | 1 on row 11 (int22 + ext5 merged) | +/// | 4-15 | ark[0..12] | Shared round constants | +#[derive(Clone, Copy)] +#[repr(C)] +pub struct HasherPeriodicCols { + /// 1 on row 0 (init linear + first external round). + pub is_init_ext: T, + /// 1 on rows 1-3, 12-14 (single external round). + pub is_ext: T, + /// 1 on rows 4-10 (3 packed internal rounds). + pub is_packed_int: T, + /// 1 on row 11 (int22 + ext5 merged). + pub is_int_ext: T, + /// Shared round constants (12 lanes). Carry external round constants on external + /// rows, and internal round constants in ark[0..2] on packed-internal rows. + pub ark: [T; STATE_WIDTH], +} + +/// Bitwise chiplet periodic columns (2 columns, period = 8 rows). +#[derive(Clone, Copy)] +#[repr(C)] +pub struct BitwisePeriodicCols { + /// Marks first row of 8-row cycle: `[1, 0, 0, 0, 0, 0, 0, 0]`. + pub k_first: T, + /// Marks non-last rows of 8-row cycle: `[1, 1, 1, 1, 1, 1, 1, 0]`. + pub k_transition: T, +} + +// PERIODIC COLUMN GENERATION +// ================================================================================================ + +#[allow(clippy::new_without_default)] +impl HasherPeriodicCols> { + /// Generate periodic columns for the Poseidon2 hasher chiplet. + /// + /// All columns repeat every 16 rows, matching one permutation cycle. + /// + /// The 4 selector columns identify the row type. The 12 ark columns carry either + /// external round constants (on external rows) or internal round constants in + /// `ark[0..2]` (on packed-internal rows). + /// + /// ## 16-Row Schedule + /// + /// ```text + /// Row Transition Selector + /// 0 init + ext1 is_init_ext + /// 1-3 ext2-ext4 is_ext + /// 4-10 3x packed internal is_packed_int + /// 11 int22 + ext5 is_int_ext + /// 12-14 ext6-ext8 is_ext + /// 15 boundary (none) + /// ``` + #[allow(clippy::needless_range_loop)] + pub fn new() -> Self { + // ------------------------------------------------------------------------- + // Selectors + // ------------------------------------------------------------------------- + let mut is_init_ext = vec![Felt::ZERO; HASH_CYCLE_LEN]; + let mut is_ext = vec![Felt::ZERO; HASH_CYCLE_LEN]; + let mut is_packed_int = vec![Felt::ZERO; HASH_CYCLE_LEN]; + let mut is_int_ext = vec![Felt::ZERO; HASH_CYCLE_LEN]; + + is_init_ext[0] = Felt::ONE; + + for r in [1, 2, 3, 12, 13, 14] { + is_ext[r] = Felt::ONE; + } + + for r in 4..=10 { + is_packed_int[r] = Felt::ONE; + } + + is_int_ext[11] = Felt::ONE; + + // ------------------------------------------------------------------------- + // Shared round constants (12 columns) + // ------------------------------------------------------------------------- + // On external rows (0-3, 11-14): hold per-lane external round constants. + // On packed-internal rows (4-10): ark[0..2] hold 3 internal round constants, + // ark[3..12] are zero. + // On boundary (row 15): all zero. + let ark = core::array::from_fn(|lane| { + let mut col = vec![Felt::ZERO; HASH_CYCLE_LEN]; + + // Row 0 (init+ext1): first initial external round constants + col[0] = Hasher::ARK_EXT_INITIAL[0][lane]; + + // Rows 1-3 (ext2, ext3, ext4): remaining initial external round constants + for r in 1..=3 { + col[r] = Hasher::ARK_EXT_INITIAL[r][lane]; + } + + // Rows 4-10 (packed internal): internal constants in lanes 0-2 only + if lane < 3 { + for triple in 0..7_usize { + let row = 4 + triple; + let ark_idx = triple * 3 + lane; + col[row] = Hasher::ARK_INT[ark_idx]; + } + } + + // Row 11 (int22+ext5): terminal external round 0 constants + // (internal constant ARK_INT[21] is hardcoded in the constraint) + col[11] = Hasher::ARK_EXT_TERMINAL[0][lane]; + + // Rows 12-14 (ext6, ext7, ext8): remaining terminal external round constants + for r in 12..=14 { + col[r] = Hasher::ARK_EXT_TERMINAL[r - 11][lane]; + } + + col + }); + + Self { + is_init_ext, + is_ext, + is_packed_int, + is_int_ext, + ark, + } + } +} + +#[allow(clippy::new_without_default)] +impl BitwisePeriodicCols> { + /// Generate periodic columns for the bitwise chiplet. + pub fn new() -> Self { + let k_first = vec![ + Felt::ONE, + Felt::ZERO, + Felt::ZERO, + Felt::ZERO, + Felt::ZERO, + Felt::ZERO, + Felt::ZERO, + Felt::ZERO, + ]; + + let k_transition = vec![ + Felt::ONE, + Felt::ONE, + Felt::ONE, + Felt::ONE, + Felt::ONE, + Felt::ONE, + Felt::ONE, + Felt::ZERO, + ]; + + Self { k_first, k_transition } + } +} + +impl PeriodicCols> { + /// Generate all chiplet periodic columns as a flat `Vec>`. + pub fn periodic_columns() -> Vec> { + let HasherPeriodicCols { + is_init_ext, + is_ext, + is_packed_int, + is_int_ext, + ark: [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11], + } = HasherPeriodicCols::new(); + + let BitwisePeriodicCols { k_first, k_transition } = BitwisePeriodicCols::new(); + + vec![ + is_init_ext, + is_ext, + is_packed_int, + is_int_ext, + a0, + a1, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10, + a11, + k_first, + k_transition, + ] + } +} + +/// Total number of periodic columns across all chiplets. +pub const NUM_PERIODIC_COLUMNS: usize = size_of::>(); + +impl Borrow> for [T] { + fn borrow(&self) -> &PeriodicCols { + debug_assert_eq!(self.len(), NUM_PERIODIC_COLUMNS); + let (prefix, cols, suffix) = unsafe { self.align_to::>() }; + debug_assert!(prefix.is_empty() && suffix.is_empty() && cols.len() == 1); + &cols[0] + } +} + +const _: () = { + assert!(size_of::>() == 18); + assert!(size_of::>() == 16); + assert!(size_of::>() == 2); + + // PermutationCols and ControllerCols overlay chiplets[1..20] (19 columns, + // excluding s_perm which is consumed by the chiplet selector system). + assert!(size_of::>() == 19); + assert!(size_of::>() == 19); +}; + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn periodic_columns_dimensions() { + let cols = PeriodicCols::periodic_columns(); + assert_eq!(cols.len(), NUM_PERIODIC_COLUMNS); + + let (hasher_cols, bitwise_cols) = cols.split_at(size_of::>()); + for col in hasher_cols { + assert_eq!(col.len(), HASH_CYCLE_LEN); + } + for col in bitwise_cols { + assert_eq!(col.len(), 8); + } + } + + #[test] + fn hasher_step_selectors_are_exclusive() { + let h = HasherPeriodicCols::new(); + for row in 0..HASH_CYCLE_LEN { + let init_ext = h.is_init_ext[row]; + let ext = h.is_ext[row]; + let packed_int = h.is_packed_int[row]; + let int_ext = h.is_int_ext[row]; + + // Each selector is binary. + assert_eq!(init_ext * (init_ext - Felt::ONE), Felt::ZERO); + assert_eq!(ext * (ext - Felt::ONE), Felt::ZERO); + assert_eq!(packed_int * (packed_int - Felt::ONE), Felt::ZERO); + assert_eq!(int_ext * (int_ext - Felt::ONE), Felt::ZERO); + + // At most one selector is active per row. + let sum = init_ext + ext + packed_int + int_ext; + assert!(sum == Felt::ZERO || sum == Felt::ONE, "row {row}: sum = {sum}"); + } + } + + #[test] + fn external_round_constants_correct() { + let h = HasherPeriodicCols::new(); + + // Row 0: ARK_EXT_INITIAL[0] + for lane in 0..STATE_WIDTH { + assert_eq!(h.ark[lane][0], Hasher::ARK_EXT_INITIAL[0][lane]); + } + + // Rows 1-3: ARK_EXT_INITIAL[1..3] + for r in 1..=3 { + for lane in 0..STATE_WIDTH { + assert_eq!(h.ark[lane][r], Hasher::ARK_EXT_INITIAL[r][lane]); + } + } + + // Row 11: ARK_EXT_TERMINAL[0] + for lane in 0..STATE_WIDTH { + assert_eq!(h.ark[lane][11], Hasher::ARK_EXT_TERMINAL[0][lane]); + } + + // Rows 12-14: ARK_EXT_TERMINAL[1..3] + for r in 12..=14 { + for lane in 0..STATE_WIDTH { + assert_eq!(h.ark[lane][r], Hasher::ARK_EXT_TERMINAL[r - 11][lane]); + } + } + } + + #[test] + fn internal_round_constants_correct() { + let h = HasherPeriodicCols::new(); + + // Rows 4-10: packed internal round constants in ark[0..2] + for triple in 0..7_usize { + let row = 4 + triple; + for k in 0..3 { + let ark_idx = triple * 3 + k; + assert_eq!( + h.ark[k][row], + Hasher::ARK_INT[ark_idx], + "mismatch at row {row}, int constant {k} (ARK_INT[{ark_idx}])" + ); + } + // ark[3..12] must be zero on packed-internal rows + for lane in 3..STATE_WIDTH { + assert_eq!( + h.ark[lane][row], + Felt::ZERO, + "ark[{lane}] nonzero at packed-int row {row}" + ); + } + } + } + + #[test] + fn boundary_row_all_zero() { + let h = HasherPeriodicCols::new(); + for (lane, col) in h.ark.iter().enumerate() { + assert_eq!(col[15], Felt::ZERO, "ark column {lane} nonzero at row 15"); + } + } +} diff --git a/air/src/constraints/chiplets/hasher/flags.rs b/air/src/constraints/chiplets/hasher/flags.rs deleted file mode 100644 index 292221b648..0000000000 --- a/air/src/constraints/chiplets/hasher/flags.rs +++ /dev/null @@ -1,130 +0,0 @@ -//! Hasher chiplet flag computation functions. -//! -//! In the controller/permutation split architecture, flags are pure selector expressions -//! with no periodic column dependencies. They identify the operation type on controller rows. -//! -//! ## Controller Input Flags (s0=1) -//! -//! | Flag | s0 | s1 | s2 | Operation | -//! |------|----|----|----|--------------------| -//! | f_sponge | 1 | 0 | 0 | Sponge mode (linear hash / 2-to-1 hash / HPERM) | -//! | f_mp | 1 | 0 | 1 | Merkle path verify | -//! | f_mv | 1 | 1 | 0 | Merkle verify (old root) | -//! | f_mu | 1 | 1 | 1 | Merkle update (new root) | -//! -//! ## Controller Output Flags (s0=0, s1=0) -//! -//! | Flag | s0 | s1 | s2 | Operation | -//! |--------|----|----|----|--------------------| -//! | f_hout | 0 | 0 | 0 | Return digest | -//! | f_sout | 0 | 0 | 1 | Return full state | -//! -//! ## Permutation Segment -//! -//! Perm segment rows are identified by `perm_seg=1`. No operation-specific flags apply -//! on perm rows. - -use miden_core::field::PrimeCharacteristicRing; - -// CONTROLLER INPUT FLAGS -// ================================================================================================ - -/// Sponge-mode input flag `(1,0,0)`. -/// -/// Active on controller input rows for sponge-mode operations: linear hash (multi-batch -/// span), single 2-to-1 hash, or HPERM. In sponge mode, capacity is set once and carried -/// through across continuations (as opposed to tree mode, where capacity is zeroed at -/// every level). -/// -/// # Degree: 3 (s0 * !s1 * !s2) -#[inline] -pub fn f_sponge(s0: E, s1: E, s2: E) -> E { - s0 * (E::ONE - s1) * (E::ONE - s2) -} - -/// MP: Merkle Path verification input flag `(1,0,1)`. -/// -/// Active on MPVERIFY controller input rows. MPVERIFY is a read-only path check -- -/// it does not interact with the sibling table. -/// -/// # Degree: 3 (s0 * !s1 * s2) -#[inline] -#[allow(dead_code)] -pub fn f_mp(s0: E, s1: E, s2: E) -> E { - s0 * (E::ONE - s1) * s2 -} - -/// MV: old-path leg of MRUPDATE, input flag `(1,1,0)`. -/// -/// Active on MR_UPDATE_OLD controller input rows. Each MV row inserts a sibling -/// into the virtual sibling table via the hash_kernel bus. -/// -/// # Degree: 3 (s0 * s1 * !s2) -#[inline] -pub fn f_mv(s0: E, s1: E, s2: E) -> E { - s0 * s1 * (E::ONE - s2) -} - -/// MU: new-path leg of MRUPDATE, input flag `(1,1,1)`. -/// -/// Active on MR_UPDATE_NEW controller input rows. Each MU row removes a sibling -/// from the virtual sibling table. The table balance ensures the same siblings -/// are used for both the old and new paths. -/// -/// # Degree: 3 (s0 * s1 * s2) -#[inline] -pub fn f_mu(s0: E, s1: E, s2: E) -> E { - s0 * s1 * s2 -} - -// CONTROLLER OUTPUT FLAGS -// ================================================================================================ - -/// HOUT: Hash Output (digest return) flag `(0,0,0)`. -/// -/// # Degree: 3 (!s0 * !s1 * !s2) -#[inline] -pub fn f_hout(s0: E, s1: E, s2: E) -> E { - (E::ONE - s0) * (E::ONE - s1) * (E::ONE - s2) -} - -/// SOUT: State Output (full state return) flag `(0,0,1)`. -/// -/// # Degree: 3 (!s0 * !s1 * s2) -#[inline] -#[allow(dead_code)] -pub fn f_sout(s0: E, s1: E, s2: E) -> E { - (E::ONE - s0) * (E::ONE - s1) * s2 -} - -// COMPOSITE FLAGS -// ================================================================================================ - -/// Any controller input row flag. -/// -/// # Degree: 1 (s0) -#[inline] -#[allow(dead_code)] -pub fn f_input(s0: E) -> E { - s0 -} - -/// Any controller output row flag. -/// -/// # Degree: 2 (!s0 * !s1) -#[inline] -#[allow(dead_code)] -pub fn f_output(s0: E, s1: E) -> E { - (E::ONE - s0) * (E::ONE - s1) -} - -/// Any Merkle input row flag (MP or MV or MU). -/// -/// `s0 * (s1 + s2 - s1*s2)` which equals `s0 * (1 - (1-s1)*(1-s2))`. -/// This is 1 when s0=1 and at least one of s1,s2 is 1. -/// -/// # Degree: 3 -#[inline] -pub fn f_merkle_input(s0: E, s1: E, s2: E) -> E { - s0 * (s1.clone() + s2.clone() - s1 * s2) -} diff --git a/air/src/constraints/chiplets/hasher/merkle.rs b/air/src/constraints/chiplets/hasher/merkle.rs deleted file mode 100644 index bc3a0b32ca..0000000000 --- a/air/src/constraints/chiplets/hasher/merkle.rs +++ /dev/null @@ -1,312 +0,0 @@ -//! Hasher chiplet Merkle path constraints. -//! -//! In the controller/permutation split architecture, Merkle constraints apply only to -//! controller rows (perm_seg=0). The constraints enforce: -//! -//! - **Index decomposition**: `idx = 2 * idx_next + direction_bit` on Merkle input rows -//! - **Direction bit booleanity**: `direction_bit * (1 - direction_bit) = 0` on Merkle input rows -//! - **Cross-step index continuity**: For non-final Merkle outputs, next input index equals current -//! output index -//! - **Output index zero**: HOUT output rows have node_index = 0 -//! - **Capacity zeroing**: Merkle input rows have capacity = 0 -//! - **Forward propagation**: On non-final output -> next-input boundaries, direction_bit is -//! propagated from the next input to the current output, making `b_{i+1}` available for routing -//! - **Digest routing**: The digest from output_i is placed in the correct rate half of input_{i+1} -//! based on direction_bit (which equals `b_{i+1}` via forward propagation) - -use miden_core::field::PrimeCharacteristicRing; - -use super::HasherColumns; -use crate::{ - Felt, - constraints::tagging::{ - TagGroup, TaggingAirBuilderExt, tagged_assert_zero, tagged_assert_zero_integrity, - tagged_assert_zeros, - }, -}; - -// TAGGING NAMESPACES -// ================================================================================================ - -const MERKLE_INDEX_DECOMP_NAMESPACE: &str = "chiplets.hasher.merkle.index.decomposition"; -const MERKLE_INDEX_BOOLEANITY_NAMESPACE: &str = "chiplets.hasher.merkle.index.booleanity"; -const MERKLE_INDEX_ZERO_NAMESPACE: &str = "chiplets.hasher.merkle.index.zero"; -const MERKLE_CAP_NAMESPACE: &str = "chiplets.hasher.merkle.capacity"; - -const OUTPUT_INDEX_NAMES: [&str; 1] = [super::OUTPUT_INDEX_NAMESPACE]; -const MERKLE_INDEX_CONTINUITY_NAMESPACE: &str = "chiplets.hasher.merkle.index.continuity"; - -const MERKLE_INDEX_NAMES: [&str; 4] = [ - MERKLE_INDEX_DECOMP_NAMESPACE, - MERKLE_INDEX_BOOLEANITY_NAMESPACE, - MERKLE_INDEX_ZERO_NAMESPACE, - MERKLE_INDEX_CONTINUITY_NAMESPACE, -]; -const MERKLE_INPUT_STATE_NAMES: [&str; 4] = [MERKLE_CAP_NAMESPACE; 4]; - -const MERKLE_ROUTING_NAMESPACE: &str = "chiplets.hasher.merkle.routing"; -const MERKLE_ROUTING_NAMES: [&str; 5] = [MERKLE_ROUTING_NAMESPACE; 5]; - -const OUTPUT_INDEX_TAGS: TagGroup = TagGroup { - base: super::HASHER_OUTPUT_IDX_ID, - names: &OUTPUT_INDEX_NAMES, -}; -const MERKLE_INDEX_TAGS: TagGroup = TagGroup { - base: super::HASHER_MERKLE_INDEX_BASE_ID, - names: &MERKLE_INDEX_NAMES, -}; -const MERKLE_INPUT_STATE_TAGS: TagGroup = TagGroup { - base: super::HASHER_MERKLE_INPUT_STATE_BASE_ID, - names: &MERKLE_INPUT_STATE_NAMES, -}; -const MERKLE_ROUTING_TAGS: TagGroup = TagGroup { - base: super::HASHER_MERKLE_ROUTING_BASE_ID, - names: &MERKLE_ROUTING_NAMES, -}; - -// CONSTRAINT FUNCTIONS -// ================================================================================================ - -/// Enforces node index constraints for Merkle operations on controller rows. -/// -/// ## Index Decomposition Constraint -/// -/// On controller input rows for Merkle operations (s0=1, s1 or s2 non-zero): -/// `idx = 2 * idx_next + direction_bit` where idx_next is the paired output row's index. -/// -/// ## Direction Bit Booleanity -/// -/// On Merkle input rows: `direction_bit * (1 - direction_bit) = 0`. -/// -/// ## Index Zero Constraint -/// -/// On sponge (non-Merkle) input rows, node_index must be zero. -/// -/// ## Output Index Zero -/// -/// On HOUT output rows (final output), node_index must be zero. -pub(super) fn enforce_node_index_constraints( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, - cols_next: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let controller_flag = cols.controller_flag(); - - // ------------------------------------------------------------------------- - // Output Index Constraint: index must be 0 on HOUT rows - // ------------------------------------------------------------------------- - let f_hout = super::flags::f_hout(cols.s0.clone(), cols.s1.clone(), cols.s2.clone()); - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &OUTPUT_INDEX_TAGS, - &mut idx, - hasher_flag.clone() * controller_flag.clone() * f_hout * cols.node_index.clone(), - ); - - // ------------------------------------------------------------------------- - // Index Decomposition + Booleanity (on Merkle input rows) - // ------------------------------------------------------------------------- - // On controller input rows (s0=1), when any Merkle op is active: - // idx = 2 * idx_next + direction_bit - // direction_bit is binary - let f_merkle = super::flags::f_merkle_input(cols.s0.clone(), cols.s1.clone(), cols.s2.clone()); - - // Gate degree: hasher_flag(1) * controller_flag(1) * f_merkle(3) = 5 - let gate = hasher_flag.clone() * controller_flag.clone() * f_merkle; - - let mut idx = 0; - - // Index decomposition: idx - 2 * idx_next - direction_bit = 0 - // Constraint degree: gate(5) * diff(1) = 6 - tagged_assert_zero( - builder, - &MERKLE_INDEX_TAGS, - &mut idx, - gate.clone() - * (cols.node_index.clone() - - AB::Expr::TWO * cols_next.node_index.clone() - - cols.direction_bit.clone()), - ); - - // Direction bit booleanity: direction_bit * (1 - direction_bit) = 0 - // Constraint degree: gate(5) * direction_bit(1) * (1-direction_bit)(1) = 7 - tagged_assert_zero( - builder, - &MERKLE_INDEX_TAGS, - &mut idx, - gate * cols.direction_bit.clone() * (AB::Expr::ONE - cols.direction_bit.clone()), - ); - - // ------------------------------------------------------------------------- - // Sponge input node_index zero constraint - // ------------------------------------------------------------------------- - // On sponge (non-Merkle) input rows, node_index must be zero. - // f_sponge = s0 * (1-s1) * (1-s2): sponge-mode inputs don't use node_index. - let f_sponge = super::flags::f_sponge(cols.s0.clone(), cols.s1.clone(), cols.s2.clone()); - tagged_assert_zero( - builder, - &MERKLE_INDEX_TAGS, - &mut idx, - hasher_flag.clone() * controller_flag.clone() * f_sponge * cols.node_index.clone(), - ); - - // ------------------------------------------------------------------------- - // Cross-step Merkle index continuity (output_i -> input_{i+1}) - // ------------------------------------------------------------------------- - // On non-final controller output rows, if the next row is a Merkle input row, - // enforce idx_in_{i+1} == idx_out_i. - let f_output = (AB::Expr::ONE - cols.s0.clone()) * (AB::Expr::ONE - cols.s1.clone()); - - // NOTE: `f_merkle_next` is read from `cols_next` without an explicit `hasher_flag_next` gate. - // This is safe by construction: on local hasher controller rows (perm_seg=0), - // `enforce_perm_seg_constraints` enforces - // hasher_flag * (1 - hasher_flag_next) * (1 - perm_seg) = 0, - // so `hasher_flag_next = 1` whenever this continuity gate can be active. Thus `cols_next` - // selectors are guaranteed to belong to the hasher chiplet (not cross-chiplet garbage values). - let f_merkle_next = super::flags::f_merkle_input( - cols_next.s0.clone(), - cols_next.s1.clone(), - cols_next.s2.clone(), - ); - - // Gate degree: hasher_flag(1) * controller_flag(1) * f_output(2) * (1-is_boundary)(1) - // * f_merkle_next(3) = 8 - let continuity_gate = hasher_flag.clone() - * controller_flag.clone() - * f_output - * (AB::Expr::ONE - cols.is_boundary.clone()) - * f_merkle_next; - - // Index continuity: idx_next - idx = 0 - // Constraint degree: continuity_gate(8) * diff(1) = 9 - tagged_assert_zero( - builder, - &MERKLE_INDEX_TAGS, - &mut idx, - continuity_gate * (cols_next.node_index.clone() - cols.node_index.clone()), - ); -} - -/// Enforces capacity zeroing on Merkle input rows. -/// -/// On controller input rows for Merkle operations, all 4 capacity lanes h[8..12] must be zero. -/// This ensures each 2-to-1 compression in the Merkle path starts with a clean sponge capacity. -pub(super) fn enforce_merkle_input_state( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let controller_flag = cols.controller_flag(); - let f_merkle = super::flags::f_merkle_input(cols.s0.clone(), cols.s1.clone(), cols.s2.clone()); - - let gate = hasher_flag * controller_flag * f_merkle; - let cap = cols.capacity(); - - let mut idx = 0; - tagged_assert_zeros( - builder, - &MERKLE_INPUT_STATE_TAGS, - &mut idx, - MERKLE_CAP_NAMESPACE, - core::array::from_fn::<_, 4, _>(|i| gate.clone() * cap[i].clone()), - ); -} - -/// Enforces Merkle digest routing and direction_bit forward propagation. -/// -/// ## Forward Propagation -/// -/// On non-final output -> next-input Merkle boundaries, the direction_bit on the output row -/// must equal the direction_bit on the next input row. This makes `b_{i+1}` (the next step's -/// direction bit) available on the output row for digest routing. -/// -/// ## Digest Routing -/// -/// The digest from output_i (in rate0, `h[0..4]`) must appear in the correct rate half of -/// input_{i+1}, selected by direction_bit: -/// - `direction_bit = 0`: digest goes to rate0 of input_{i+1} (`h_next[j]`) -/// - `direction_bit = 1`: digest goes to rate1 of input_{i+1} (`h_next[4+j]`) -/// -/// Combined constraint for each j in 0..4: -/// ```text -/// gate * (h_next[j] - h[j] + direction_bit * (h_next[4+j] - h_next[j])) = 0 -/// ``` -/// -/// The gate uses a lightweight Merkle-next selector (`s1_next + s2_next`, degree 1) instead -/// of the full `f_merkle_input` (degree 3) to keep the routing constraints within the system's -/// max degree of 9. See inline comments for the soundness argument. -pub(super) fn enforce_merkle_digest_routing( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, - cols_next: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let controller_flag = cols.controller_flag(); - let f_output = (AB::Expr::ONE - cols.s0.clone()) * (AB::Expr::ONE - cols.s1.clone()); - - // Use a lower-degree Merkle-next selector to keep routing constraints within degree 8. - // - // `f_merkle_input` (degree 3) = `s0 * (s1 + s2 - s1*s2)` is too expensive here because - // the routing inner expression is degree 2 (involves direction_bit * state_diff), making - // the total `gate(8) * inner(2) = 10` which exceeds the system's max degree of 9. - // - // Instead we use `s1_next + s2_next` (degree 1): among input rows, this is nonzero - // exactly on Merkle inputs (MP: s1=0,s2=1; MV: s1=1,s2=0; MU: s1=1,s2=1) and zero on - // sponge inputs (s1=0,s2=0). The non-unit value on MU rows (s1+s2=2) is harmless: it - // only scales a constraint that is already zero when the routing is correct. - // - // Soundness note: a malicious prover could mislabel a Merkle input as sponge (s1=s2=0) - // to zero this selector and bypass routing. This is caught by the bus: any (1,0,0) input - // row unconditionally fires f_sponge_start or f_sponge_respan, generating a sponge bus - // message with a unique address that has no matching decoder request. - let merkle_next_lite = cols_next.s1.clone() + cols_next.s2.clone(); - - // Gate degree: hasher_flag(1) * controller_flag(1) * f_output(2) * (1-is_boundary)(1) - // * merkle_next_lite(1) = 6 - let gate = hasher_flag - * controller_flag - * f_output - * (AB::Expr::ONE - cols.is_boundary.clone()) - * merkle_next_lite; - - let mut idx = 0; - - // Forward propagation: direction_bit on output row = direction_bit on next input row. - // Constraint degree: gate(6) * diff(1) = 7 - tagged_assert_zero( - builder, - &MERKLE_ROUTING_TAGS, - &mut idx, - gate.clone() * (cols.direction_bit.clone() - cols_next.direction_bit.clone()), - ); - - // Digest routing: for each j in 0..4, enforce - // gate * ((1 - b) * (h_next[j] - h[j]) + b * (h_next[4+j] - h[j])) = 0 - // where b = direction_bit on the output row (= b_{i+1} via propagation). - // - // Expanding: gate * (h_next[j] - h[j] + b * (h_next[4+j] - h_next[j])) = 0 - // Constraint degree: gate(6) * inner(2) = 8 - let b = cols.direction_bit.clone(); - let rate0_curr = cols.rate0(); - let rate0_next = cols_next.rate0(); - let rate1_next = cols_next.rate1(); - - for j in 0..4 { - tagged_assert_zero( - builder, - &MERKLE_ROUTING_TAGS, - &mut idx, - gate.clone() - * (rate0_next[j].clone() - rate0_curr[j].clone() - + b.clone() * (rate1_next[j].clone() - rate0_next[j].clone())), - ); - } -} diff --git a/air/src/constraints/chiplets/hasher/mod.rs b/air/src/constraints/chiplets/hasher/mod.rs deleted file mode 100644 index 504d94e418..0000000000 --- a/air/src/constraints/chiplets/hasher/mod.rs +++ /dev/null @@ -1,369 +0,0 @@ -//! Hasher chiplet constraints. -//! -//! The hasher chiplet uses a dispatch/compute split architecture: -//! - The **hasher controller** (dispatch, `perm_seg=0`) records permutation requests as compact -//! (input, output) row pairs and responds to the chiplets bus. -//! - The **hasher permutation segment** (compute, `perm_seg=1`) executes Poseidon2 permutations as -//! 16-row cycles, one per unique input state. -//! -//! A LogUp perm-link bus on the shared `v_wiring` column binds the two regions. -//! -//! ## Sub-modules -//! -//! - [`flags`]: Operation flag computation functions (pure selector expressions) -//! - [`periodic`]: Periodic column definitions (cycle markers, round constants) -//! - [`selectors`]: Selector, structural, and lifecycle constraints -//! - [`state`]: Poseidon2 round transition constraints (permutation segment only) -//! - [`merkle`]: Merkle tree operation constraints (controller only) -//! -//! ## Column Layout (20 columns) -//! -//! | Column | Purpose | -//! |--------------|---------| -//! | s0, s1, s2 | Selectors (operation type / row type) | -//! | h[0..12) | Hasher state (RATE0, RATE1, CAP) | -//! | node_index | Merkle tree node index on controller rows; reused for request multiplicity on perm segment rows | -//! | mrupdate_id | Domain separator for sibling table | -//! | is_boundary | 1 on boundary rows (first input or last output) | -//! | direction_bit| Merkle direction bit (0 on non-Merkle / perm rows) | -//! | perm_seg | 0 = hasher controller, 1 = hasher permutation segment | - -pub mod flags; -pub mod merkle; -pub mod periodic; -pub mod selectors; -pub mod state; - -use miden_core::field::PrimeCharacteristicRing; -pub use periodic::{STATE_WIDTH, periodic_columns}; - -use crate::{ - Felt, MainTraceRow, - constraints::tagging::{ - TagGroup, TaggingAirBuilderExt, ids::TAG_CHIPLETS_BASE, tagged_assert_zero, - }, - trace::{ - CHIPLETS_OFFSET, - chiplets::{ - HASHER_DIRECTION_BIT_COL_IDX, HASHER_IS_BOUNDARY_COL_IDX, HASHER_MRUPDATE_ID_COL_IDX, - HASHER_NODE_INDEX_COL_IDX, HASHER_PERM_SEG_COL_IDX, HASHER_SELECTOR_COL_RANGE, - HASHER_STATE_COL_RANGE, - }, - }, -}; - -// TAGGING IDS -// ================================================================================================ - -// Tag IDs must follow constraint emission order (ascending) in enforce_hasher_constraints. -// Emission order: selector_bool -> perm_seg -> structural -> lifecycle -> controller_adj -// -> controller_pairing -> perm_steps(witness_shape,init_ext,ext,packed_int,int_ext) -// -> mrupdate -> sponge_cap -> output_idx -> merkle_index -> merkle_input_state -// -> merkle_routing -pub(super) const HASHER_BASE_ID: usize = TAG_CHIPLETS_BASE + 10; -pub(super) const HASHER_SELECTOR_BOOL_BASE_ID: usize = HASHER_BASE_ID; -pub(super) const HASHER_PERM_SEG_BASE_ID: usize = HASHER_SELECTOR_BOOL_BASE_ID + 3; -pub(super) const HASHER_STRUCTURAL_BASE_ID: usize = HASHER_PERM_SEG_BASE_ID + 7; -pub(super) const HASHER_LIFECYCLE_BASE_ID: usize = HASHER_STRUCTURAL_BASE_ID + 7; -pub(super) const HASHER_CONTROLLER_ADJ_BASE_ID: usize = HASHER_LIFECYCLE_BASE_ID + 2; -pub(super) const HASHER_CONTROLLER_PAIRING_BASE_ID: usize = HASHER_CONTROLLER_ADJ_BASE_ID + 2; -// 3 constraints: unused witness slots are zero outside the packed-int rows / int+ext row shape. -pub(super) const HASHER_PERM_WITNESS_SHAPE_BASE_ID: usize = HASHER_CONTROLLER_PAIRING_BASE_ID + 4; -pub(super) const HASHER_PERM_INIT_BASE_ID: usize = HASHER_PERM_WITNESS_SHAPE_BASE_ID + 3; -pub(super) const HASHER_PERM_EXT_BASE_ID: usize = HASHER_PERM_INIT_BASE_ID + STATE_WIDTH; -pub(super) const HASHER_PERM_INT_BASE_ID: usize = HASHER_PERM_EXT_BASE_ID + STATE_WIDTH; -// 15 constraints: 3 witness + 12 next-state -pub(super) const HASHER_PERM_INT_EXT_BASE_ID: usize = HASHER_PERM_INT_BASE_ID + 15; -// 13 constraints: 1 witness + 12 next-state -pub(super) const HASHER_MRUPDATE_ID_BASE_ID: usize = HASHER_PERM_INT_EXT_BASE_ID + 13; -pub(super) const HASHER_SPONGE_CAP_BASE_ID: usize = HASHER_MRUPDATE_ID_BASE_ID + 2; -pub(super) const HASHER_OUTPUT_IDX_ID: usize = HASHER_SPONGE_CAP_BASE_ID + 4; -pub(super) const HASHER_MERKLE_INDEX_BASE_ID: usize = HASHER_OUTPUT_IDX_ID + 1; -pub(super) const HASHER_MERKLE_INDEX_COUNT: usize = 4; -pub(super) const HASHER_MERKLE_INPUT_STATE_BASE_ID: usize = - HASHER_MERKLE_INDEX_BASE_ID + HASHER_MERKLE_INDEX_COUNT; -pub(super) const HASHER_MERKLE_ROUTING_BASE_ID: usize = HASHER_MERKLE_INPUT_STATE_BASE_ID + 4; -pub(super) const HASHER_MERKLE_ROUTING_COUNT: usize = 5; - -const OUTPUT_INDEX_NAMESPACE: &str = "chiplets.hasher.output.index"; -const MRUPDATE_NAMESPACE: &str = "chiplets.hasher.mrupdate_id"; - -const MRUPDATE_NAMES: [&str; 2] = [MRUPDATE_NAMESPACE; 2]; - -const MRUPDATE_TAGS: TagGroup = TagGroup { - base: HASHER_MRUPDATE_ID_BASE_ID, - names: &MRUPDATE_NAMES, -}; - -// HASHER COLUMNS -// ================================================================================================ - -/// Typed access to hasher chiplet columns. -pub struct HasherColumns { - pub s0: E, - pub s1: E, - pub s2: E, - pub state: [E; STATE_WIDTH], - pub node_index: E, - pub mrupdate_id: E, - pub is_boundary: E, - pub direction_bit: E, - pub perm_seg: E, -} - -// STATE REGION INDICES -// ================================================================================================ - -/// Start index of RATE0 region in the hasher state array. -const RATE0_START: usize = 0; -/// Start index of RATE1 region in the hasher state array. -const RATE1_START: usize = 4; -/// Start index of CAPACITY region in the hasher state array. -const CAPACITY_START: usize = 8; - -impl HasherColumns { - /// Extract hasher columns from a main trace row. - pub fn from_row(row: &MainTraceRow) -> Self - where - V: Into + Clone, - { - let s_start = HASHER_SELECTOR_COL_RANGE.start - CHIPLETS_OFFSET; - let h_start = HASHER_STATE_COL_RANGE.start - CHIPLETS_OFFSET; - let idx_col = HASHER_NODE_INDEX_COL_IDX - CHIPLETS_OFFSET; - let mrupdate_col = HASHER_MRUPDATE_ID_COL_IDX - CHIPLETS_OFFSET; - let is_boundary_col = HASHER_IS_BOUNDARY_COL_IDX - CHIPLETS_OFFSET; - let direction_bit_col = HASHER_DIRECTION_BIT_COL_IDX - CHIPLETS_OFFSET; - let perm_seg_col = HASHER_PERM_SEG_COL_IDX - CHIPLETS_OFFSET; - - HasherColumns { - s0: row.chiplets[s_start].clone().into(), - s1: row.chiplets[s_start + 1].clone().into(), - s2: row.chiplets[s_start + 2].clone().into(), - state: core::array::from_fn(|i| row.chiplets[h_start + i].clone().into()), - node_index: row.chiplets[idx_col].clone().into(), - mrupdate_id: row.chiplets[mrupdate_col].clone().into(), - is_boundary: row.chiplets[is_boundary_col].clone().into(), - direction_bit: row.chiplets[direction_bit_col].clone().into(), - perm_seg: row.chiplets[perm_seg_col].clone().into(), - } - } - - /// Returns the digest (first 4 state elements). Same as `rate0()` since the - /// Poseidon2 digest is always in the first rate word. - #[inline] - #[allow(dead_code)] - pub fn digest(&self) -> [E; 4] { - self.rate0() - } - - #[inline] - #[allow(dead_code)] - pub fn rate0(&self) -> [E; 4] { - core::array::from_fn(|i| self.state[RATE0_START + i].clone()) - } - - #[inline] - #[allow(dead_code)] - pub fn rate1(&self) -> [E; 4] { - core::array::from_fn(|i| self.state[RATE1_START + i].clone()) - } - - #[inline] - pub fn capacity(&self) -> [E; 4] { - core::array::from_fn(|i| self.state[CAPACITY_START + i].clone()) - } -} - -impl HasherColumns { - /// Returns the controller flag (1 on controller rows, 0 on perm segment rows). - #[inline] - pub fn controller_flag(&self) -> E { - E::ONE - self.perm_seg.clone() - } -} - -// ENTRY POINT -// ================================================================================================ - -/// Enforce all hasher chiplet constraints. -/// -/// The hasher chiplet is active when `chiplets[0] = 0` (i.e., `!s0` at the chiplet level). -pub fn enforce_hasher_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: TaggingAirBuilderExt, -{ - let periodic: [AB::PeriodicVar; periodic::NUM_PERIODIC_COLUMNS] = { - let periodic = builder.periodic_values(); - debug_assert!( - periodic.len() >= periodic::NUM_PERIODIC_COLUMNS, - "not enough periodic values for hasher constraints" - ); - core::array::from_fn(|i| periodic[i]) - }; - - let hasher_flag: AB::Expr = AB::Expr::ONE - local.chiplets[0].clone().into(); - let cols: HasherColumns = HasherColumns::from_row(local); - let cols_next: HasherColumns = HasherColumns::from_row(next); - - // --- Selector booleanity (controller rows only; perm segment selectors are don't-care) --- - selectors::enforce_selector_booleanity(builder, hasher_flag.clone(), &cols); - - // --- perm_seg constraints --- - let hasher_flag_next: AB::Expr = - AB::Expr::ONE - Into::::into(next.chiplets[0].clone()); - // Derive (1 - cycle_row_15) = selector_sum. The boundary row (row 15) is the - // only row where all 4 selectors are 0. The perm_seg constraints use this in the - // form (1 - cycle_row_N) to gate multiplicity constancy and cycle alignment. - let selector_sum: AB::Expr = Into::::into(periodic[periodic::P_IS_INIT_EXT]) - + Into::::into(periodic[periodic::P_IS_EXT]) - + Into::::into(periodic[periodic::P_IS_PACKED_INT]) - + Into::::into(periodic[periodic::P_IS_INT_EXT]); - selectors::enforce_perm_seg_constraints( - builder, - hasher_flag.clone(), - hasher_flag_next, - &cols, - &cols_next, - selector_sum, - ); - - // --- Structural confinement (is_boundary, direction_bit) --- - selectors::enforce_structural_confinement(builder, hasher_flag.clone(), &cols); - - // --- Lifecycle booleanity --- - selectors::enforce_lifecycle_booleanity(builder, hasher_flag.clone(), &cols); - - // --- Controller adjacency (input -> output) --- - selectors::enforce_controller_adjacency(builder, hasher_flag.clone(), &cols, &cols_next); - - // --- Controller pairing (first-row boundary + output non-adjacency) --- - selectors::enforce_controller_pairing(builder, hasher_flag.clone(), &cols, &cols_next); - - // --- Permutation step constraints (perm segment only) --- - // Gate by perm_seg alone (degree 1), NOT hasher_flag * perm_seg (degree 2). - // This is sound because `enforce_perm_seg_constraints` explicitly confines perm_seg to - // hasher rows: (1 - hasher_flag) * perm_seg = 0. Keeping the gate at degree 1 is critical: - // the S-box has degree 7, and with the periodic selector (degree 1), the total constraint - // degree is 1 + 1 + 7 = 9, which matches the system's max degree. - let perm_gate = cols.perm_seg.clone(); - // On permutation rows, s0/s1/s2 serve as witness columns for packed internal rounds. - let witnesses: [AB::Expr; 3] = [cols.s0.clone(), cols.s1.clone(), cols.s2.clone()]; - state::enforce_permutation_steps( - builder, - perm_gate, - &cols.state, - &cols_next.state, - &witnesses, - &periodic, - ); - - // --- mrupdate_id constraints --- - enforce_mrupdate_id_constraints(builder, hasher_flag.clone(), &cols, &cols_next); - - // --- Sponge capacity preservation --- - enforce_respan_capacity(builder, hasher_flag.clone(), next, &cols, &cols_next); - - // --- Tree constraints --- - merkle::enforce_node_index_constraints(builder, hasher_flag.clone(), &cols, &cols_next); - merkle::enforce_merkle_input_state(builder, hasher_flag.clone(), &cols); - merkle::enforce_merkle_digest_routing(builder, hasher_flag, &cols, &cols_next); -} - -// INTERNAL CONSTRAINT FUNCTIONS -// ================================================================================================ - -/// Enforces mrupdate_id progression and zero-on-perm constraints. -/// -/// On controller rows: mrupdate_id increments by 1 on MV start rows, stays constant otherwise. -/// On perm segment rows: mrupdate_id must be zero. -fn enforce_mrupdate_id_constraints( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, - cols_next: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let controller_flag = cols.controller_flag(); - let controller_flag_next = cols_next.controller_flag(); - - // f_mv_start_next: MV input on next row with is_boundary=1. - let f_mv_next = flags::f_mv(cols_next.s0.clone(), cols_next.s1.clone(), cols_next.s2.clone()); - let f_mv_start_next = f_mv_next * cols_next.is_boundary.clone(); - - // On controller->controller transitions: id_next = id + f_mv_start_next. - // controller_flag_next in the outer gate prevents firing at the controller->perm boundary. - // Degree 7: hasher_flag(1) * controller_flag(1) * controller_flag_next(1) - // * (id_next - id - f_mv_start_next) where f_mv_start is degree 4. - let mut idx = 0; - tagged_assert_zero( - builder, - &MRUPDATE_TAGS, - &mut idx, - hasher_flag.clone() - * controller_flag - * controller_flag_next - * (cols_next.mrupdate_id.clone() - cols.mrupdate_id.clone() - f_mv_start_next), - ); - - // On perm segment rows: mrupdate_id = 0 - // Degree 3: hasher_flag(1) * perm_seg(1) * mrupdate_id(1). - tagged_assert_zero( - builder, - &MRUPDATE_TAGS, - &mut idx, - hasher_flag * cols.perm_seg.clone() * cols.mrupdate_id.clone(), - ); -} - -/// Enforces capacity preservation across LINEAR_HASH continuation boundaries. -/// -/// When the next row is a LINEAR_HASH continuation input (f_sponge_next=1, is_boundary_next=0), -/// the capacity h[8..12] must be preserved from the current row to the next. -/// -/// ## Gate (degree 7) -/// -/// `hasher_flag * hasher_flag_next * f_sponge_next * (1 - is_boundary_next)` * state_diff -/// -/// - `hasher_flag_next` ensures the next row's columns are hasher columns (not garbage from another -/// chiplet at a boundary). -/// - `f_sponge_next` is needed to restrict to LINEAR_HASH continuations only. -fn enforce_respan_capacity( - builder: &mut AB, - hasher_flag: AB::Expr, - next: &MainTraceRow, - cols: &HasherColumns, - cols_next: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - // hasher_flag_next: next row is also a hasher row - let hasher_flag_next: AB::Expr = - AB::Expr::ONE - Into::::into(next.chiplets[0].clone()); - - // f_sponge_next: next row is a sponge-mode controller input (s0=1, s1=0, s2=0). - // Must also check controller_flag_next because on perm rows s0/s1/s2 hold witness - // values (not selectors), and a witness could accidentally match the sponge pattern. - let controller_flag_next = cols_next.controller_flag(); - let f_sponge_next = - flags::f_sponge(cols_next.s0.clone(), cols_next.s1.clone(), cols_next.s2.clone()); - - // Gate degree: hasher_flag(1) * hasher_flag_next(1) * controller_flag_next(1) - // * f_sponge_next(3) * (1-is_boundary)(1) = 7. - // Constraint degree: gate(7) * state_diff(1) = 8. - let gate = hasher_flag - * hasher_flag_next - * controller_flag_next - * f_sponge_next - * (AB::Expr::ONE - cols_next.is_boundary.clone()); - - state::enforce_respan_capacity_preservation( - builder, - gate, - &cols.capacity(), - &cols_next.capacity(), - ); -} diff --git a/air/src/constraints/chiplets/hasher/periodic.rs b/air/src/constraints/chiplets/hasher/periodic.rs deleted file mode 100644 index 210f5b0dc9..0000000000 --- a/air/src/constraints/chiplets/hasher/periodic.rs +++ /dev/null @@ -1,281 +0,0 @@ -//! Hasher chiplet periodic columns. -//! -//! This module defines the periodic columns used by the Poseidon2 hasher chiplet. -//! The hasher operates on a 16-row cycle, and periodic columns provide cycle-position -//! selectors and round constants. -//! -//! ## Column Layout (16 columns, period 16) -//! -//! | Index | Name | Description | -//! |-------|----------------|-------------| -//! | 0 | is_init_ext | 1 on row 0 (init linear + first external round) | -//! | 1 | is_ext | 1 on rows 1-3, 12-14 (single external round) | -//! | 2 | is_packed_int | 1 on rows 4-10 (3 packed internal rounds) | -//! | 3 | is_int_ext | 1 on row 11 (int22 + ext5 merged) | -//! | 4-15 | ark[0..12] | Shared round constants (see below) | -//! -//! ## Round Constant Sharing -//! -//! The 12 `ark` columns carry external round constants on external rows (0-3, 11-14) -//! and internal round constants in `ark[0..2]` on packed-internal rows (4-10). -//! Different constraints read them with different semantics, gated by the mutually -//! exclusive selectors. Row 11's internal constant (ARK_INT[21]) is hardcoded in the -//! constraint rather than stored in a periodic column. -//! -//! ## Derived Expressions -//! -//! `cycle_row_15` (the boundary row marker) is not stored as a column. Instead: -//! ```text -//! 1 - cycle_row_15 = is_init_ext + is_ext + is_packed_int + is_int_ext -//! ``` -//! The perm_seg constraints always use it in the form `(1 - cycle_row_N)`. -//! -//! ## 16-Row Schedule -//! -//! ```text -//! Row Transition Selectors active -//! 0 init + ext1 is_init_ext -//! 1 ext2 is_ext -//! 2 ext3 is_ext -//! 3 ext4 is_ext -//! 4 int1+int2+int3 is_packed_int -//! 5 int4+int5+int6 is_packed_int -//! 6 int7+int8+int9 is_packed_int -//! 7 int10+int11+int12 is_packed_int -//! 8 int13+int14+int15 is_packed_int -//! 9 int16+int17+int18 is_packed_int -//! 10 int19+int20+int21 is_packed_int -//! 11 int22+ext5 is_int_ext -//! 12 ext6 is_ext -//! 13 ext7 is_ext -//! 14 ext8 is_ext -//! 15 boundary (none) -//! ``` - -use alloc::vec::Vec; - -use miden_core::chiplets::hasher::Hasher; - -use crate::Felt; - -// CONSTANTS -// ================================================================================================ - -/// Length of one hash cycle (16 rows: 15 transitions + 1 boundary). -pub const HASH_CYCLE_LEN: usize = 16; - -/// Width of the hasher state. -pub const STATE_WIDTH: usize = 12; - -// Periodic column indices. - -/// 1 on row 0 (init linear + first external round). -pub const P_IS_INIT_EXT: usize = 0; - -/// 1 on rows 1-3, 12-14 (single external round). -pub const P_IS_EXT: usize = 1; - -/// 1 on rows 4-10 (3 packed internal rounds). -pub const P_IS_PACKED_INT: usize = 2; - -/// 1 on row 11 (int22 + ext5 merged). -pub const P_IS_INT_EXT: usize = 3; - -/// Start of the 12 shared round constant columns. -pub const P_ARK_START: usize = 4; - -/// Total number of periodic columns for the hasher chiplet. -pub const NUM_PERIODIC_COLUMNS: usize = P_ARK_START + STATE_WIDTH; - -// INTERNAL HELPERS -// ================================================================================================ - -/// Returns periodic columns for the Poseidon2 hasher chiplet. -/// -/// All columns repeat every 16 rows, matching one permutation cycle. -/// -/// The 4 selector columns identify the row type. The 12 ark columns carry either -/// external round constants (on external rows) or internal round constants in -/// `ark[0..2]` (on packed-internal rows). See module docs for the full mapping. -#[allow(clippy::needless_range_loop)] -pub fn periodic_columns() -> Vec> { - let mut cols: Vec> = Vec::with_capacity(NUM_PERIODIC_COLUMNS); - - // ------------------------------------------------------------------------- - // Selectors - // ------------------------------------------------------------------------- - let mut is_init_ext = vec![Felt::ZERO; HASH_CYCLE_LEN]; - let mut is_ext = vec![Felt::ZERO; HASH_CYCLE_LEN]; - let mut is_packed_int = vec![Felt::ZERO; HASH_CYCLE_LEN]; - let mut is_int_ext = vec![Felt::ZERO; HASH_CYCLE_LEN]; - - is_init_ext[0] = Felt::ONE; - - for r in [1, 2, 3, 12, 13, 14] { - is_ext[r] = Felt::ONE; - } - - for r in 4..=10 { - is_packed_int[r] = Felt::ONE; - } - - is_int_ext[11] = Felt::ONE; - - cols.push(is_init_ext); - cols.push(is_ext); - cols.push(is_packed_int); - cols.push(is_int_ext); - - // ------------------------------------------------------------------------- - // Shared round constants (12 columns) - // ------------------------------------------------------------------------- - // On external rows (0-3, 11-14): hold per-lane external round constants. - // On packed-internal rows (4-10): ark[0..2] hold 3 internal round constants, - // ark[3..12] are zero. - // On boundary (row 15): all zero. - for lane in 0..STATE_WIDTH { - let mut col = vec![Felt::ZERO; HASH_CYCLE_LEN]; - - // Row 0 (init+ext1): first initial external round constants - col[0] = Hasher::ARK_EXT_INITIAL[0][lane]; - - // Rows 1-3 (ext2, ext3, ext4): remaining initial external round constants - for r in 1..=3 { - col[r] = Hasher::ARK_EXT_INITIAL[r][lane]; - } - - // Rows 4-10 (packed internal): internal constants in lanes 0-2 only - if lane < 3 { - for triple in 0..7_usize { - let row = 4 + triple; - let ark_idx = triple * 3 + lane; - col[row] = Hasher::ARK_INT[ark_idx]; - } - } - - // Row 11 (int22+ext5): terminal external round 0 constants - // (internal constant ARK_INT[21] is hardcoded in the constraint) - col[11] = Hasher::ARK_EXT_TERMINAL[0][lane]; - - // Rows 12-14 (ext6, ext7, ext8): remaining terminal external round constants - for r in 12..=14 { - col[r] = Hasher::ARK_EXT_TERMINAL[r - 11][lane]; - } - - cols.push(col); - } - - cols -} - -#[cfg(test)] -#[allow(clippy::needless_range_loop)] -mod tests { - use super::*; - - #[test] - fn periodic_columns_dimensions() { - let cols = periodic_columns(); - assert_eq!(cols.len(), NUM_PERIODIC_COLUMNS); - for col in &cols { - assert_eq!(col.len(), HASH_CYCLE_LEN); - } - } - - #[test] - fn selectors_are_exclusive_and_cover_rows_0_to_14() { - let cols = periodic_columns(); - for row in 0..HASH_CYCLE_LEN { - let init = cols[P_IS_INIT_EXT][row]; - let ext = cols[P_IS_EXT][row]; - let packed = cols[P_IS_PACKED_INT][row]; - let intx = cols[P_IS_INT_EXT][row]; - - // Booleanity - for &v in &[init, ext, packed, intx] { - assert_eq!(v * (v - Felt::ONE), Felt::ZERO, "non-boolean at row {row}"); - } - - // Mutual exclusivity - let sum = init + ext + packed + intx; - if row < 15 { - assert_eq!(sum, Felt::ONE, "selector sum != 1 at row {row}"); - } else { - assert_eq!(sum, Felt::ZERO, "selector sum != 0 at boundary row {row}"); - } - - // Correct row type - match row { - 0 => assert_eq!(init, Felt::ONE), - 1..=3 | 12..=14 => assert_eq!(ext, Felt::ONE), - 4..=10 => assert_eq!(packed, Felt::ONE), - 11 => assert_eq!(intx, Felt::ONE), - 15 => assert_eq!(sum, Felt::ZERO), - _ => unreachable!(), - } - } - } - - #[test] - fn external_round_constants_correct() { - let cols = periodic_columns(); - - // Row 0: ARK_EXT_INITIAL[0] - for lane in 0..STATE_WIDTH { - assert_eq!(cols[P_ARK_START + lane][0], Hasher::ARK_EXT_INITIAL[0][lane]); - } - - // Rows 1-3: ARK_EXT_INITIAL[1..3] - for r in 1..=3 { - for lane in 0..STATE_WIDTH { - assert_eq!(cols[P_ARK_START + lane][r], Hasher::ARK_EXT_INITIAL[r][lane]); - } - } - - // Row 11: ARK_EXT_TERMINAL[0] - for lane in 0..STATE_WIDTH { - assert_eq!(cols[P_ARK_START + lane][11], Hasher::ARK_EXT_TERMINAL[0][lane]); - } - - // Rows 12-14: ARK_EXT_TERMINAL[1..3] - for r in 12..=14 { - for lane in 0..STATE_WIDTH { - assert_eq!(cols[P_ARK_START + lane][r], Hasher::ARK_EXT_TERMINAL[r - 11][lane]); - } - } - } - - #[test] - fn internal_round_constants_correct() { - let cols = periodic_columns(); - - // Rows 4-10: packed internal round constants in ark[0..2] - for triple in 0..7_usize { - let row = 4 + triple; - for k in 0..3 { - let ark_idx = triple * 3 + k; - assert_eq!( - cols[P_ARK_START + k][row], - Hasher::ARK_INT[ark_idx], - "mismatch at row {row}, int constant {k} (ARK_INT[{ark_idx}])" - ); - } - // ark[3..12] must be zero on packed-internal rows - for lane in 3..STATE_WIDTH { - assert_eq!( - cols[P_ARK_START + lane][row], - Felt::ZERO, - "ark[{lane}] nonzero at packed-int row {row}" - ); - } - } - } - - #[test] - fn boundary_row_all_zero() { - let cols = periodic_columns(); - for col_idx in P_ARK_START..NUM_PERIODIC_COLUMNS { - assert_eq!(cols[col_idx][15], Felt::ZERO, "ark column {col_idx} nonzero at row 15"); - } - } -} diff --git a/air/src/constraints/chiplets/hasher/selectors.rs b/air/src/constraints/chiplets/hasher/selectors.rs deleted file mode 100644 index 975bd78486..0000000000 --- a/air/src/constraints/chiplets/hasher/selectors.rs +++ /dev/null @@ -1,415 +0,0 @@ -//! Hasher chiplet selector and structural constraints. -//! -//! In the controller/permutation split architecture, this module enforces: -//! -//! 1. **Selector booleanity**: s0, s1, s2 are binary -//! 2. **Controller adjacency**: input row (s0=1) must be followed by output row (s0=0, s1=0) -//! 3. **Perm segment selectors**: unconstrained (don't-care); all perm logic uses perm_seg + -//! periodic columns -//! 4. **Perm segment booleanity and monotonicity**: perm_seg is binary and non-decreasing -//! 5. **Structural confinement**: is_boundary/direction_bit confined to correct row types -//! 6. **Lifecycle booleanity**: is_boundary is binary on boundary row types - -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::AirBuilder; - -use super::HasherColumns; -use crate::{ - Felt, - constraints::tagging::{ - TagGroup, TaggingAirBuilderExt, tagged_assert_zero, tagged_assert_zero_integrity, - tagged_assert_zeros, tagged_assert_zeros_integrity, - }, -}; - -// TAGGING NAMESPACES -// ================================================================================================ - -const SELECTOR_BOOL_NAMESPACE: &str = "chiplets.hasher.selectors.binary"; -const CONTROLLER_ADJ_NAMESPACE: &str = "chiplets.hasher.selectors.adjacency"; -const CONTROLLER_PAIRING_NAMESPACE: &str = "chiplets.hasher.selectors.pairing"; -const PERM_SEG_NAMESPACE: &str = "chiplets.hasher.selectors.perm_seg"; -const STRUCTURAL_NAMESPACE: &str = "chiplets.hasher.selectors.structural"; -const LIFECYCLE_NAMESPACE: &str = "chiplets.hasher.selectors.lifecycle"; - -const SELECTOR_BOOL_NAMES: [&str; 3] = [SELECTOR_BOOL_NAMESPACE; 3]; -const PERM_SEG_NAMES: [&str; 7] = [PERM_SEG_NAMESPACE; 7]; -const STRUCTURAL_NAMES: [&str; 7] = [STRUCTURAL_NAMESPACE; 7]; -const LIFECYCLE_NAMES: [&str; 2] = [LIFECYCLE_NAMESPACE; 2]; -const CONTROLLER_ADJ_NAMES: [&str; 2] = [CONTROLLER_ADJ_NAMESPACE; 2]; -const CONTROLLER_PAIRING_NAMES: [&str; 4] = [CONTROLLER_PAIRING_NAMESPACE; 4]; - -const SELECTOR_BOOL_TAGS: TagGroup = TagGroup { - base: super::HASHER_SELECTOR_BOOL_BASE_ID, - names: &SELECTOR_BOOL_NAMES, -}; -const PERM_SEG_TAGS: TagGroup = TagGroup { - base: super::HASHER_PERM_SEG_BASE_ID, - names: &PERM_SEG_NAMES, -}; -const STRUCTURAL_TAGS: TagGroup = TagGroup { - base: super::HASHER_STRUCTURAL_BASE_ID, - names: &STRUCTURAL_NAMES, -}; -const LIFECYCLE_TAGS: TagGroup = TagGroup { - base: super::HASHER_LIFECYCLE_BASE_ID, - names: &LIFECYCLE_NAMES, -}; -const CONTROLLER_ADJ_TAGS: TagGroup = TagGroup { - base: super::HASHER_CONTROLLER_ADJ_BASE_ID, - names: &CONTROLLER_ADJ_NAMES, -}; -const CONTROLLER_PAIRING_TAGS: TagGroup = TagGroup { - base: super::HASHER_CONTROLLER_PAIRING_BASE_ID, - names: &CONTROLLER_PAIRING_NAMES, -}; - -// CONSTRAINT FUNCTIONS -// ================================================================================================ - -/// Enforces that selector columns are binary on controller rows. -/// -/// On perm segment rows (perm_seg=1), selectors s0/s1/s2 are unconstrained (don't-care) -/// because no consumer reads them in a security-relevant way -- all perm segment logic -/// uses `perm_seg` + periodic columns instead. -pub fn enforce_selector_booleanity( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let controller_gate = hasher_flag * cols.controller_flag(); - let mut idx = 0; - tagged_assert_zeros_integrity( - builder, - &SELECTOR_BOOL_TAGS, - &mut idx, - SELECTOR_BOOL_NAMESPACE, - [ - controller_gate.clone() * cols.s0.clone() * (cols.s0.clone() - AB::Expr::ONE), - controller_gate.clone() * cols.s1.clone() * (cols.s1.clone() - AB::Expr::ONE), - controller_gate * cols.s2.clone() * (cols.s2.clone() - AB::Expr::ONE), - ], - ); -} - -/// Enforces controller row adjacency: input row must be followed by output row. -/// -/// When perm_seg=0 and s0=1 (controller input row), the next row must have s0=0 and s1=0 -/// (controller output row). -/// -/// Constraints: -/// - `controller_flag * s0 * s0_next = 0` (next s0 must be 0) -/// - `controller_flag * s0 * s1_next = 0` (next s1 must be 0) -pub fn enforce_controller_adjacency( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, - cols_next: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let gate = hasher_flag * cols.controller_flag() * cols.s0.clone(); - - let mut idx = 0; - tagged_assert_zeros( - builder, - &CONTROLLER_ADJ_TAGS, - &mut idx, - CONTROLLER_ADJ_NAMESPACE, - [gate.clone() * cols_next.s0.clone(), gate * cols_next.s1.clone()], - ); -} - -/// Enforces perm_seg booleanity, segment ordering, and cycle alignment. -/// -/// Constraints: -/// - `(1 - hasher_flag) * perm_seg = 0` (perm_seg can only be non-zero on hasher rows) -/// - `hasher_flag * perm_seg * (perm_seg - 1) = 0` (booleanity) -/// - `hasher_flag * hasher_flag_next * perm_seg * (1 - perm_seg_next) = 0` (monotonicity: once 1, -/// stays 1 within hasher rows) -/// - `hasher_flag * hasher_flag_next * (1 - perm_seg) * perm_seg_next * not_boundary = 0` (0->1 -/// transition can happen only after the cycle boundary row) -/// - `hasher_flag * (1 - hasher_flag_next) * perm_seg * not_boundary = 0` (if hasher ends while in -/// perm segment, it must end on the cycle boundary row) -/// - `hasher_flag * (1 - hasher_flag_next) * (1 - perm_seg) = 0` (hasher region cannot end while -/// still in controller section) -/// - `hasher_flag * perm_seg * not_boundary * (node_index_next - node_index) = 0` (multiplicity is -/// constant within a permutation cycle) -/// -/// The `not_boundary` parameter equals `(1 - cycle_row_15)`, derived as the sum of -/// the 4 periodic step-type selectors. It is 1 on rows 0-14 and 0 on row 15. -/// -/// The controller region (perm_seg=0) precedes the permutation segment (perm_seg=1). -/// Once perm_seg transitions to 1, it cannot go back to 0. -pub fn enforce_perm_seg_constraints( - builder: &mut AB, - hasher_flag: AB::Expr, - hasher_flag_next: AB::Expr, - cols: &HasherColumns, - cols_next: &HasherColumns, - not_boundary: AB::Expr, -) where - AB: TaggingAirBuilderExt, -{ - let mut idx = 0; - - // Confinement: perm_seg can only be non-zero on hasher rows. This makes `perm_seg` - // a sound stand-alone gate for permutation constraints, without multiplying by - // `hasher_flag` in the high-degree Poseidon2 transition constraints. - tagged_assert_zero_integrity( - builder, - &PERM_SEG_TAGS, - &mut idx, - (AB::Expr::ONE - hasher_flag.clone()) * cols.perm_seg.clone(), - ); - - // Booleanity - tagged_assert_zero_integrity( - builder, - &PERM_SEG_TAGS, - &mut idx, - hasher_flag.clone() * cols.perm_seg.clone() * (cols.perm_seg.clone() - AB::Expr::ONE), - ); - - // Monotonicity: once in perm segment (perm_seg=1), cannot return to controller (perm_seg=0). - // Gate by hasher_flag_next to avoid firing at the hasher-to-bitwise boundary, where - // perm_seg_next reads garbage from the next chiplet's columns. - tagged_assert_zero( - builder, - &PERM_SEG_TAGS, - &mut idx, - hasher_flag.clone() - * hasher_flag_next.clone() - * cols.perm_seg.clone() - * (AB::Expr::ONE - cols_next.perm_seg.clone()), - ); - - // Rising-edge alignment: entering perm segment (0->1) can happen only after the cycle - // boundary row (row 15). This ensures the first perm row is aligned with cycle row 0. - tagged_assert_zero( - builder, - &PERM_SEG_TAGS, - &mut idx, - hasher_flag.clone() - * hasher_flag_next.clone() - * (AB::Expr::ONE - cols.perm_seg.clone()) - * cols_next.perm_seg.clone() - * not_boundary.clone(), - ); - - // Exit safety: if the hasher segment ends while in perm segment, the last hasher row must - // be the cycle boundary row (row 15). This prevents cross-chiplet next-row reads from - // firing under perm gates. - tagged_assert_zero( - builder, - &PERM_SEG_TAGS, - &mut idx, - hasher_flag.clone() - * (AB::Expr::ONE - hasher_flag_next.clone()) - * cols.perm_seg.clone() - * not_boundary.clone(), - ); - - // If the hasher segment ends, it must not end while still in the controller section. - tagged_assert_zero( - builder, - &PERM_SEG_TAGS, - &mut idx, - hasher_flag.clone() - * (AB::Expr::ONE - hasher_flag_next) - * (AB::Expr::ONE - cols.perm_seg.clone()), - ); - - // Multiplicity constancy within perm cycles: on perm segment rows that are NOT the - // cycle boundary (row 15), node_index must stay constant. This ensures each 16-row - // cycle has a single multiplicity value. - // Degree: hasher_flag(1) * perm_seg(1) * not_boundary(1) * diff(1) = 4. - tagged_assert_zero( - builder, - &PERM_SEG_TAGS, - &mut idx, - hasher_flag - * cols.perm_seg.clone() - * not_boundary - * (cols_next.node_index.clone() - cols.node_index.clone()), - ); -} - -/// Ensures is_boundary and direction_bit are zero where they should not be active. -/// -/// is_boundary can only be non-zero on controller input and output rows: -/// - zero on padding rows: `(1-s0) * s1 * is_boundary = 0` -/// - zero on perm segment rows: `perm_seg * is_boundary = 0` -/// -/// direction_bit can only be non-zero on Merkle input/output controller rows: -/// - zero on padding rows: `(1-s0) * s1 * direction_bit = 0` -/// - zero on perm segment rows: `perm_seg * direction_bit = 0` -/// - zero on sponge (LINEAR_HASH) input rows: `f_sponge * direction_bit = 0` -/// - zero on RETURN_HASH output rows: `f_hout * direction_bit = 0` -/// - zero on HPERM final output (RETURN_STATE with is_boundary=1): `f_sout * is_boundary * -/// direction_bit = 0` -/// -/// This keeps direction_bit unconstrained only where it is semantically needed: Merkle -/// input rows and non-final Merkle RETURN_STATE output rows. -pub fn enforce_structural_confinement( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let f_sponge = - cols.s0.clone() * (AB::Expr::ONE - cols.s1.clone()) * (AB::Expr::ONE - cols.s2.clone()); - let f_hout = (AB::Expr::ONE - cols.s0.clone()) - * (AB::Expr::ONE - cols.s1.clone()) - * (AB::Expr::ONE - cols.s2.clone()); - let f_sout = - (AB::Expr::ONE - cols.s0.clone()) * (AB::Expr::ONE - cols.s1.clone()) * cols.s2.clone(); - - let mut idx = 0; - tagged_assert_zeros_integrity( - builder, - &STRUCTURAL_TAGS, - &mut idx, - STRUCTURAL_NAMESPACE, - [ - // is_boundary zero on padding rows (s0=0, s1=1) - hasher_flag.clone() - * (AB::Expr::ONE - cols.s0.clone()) - * cols.s1.clone() - * cols.is_boundary.clone(), - // is_boundary zero on perm segment rows - hasher_flag.clone() * cols.perm_seg.clone() * cols.is_boundary.clone(), - // direction_bit zero on padding rows (s0=0, s1=1) - hasher_flag.clone() - * (AB::Expr::ONE - cols.s0.clone()) - * cols.s1.clone() - * cols.direction_bit.clone(), - // direction_bit zero on perm segment rows - hasher_flag.clone() * cols.perm_seg.clone() * cols.direction_bit.clone(), - // direction_bit zero on sponge (LINEAR_HASH) input rows - hasher_flag.clone() * cols.controller_flag() * f_sponge * cols.direction_bit.clone(), - // direction_bit zero on RETURN_HASH rows - hasher_flag.clone() * cols.controller_flag() * f_hout * cols.direction_bit.clone(), - // direction_bit zero on final RETURN_STATE boundary rows (HPERM final output) - hasher_flag - * cols.controller_flag() - * f_sout - * cols.is_boundary.clone() - * cols.direction_bit.clone(), - ], - ); -} - -/// Enforces booleanity of is_boundary on input and output row types. -/// -/// The structural confinement constraints already ensure is_boundary=0 on padding and perm -/// rows, so booleanity only needs to fire on input and output rows: -/// -/// - `hasher_flag * s0 * is_boundary * (is_boundary - 1) = 0` (on input rows) -/// - `hasher_flag * (1-s0) * (1-s1) * is_boundary * (is_boundary - 1) = 0` (on output rows) -pub fn enforce_lifecycle_booleanity( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - let mut idx = 0; - tagged_assert_zeros_integrity( - builder, - &LIFECYCLE_TAGS, - &mut idx, - LIFECYCLE_NAMESPACE, - [ - // is_boundary booleanity on input rows (degree 4: hasher * s0 * is_boundary * - // (is_boundary-1)) - hasher_flag.clone() - * cols.s0.clone() - * cols.is_boundary.clone() - * (cols.is_boundary.clone() - AB::Expr::ONE), - // is_boundary booleanity on output rows (degree 5: hasher * (1-s0) * (1-s1) * - // is_boundary * (is_boundary-1)) - hasher_flag - * (AB::Expr::ONE - cols.s0.clone()) - * (AB::Expr::ONE - cols.s1.clone()) - * cols.is_boundary.clone() - * (cols.is_boundary.clone() - AB::Expr::ONE), - ], - ); -} - -/// Enforces well-formed controller structure. -/// -/// 1. **First-row boundary**: first row is a controller input (`s0=1`, `perm_seg=0`). -/// -/// 2. **Output non-adjacency**: A controller output row cannot be followed by another output row. -/// Combined with the adjacency constraint (input -> output), this guarantees strictly -/// alternating (input, output) pairs. -/// -/// 3-4. **Padding stability**: Once a padding row appears (s0=0, s1=1, perm_seg=0), the next -/// controller row must also be padding. This prevents operations from appearing after padding. -/// Specifically: (3) blocks input rows (s0_next=1) and (4) blocks output rows (s1_next=0) -/// after padding within the controller region. -pub fn enforce_controller_pairing( - builder: &mut AB, - hasher_flag: AB::Expr, - cols: &HasherColumns, - cols_next: &HasherColumns, -) where - AB: TaggingAirBuilderExt, -{ - // 1. First-row boundary: row 0 must be a controller input row. - // Enforce both s0=1 and perm_seg=0 in a single constraint: - // s0 * (1 - perm_seg) = 1. - // - // This is stronger than (1 - s0) + perm_seg = 0 as s0 can carry witness - // values on permutation rows: if perm_seg=1 the left-hand side is 0, so the - // constraint cannot be satisfied; thus perm_seg=0 and s0=1. - builder.tagged(CONTROLLER_PAIRING_TAGS.base, CONTROLLER_PAIRING_NAMES[0], |builder| { - builder - .when_first_row() - .when(hasher_flag.clone()) - .assert_zero(cols.s0.clone() * (AB::Expr::ONE - cols.perm_seg.clone()) - AB::Expr::ONE); - }); - - // 2. Output non-adjacency: output row cannot be followed by another output row. - // Degree: 7 (hasher * ctrl * (1-s0) * (1-s1) * ctrl_next * (1-s0_next) * (1-s1_next)) - let output_flag = hasher_flag.clone() - * cols.controller_flag() - * (AB::Expr::ONE - cols.s0.clone()) - * (AB::Expr::ONE - cols.s1.clone()); - let next_is_output = cols_next.controller_flag() - * (AB::Expr::ONE - cols_next.s0.clone()) - * (AB::Expr::ONE - cols_next.s1.clone()); - let mut idx = 1; // skip index 0 (used by first-row above) - tagged_assert_zero(builder, &CONTROLLER_PAIRING_TAGS, &mut idx, output_flag * next_is_output); - - // 3-4. Padding stability: a padding row (perm_seg=0, s0=0, s1=1) can only be followed - // by another padding row or a perm segment row. This is enforced with two constraints: - // (3) no input row after padding: padding_flag * (1-perm_seg_next) * s0_next = 0 - // (4) no output row after padding: padding_flag * (1-perm_seg_next) * (1-s1_next) = 0 - // Together, the next controller row (if any) must have s0=0 AND s1=1 (= padding). - // Degree: 5 each. - let padding_flag = - hasher_flag * cols.controller_flag() * (AB::Expr::ONE - cols.s0.clone()) * cols.s1.clone(); - let next_is_controller = cols_next.controller_flag(); - - // (3) No input row (s0_next=1) after padding. - tagged_assert_zero( - builder, - &CONTROLLER_PAIRING_TAGS, - &mut idx, - padding_flag.clone() * next_is_controller.clone() * cols_next.s0.clone(), - ); - - // (4) No output row (s1_next=0) after padding. - tagged_assert_zero( - builder, - &CONTROLLER_PAIRING_TAGS, - &mut idx, - padding_flag * next_is_controller * (AB::Expr::ONE - cols_next.s1.clone()), - ); -} diff --git a/air/src/constraints/chiplets/hasher/state.rs b/air/src/constraints/chiplets/hasher/state.rs deleted file mode 100644 index ca3cb70c7a..0000000000 --- a/air/src/constraints/chiplets/hasher/state.rs +++ /dev/null @@ -1,435 +0,0 @@ -//! Hasher chiplet state transition constraints. -//! -//! This module enforces the Poseidon2 permutation constraints for the hasher chiplet. -//! The permutation operates on a 16-row cycle with five types of steps: -//! -//! - **Row 0 (init+ext1)**: Merged init linear layer + first external round -//! - **Rows 1-3, 12-14 (external)**: Single external round: add RCs, S-box^7, M_E -//! - **Rows 4-10 (packed internal)**: 3 internal rounds packed per row using s0,s1,s2 as witnesses -//! - **Row 11 (int+ext)**: Last internal round + first trailing external round -//! - **Row 15 (boundary)**: No step constraint (cycle boundary, final permutation state) -//! -//! ## Poseidon2 Parameters -//! -//! - State width: 12 field elements -//! - External rounds: 8 (4 initial + 4 terminal) -//! - Internal rounds: 22 -//! - S-box: x^7 - -use miden_core::{chiplets::hasher::Hasher, field::PrimeCharacteristicRing}; -use miden_crypto::stark::air::LiftedAirBuilder; - -use super::periodic::{ - P_ARK_START, P_IS_EXT, P_IS_INIT_EXT, P_IS_INT_EXT, P_IS_PACKED_INT, STATE_WIDTH, -}; -use crate::{ - Felt, - constraints::tagging::{TagGroup, TaggingAirBuilderExt, tagged_assert_zeros}, -}; - -// TAGGING NAMESPACES -// ================================================================================================ - -const PERM_WITNESS_SHAPE_NAMESPACE: &str = "chiplets.hasher.permutation.witness_shape"; -const PERM_INIT_EXT_NAMESPACE: &str = "chiplets.hasher.permutation.init_ext"; -const PERM_EXT_NAMESPACE: &str = "chiplets.hasher.permutation.external"; -const PERM_PACKED_INT_NAMESPACE: &str = "chiplets.hasher.permutation.packed_internal"; -const PERM_INT_EXT_NAMESPACE: &str = "chiplets.hasher.permutation.int_ext"; -const SPONGE_CAP_NAMESPACE: &str = "chiplets.hasher.sponge.capacity"; - -const PERM_WITNESS_SHAPE_NAMES: [&str; 3] = [PERM_WITNESS_SHAPE_NAMESPACE; 3]; -const PERM_INIT_EXT_NAMES: [&str; STATE_WIDTH] = [PERM_INIT_EXT_NAMESPACE; STATE_WIDTH]; -const PERM_EXT_NAMES: [&str; STATE_WIDTH] = [PERM_EXT_NAMESPACE; STATE_WIDTH]; -// 3 witness constraints + 12 next-state constraints = 15 -const PERM_PACKED_INT_NAMES: [&str; 15] = [PERM_PACKED_INT_NAMESPACE; 15]; -// 1 witness constraint + 12 next-state constraints = 13 -const PERM_INT_EXT_NAMES: [&str; 13] = [PERM_INT_EXT_NAMESPACE; 13]; -const SPONGE_CAP_NAMES: [&str; 4] = [SPONGE_CAP_NAMESPACE; 4]; - -const PERM_WITNESS_SHAPE_TAGS: TagGroup = TagGroup { - base: super::HASHER_PERM_WITNESS_SHAPE_BASE_ID, - names: &PERM_WITNESS_SHAPE_NAMES, -}; -const PERM_INIT_EXT_TAGS: TagGroup = TagGroup { - base: super::HASHER_PERM_INIT_BASE_ID, - names: &PERM_INIT_EXT_NAMES, -}; -const PERM_EXT_TAGS: TagGroup = TagGroup { - base: super::HASHER_PERM_EXT_BASE_ID, - names: &PERM_EXT_NAMES, -}; -const PERM_PACKED_INT_TAGS: TagGroup = TagGroup { - base: super::HASHER_PERM_INT_BASE_ID, - names: &PERM_PACKED_INT_NAMES, -}; -const PERM_INT_EXT_TAGS: TagGroup = TagGroup { - base: super::HASHER_PERM_INT_EXT_BASE_ID, - names: &PERM_INT_EXT_NAMES, -}; -const SPONGE_CAP_TAGS: TagGroup = TagGroup { - base: super::HASHER_SPONGE_CAP_BASE_ID, - names: &SPONGE_CAP_NAMES, -}; - -// CONSTRAINT HELPERS -// ================================================================================================ - -/// Enforces Poseidon2 permutation step constraints on the 16-row packed cycle. -/// -/// These constraints are gated by `perm_gate = perm_seg`, so they only -/// fire on permutation segment rows. -/// -/// ## Step Types -/// -/// 1. **Init+ext1 (row 0)**: `h' = M_E(S(M_E(h) + ark))` — degree 9 -/// 2. **Single ext (rows 1-3, 12-14)**: `h' = M_E(S(h + ark))` — degree 9 -/// 3. **Packed 3x internal (rows 4-10)**: witnesses + affine next-state — degree 9 / 3 -/// 4. **Int+ext (row 11)**: witness + `h' = M_E(S(y + ark))` — degree 9 -/// 5. **Boundary (row 15)**: No constraint -/// -/// The witness columns `w[0..2]` correspond to `s0, s1, s2` on permutation rows. -pub fn enforce_permutation_steps( - builder: &mut AB, - perm_gate: AB::Expr, - h: &[AB::Expr; STATE_WIDTH], - h_next: &[AB::Expr; STATE_WIDTH], - w: &[AB::Expr; 3], - periodic: &[AB::PeriodicVar], -) where - AB: TaggingAirBuilderExt, -{ - // Step-type selectors - let is_init_ext: AB::Expr = periodic[P_IS_INIT_EXT].into(); - let is_ext: AB::Expr = periodic[P_IS_EXT].into(); - let is_packed_int: AB::Expr = periodic[P_IS_PACKED_INT].into(); - let is_int_ext: AB::Expr = periodic[P_IS_INT_EXT].into(); - - // Shared round constants - let ark: [AB::Expr; STATE_WIDTH] = core::array::from_fn(|i| periodic[P_ARK_START + i].into()); - - // ------------------------------------------------------------------------- - // 0. Unused witness zeroing - // - // Unused witness columns are forced to zero. On non-packed rows, this means: - // - rows 0-3, 12-15: w0 = w1 = w2 = 0 - // - row 11: w1 = w2 = 0 - // - rows 4-10: w0, w1, w2 unconstrained here (checked by packed witness equations) - // - // These constraints are primarily defensive. They make permutation rows inert when - // s0/s1/s2 are reused as witnesses and reduce accidental coupling with controller-side selector - // logic. They may be redundant under the current gating structure, but are kept for now to be - // on the safe side. - // - // Gate degrees: - // - perm_gate(1) * (1 - is_packed_int - is_int_ext)(1) = 2 for w0 - // - perm_gate(1) * (1 - is_packed_int)(1) = 2 for w1,w2 - // Constraint degree: gate(2) * witness(1) = 3 - // ------------------------------------------------------------------------- - let gate_w0_unused = - perm_gate.clone() * (AB::Expr::ONE - is_packed_int.clone() - is_int_ext.clone()); - let gate_w12_unused = perm_gate.clone() * (AB::Expr::ONE - is_packed_int.clone()); - let mut idx = 0; - tagged_assert_zeros( - builder, - &PERM_WITNESS_SHAPE_TAGS, - &mut idx, - PERM_WITNESS_SHAPE_NAMESPACE, - [ - gate_w0_unused * w[0].clone(), - gate_w12_unused.clone() * w[1].clone(), - gate_w12_unused * w[2].clone(), - ], - ); - - // ------------------------------------------------------------------------- - // 1. Init+ext1 (row 0): h' = M_E(S(M_E(h) + ark)) Gate degree: perm_gate(1) * is_init_ext(1) = - // 2 Constraint degree: gate(2) * sbox(7) = 9 - // ------------------------------------------------------------------------- - let expected_init_ext = apply_init_plus_ext::(h, &ark); - let gate_init_ext = perm_gate.clone() * is_init_ext; - let mut idx = 0; - tagged_assert_zeros( - builder, - &PERM_INIT_EXT_TAGS, - &mut idx, - PERM_INIT_EXT_NAMESPACE, - core::array::from_fn::<_, STATE_WIDTH, _>(|i| { - gate_init_ext.clone() * (h_next[i].clone() - expected_init_ext[i].clone()) - }), - ); - - // ------------------------------------------------------------------------- - // 2. Single external round (rows 1-3, 12-14): h' = M_E(S(h + ark)) Gate degree: perm_gate(1) * - // is_ext(1) = 2 Constraint degree: gate(2) * sbox(7) = 9 - // ------------------------------------------------------------------------- - let ext_with_rc: [AB::Expr; STATE_WIDTH] = - core::array::from_fn(|i| h[i].clone() + ark[i].clone()); - let ext_with_sbox: [AB::Expr; STATE_WIDTH] = - core::array::from_fn(|i| ext_with_rc[i].clone().exp_const_u64::<7>()); - let expected_ext = apply_matmul_external::(&ext_with_sbox); - - let gate_ext = perm_gate.clone() * is_ext; - let mut idx = 0; - tagged_assert_zeros( - builder, - &PERM_EXT_TAGS, - &mut idx, - PERM_EXT_NAMESPACE, - core::array::from_fn::<_, STATE_WIDTH, _>(|i| { - gate_ext.clone() * (h_next[i].clone() - expected_ext[i].clone()) - }), - ); - - // ------------------------------------------------------------------------- - // 3. Packed 3x internal (rows 4-10): witness checks + affine next-state Gate degree: - // perm_gate(1) * is_packed_int(1) = 2 Witness constraint degree: gate(2) * sbox(7) = 9 - // Next-state constraint degree: gate(2) * affine(1) = 3 - // ------------------------------------------------------------------------- - // ark[0..2] hold the 3 internal round constants on packed-int rows - let ark_int_3: [AB::Expr; 3] = core::array::from_fn(|i| ark[i].clone()); - let (expected_packed, witness_checks) = apply_packed_internals::(h, w, &ark_int_3); - - let gate_packed = perm_gate.clone() * is_packed_int; - let mut idx = 0; - // 3 witness constraints - tagged_assert_zeros( - builder, - &PERM_PACKED_INT_TAGS, - &mut idx, - PERM_PACKED_INT_NAMESPACE, - core::array::from_fn::<_, 3, _>(|k| gate_packed.clone() * witness_checks[k].clone()), - ); - // 12 next-state constraints - tagged_assert_zeros( - builder, - &PERM_PACKED_INT_TAGS, - &mut idx, - PERM_PACKED_INT_NAMESPACE, - core::array::from_fn::<_, STATE_WIDTH, _>(|i| { - gate_packed.clone() * (h_next[i].clone() - expected_packed[i].clone()) - }), - ); - - // ------------------------------------------------------------------------- - // 4. Int+ext merged (row 11): 1 internal (ARK_INT[21] hardcoded) + 1 external Gate degree: - // perm_gate(1) * is_int_ext(1) = 2 Witness constraint degree: gate(2) * sbox(7) = 9 - // Next-state constraint degree: gate(2) * sbox(7) = 9 - // ------------------------------------------------------------------------- - let (expected_int_ext, witness_check) = - apply_internal_plus_ext::(h, &w[0], Hasher::ARK_INT[21], &ark); - - let gate_int_ext = perm_gate * is_int_ext; - let mut idx = 0; - // 1 witness constraint - tagged_assert_zeros( - builder, - &PERM_INT_EXT_TAGS, - &mut idx, - PERM_INT_EXT_NAMESPACE, - [gate_int_ext.clone() * witness_check], - ); - // 12 next-state constraints - tagged_assert_zeros( - builder, - &PERM_INT_EXT_TAGS, - &mut idx, - PERM_INT_EXT_NAMESPACE, - core::array::from_fn::<_, STATE_WIDTH, _>(|i| { - gate_int_ext.clone() * (h_next[i].clone() - expected_int_ext[i].clone()) - }), - ); -} - -/// Enforces that the sponge capacity is unchanged across batch boundaries. -/// -/// During multi-batch linear hashing (RESPAN), each new batch overwrites the rate -/// (h0..h7) but the capacity (h8..h11) must carry over from the previous permutation -/// output. Without this constraint, a prover could inject arbitrary capacity values on -/// continuation rows, corrupting the sponge state. -/// -/// The `gate` is constructed by the caller to fire only when the next row is a sponge -/// continuation input (see `enforce_respan_capacity` in mod.rs for details). -pub fn enforce_respan_capacity_preservation( - builder: &mut AB, - gate: AB::Expr, - h_cap: &[AB::Expr; 4], - h_cap_next: &[AB::Expr; 4], -) where - AB: TaggingAirBuilderExt, -{ - let mut idx = 0; - tagged_assert_zeros( - builder, - &SPONGE_CAP_TAGS, - &mut idx, - SPONGE_CAP_NAMESPACE, - core::array::from_fn::<_, 4, _>(|i| { - gate.clone() * (h_cap_next[i].clone() - h_cap[i].clone()) - }), - ); -} - -// ============================================================================= -// LINEAR ALGEBRA HELPERS -// ============================================================================= - -/// Applies the external linear layer M_E to the state. -/// -/// The external layer consists of: -/// 1. Apply M4 to each 4-element block -/// 2. Add cross-block sums to each element -fn apply_matmul_external>( - state: &[AB::Expr; STATE_WIDTH], -) -> [AB::Expr; STATE_WIDTH] { - // Apply M4 to each 4-element block - let b0 = matmul_m4::(&core::array::from_fn(|i| state[i].clone())); - let b1 = matmul_m4::(&core::array::from_fn(|i| state[4 + i].clone())); - let b2 = matmul_m4::(&core::array::from_fn(|i| state[8 + i].clone())); - - // Compute cross-block sums - let stored0 = b0[0].clone() + b1[0].clone() + b2[0].clone(); - let stored1 = b0[1].clone() + b1[1].clone() + b2[1].clone(); - let stored2 = b0[2].clone() + b1[2].clone() + b2[2].clone(); - let stored3 = b0[3].clone() + b1[3].clone() + b2[3].clone(); - - // Add sums to each element - [ - b0[0].clone() + stored0.clone(), - b0[1].clone() + stored1.clone(), - b0[2].clone() + stored2.clone(), - b0[3].clone() + stored3.clone(), - b1[0].clone() + stored0.clone(), - b1[1].clone() + stored1.clone(), - b1[2].clone() + stored2.clone(), - b1[3].clone() + stored3.clone(), - b2[0].clone() + stored0, - b2[1].clone() + stored1, - b2[2].clone() + stored2, - b2[3].clone() + stored3, - ] -} - -/// Applies the 4x4 matrix M4 used in Poseidon2's external linear layer. -fn matmul_m4>(input: &[AB::Expr; 4]) -> [AB::Expr; 4] { - let [a, b, c, d] = input.clone(); - - let t0 = a.clone() + b.clone(); - let t1 = c.clone() + d.clone(); - let t2 = b.double() + t1.clone(); // 2b + t1 - let t3 = d.double() + t0.clone(); // 2d + t0 - let t4 = t1.double().double() + t3.clone(); // 4*t1 + t3 - let t5 = t0.double().double() + t2.clone(); // 4*t0 + t2 - - let out0 = t3.clone() + t5.clone(); - let out1 = t5; - let out2 = t2 + t4.clone(); - let out3 = t4; - - [out0, out1, out2, out3] -} - -/// Applies the internal linear layer M_I to the state. -/// -/// M_I = I + diag(MAT_DIAG) where all rows share the same sum. -fn apply_matmul_internal>( - state: &[AB::Expr; STATE_WIDTH], -) -> [AB::Expr; STATE_WIDTH] { - // Sum of all state elements - let sum: AB::Expr = state.iter().cloned().reduce(|a, b| a + b).expect("STATE_WIDTH > 0"); - - // result[i] = state[i] * MAT_DIAG[i] + sum - core::array::from_fn(|i| state[i].clone() * AB::Expr::from(Hasher::MAT_DIAG[i]) + sum.clone()) -} - -// ============================================================================= -// PACKED ROUND HELPERS -// ============================================================================= - -/// Computes the expected next state for the merged init linear + first external round. -/// -/// h' = M_E(S(M_E(h) + ark_ext)) -/// -/// The init step applies M_E to the input, then the first external round adds round -/// constants, applies the full S-box, and applies M_E again. This is a single S-box -/// layer over affine expressions, so the constraint degree is 7. -pub fn apply_init_plus_ext>( - h: &[AB::Expr; STATE_WIDTH], - ark_ext: &[AB::Expr; STATE_WIDTH], -) -> [AB::Expr; STATE_WIDTH] { - // Apply M_E to get the pre-round state - let pre = apply_matmul_external::(h); - - // Add round constants, apply S-box, apply M_E - let with_rc: [AB::Expr; STATE_WIDTH] = - core::array::from_fn(|i| pre[i].clone() + ark_ext[i].clone()); - let with_sbox: [AB::Expr; STATE_WIDTH] = - core::array::from_fn(|i| with_rc[i].clone().exp_const_u64::<7>()); - apply_matmul_external::(&with_sbox) -} - -/// Computes the expected next state and witness checks for 3 packed internal rounds. -/// -/// Each internal round applies: add RC to lane 0, S-box lane 0, then M_I. -/// The S-box output for each round is provided as an explicit witness (w0, w1, w2), -/// which keeps the intermediate states affine and the constraint degree at 7. -/// -/// Returns: -/// - `next_state`: expected state after all 3 rounds (affine in trace columns, degree 1) -/// - `witness_checks`: 3 expressions that must be zero (each degree 7): `wk - (y(k)_0 + -/// ark_int[k])^7` -pub fn apply_packed_internals>( - h: &[AB::Expr; STATE_WIDTH], - w: &[AB::Expr; 3], - ark_int: &[AB::Expr; 3], -) -> ([AB::Expr; STATE_WIDTH], [AB::Expr; 3]) { - let mut state = h.clone(); - let mut witness_checks: [AB::Expr; 3] = core::array::from_fn(|_| AB::Expr::ZERO); - - for k in 0..3 { - // Witness check: wk = (state[0] + ark_int[k])^7 - let sbox_input = state[0].clone() + ark_int[k].clone(); - witness_checks[k] = w[k].clone() - sbox_input.exp_const_u64::<7>(); - - // Substitute witness for lane 0 and apply M_I - state[0] = w[k].clone(); - state = apply_matmul_internal::(&state); - } - - (state, witness_checks) -} - -/// Computes the expected next state and witness check for one internal round followed -/// by one external round. -/// -/// Used for the int22+ext5 merged row (row 11). The internal round constant ARK_INT[21] -/// is passed as a concrete Felt rather than read from a periodic column. This is valid -/// because row 11 is the only row gated by `is_int_ext` -- no other row needs a different -/// value under the same gate. A periodic column would waste 15 zero entries to deliver -/// one value. -/// -/// Returns: -/// - `next_state`: expected state after int + ext (degree 7 in trace columns) -/// - `witness_check`: `w0 - (h[0] + ark_int_const)^7` (degree 7) -pub fn apply_internal_plus_ext>( - h: &[AB::Expr; STATE_WIDTH], - w0: &AB::Expr, - ark_int_const: Felt, - ark_ext: &[AB::Expr; STATE_WIDTH], -) -> ([AB::Expr; STATE_WIDTH], AB::Expr) { - // Internal round: witness check and state update - let sbox_input = h[0].clone() + AB::Expr::from(ark_int_const); - let witness_check = w0.clone() - sbox_input.exp_const_u64::<7>(); - - let mut int_state = h.clone(); - int_state[0] = w0.clone(); - let intermediate = apply_matmul_internal::(&int_state); - - // External round: add RC, S-box all lanes, M_E - let with_rc: [AB::Expr; STATE_WIDTH] = - core::array::from_fn(|i| intermediate[i].clone() + ark_ext[i].clone()); - let with_sbox: [AB::Expr; STATE_WIDTH] = - core::array::from_fn(|i| with_rc[i].clone().exp_const_u64::<7>()); - let next_state = apply_matmul_external::(&with_sbox); - - (next_state, witness_check) -} diff --git a/air/src/constraints/chiplets/hasher_control/flags.rs b/air/src/constraints/chiplets/hasher_control/flags.rs new file mode 100644 index 0000000000..520bbc216d --- /dev/null +++ b/air/src/constraints/chiplets/hasher_control/flags.rs @@ -0,0 +1,146 @@ +//! Semantic row-kind flags for the controller sub-chiplet. +//! +//! [`ControllerFlags`] is a pure naming layer over compositions of the hasher-internal +//! sub-selectors `(s0, s1, s2)` on the current and next rows. Each field gives a +//! meaningful name to a bit-pattern product so constraint code never references +//! raw `cols.s0 / cols.s1 / cols.s2` as ad-hoc gate factors. +//! +//! This struct contains **no** chiplet-level scope (`is_active`, `is_transition`): +//! those live on [`ChipletFlags`] and are combined with these row flags by +//! multiplication at each call site. +//! +//! ## Selector encoding (current row, within controller rows) +//! +//! | s0 | s1 | s2 | Row type | Flag | +//! |----|----|----|----------|------| +//! | 1 | 0 | 0 | Sponge input (LINEAR_HASH / 2-to-1 / HPERM) | `is_sponge_input` | +//! | 1 | 0 | 1 | MP input (Merkle path verify) | `is_merkle_input` | +//! | 1 | 1 | 0 | MV input (old-path Merkle root update) | `is_merkle_input` / `is_mv_input` | +//! | 1 | 1 | 1 | MU input (new-path Merkle root update) | `is_merkle_input` | +//! | 0 | 0 | 0 | HOUT output (return digest) | `is_hout` / `is_output` | +//! | 0 | 0 | 1 | SOUT output (return full state) | `is_sout` / `is_output` | +//! | 0 | 1 | * | Padding (inactive slot) | `is_padding` | +//! +//! On permutation rows (`s_perm = 1`), `s0/s1/s2` hold S-box witnesses, so these +//! flags are don't-care there — constraint code gates them by `ChipletFlags.is_active` +//! (= `s_ctrl`) at the call site. +//! +//! ## Operation semantics +//! +//! - **Sponge** (`is_sponge_input`): LINEAR_HASH (multi-batch span), single 2-to-1 hash, or HPERM. +//! In sponge mode, capacity is set once on the first input and carried through across +//! continuations; in tree mode (Merkle ops), capacity is zeroed at every level. +//! - **MP**: MPVERIFY — read-only Merkle path check. Does not interact with the sibling table. +//! - **MV**: old-path leg of MRUPDATE. Each MV row inserts a sibling into the virtual sibling table +//! via the hash_kernel bus. +//! - **MU**: new-path leg of MRUPDATE. Each MU row removes a sibling from the virtual sibling +//! table. The table balance ensures the same siblings are used for both the old and new paths. + +use miden_core::field::PrimeCharacteristicRing; + +use crate::constraints::{chiplets::columns::ControllerCols, utils::BoolNot}; + +// CONTROLLER FLAGS +// ================================================================================================ + +/// Named compositions of the controller sub-selectors `(s0, s1, s2)` on the current +/// and next rows. +/// +/// Pure row-kind layer — contains no chiplet-level scope. Combine with [`ChipletFlags`]( +/// super::super::selectors::ChipletFlags) at the call site by multiplication. +pub struct ControllerFlags { + // ======================================================================== + // Current row — compositions of cols.{s0, s1, s2} + // ======================================================================== + /// Input row: `s0` (deg 1). Covers all input operations (sponge + Merkle variants). + pub is_input: E, + + /// Output row: `(1-s0)*(1-s1)` (deg 2). Covers HOUT and SOUT. + pub is_output: E, + + /// Padding row: `(1-s0)*s1` (deg 2). Inactive controller slot. + pub is_padding: E, + + /// Sponge input row (LINEAR_HASH / 2-to-1 / HPERM): `s0*(1-s1)*(1-s2)` (deg 3). + pub is_sponge_input: E, + + /// Any Merkle input row (MP/MV/MU): `s0*(s1+s2-s1*s2)` (deg 3). + /// + /// The expression `s1 + s2 - s1*s2` equals `s1 OR s2` for binary inputs. + pub is_merkle_input: E, + + /// HOUT (return digest) output: `(1-s0)*(1-s1)*(1-s2)` (deg 3). + pub is_hout: E, + + /// SOUT (return full state) output: `(1-s0)*(1-s1)*s2` (deg 3). + pub is_sout: E, + + // ======================================================================== + // Next row — compositions of cols_next.{s0, s1, s2} + // ======================================================================== + /// Next row is an output row: `(1-s0')*(1-s1')` (deg 2). + pub is_output_next: E, + + /// Next row is a padding row: `(1-s0')*s1'` (deg 2). + pub is_padding_next: E, + + /// Next row is a sponge input — LINEAR_HASH continuation: `s0'*(1-s1')*(1-s2')` (deg 3). + pub is_sponge_input_next: E, + + /// Next row is any Merkle input (MP/MV/MU): `s0'*(s1'+s2'-s1'*s2')` (deg 3). + pub is_merkle_input_next: E, + + /// Next row is an MV input — old-path MRUPDATE start: `s0'*s1'*(1-s2')` (deg 3). + pub is_mv_input_next: E, +} + +impl ControllerFlags { + /// Build all row-kind flags from the current and next row's sub-selector columns. + pub fn new>(cols: &ControllerCols, cols_next: &ControllerCols) -> Self { + // --- Current row --- + let s0: E = cols.s0.into(); + let s1: E = cols.s1.into(); + let s2: E = cols.s2.into(); + let not_s0 = s0.clone().not(); + let not_s1 = s1.clone().not(); + let not_s2 = s2.clone().not(); + + let is_input = s0.clone(); + let is_output = not_s0.clone() * not_s1.clone(); + let is_padding = not_s0 * s1.clone(); + let is_sponge_input = s0.clone() * not_s1.clone() * not_s2.clone(); + let is_merkle_input = s0 * (s1.clone() + s2.clone() - s1 * s2.clone()); + let is_hout = is_output.clone() * not_s2; + let is_sout = is_output.clone() * s2; + + // --- Next row --- + let s0n: E = cols_next.s0.into(); + let s1n: E = cols_next.s1.into(); + let s2n: E = cols_next.s2.into(); + let not_s0n = s0n.clone().not(); + let not_s1n = s1n.clone().not(); + let not_s2n = s2n.clone().not(); + + let is_output_next = not_s0n.clone() * not_s1n.clone(); + let is_padding_next = not_s0n * s1n.clone(); + let is_sponge_input_next = s0n.clone() * not_s1n * not_s2n.clone(); + let is_merkle_input_next = + s0n.clone() * (s1n.clone() + s2n.clone() - s1n.clone() * s2n.clone()); + let is_mv_input_next = s0n * s1n * not_s2n; + + Self { + is_input, + is_output, + is_padding, + is_sponge_input, + is_merkle_input, + is_hout, + is_sout, + is_output_next, + is_padding_next, + is_sponge_input_next, + is_merkle_input_next, + is_mv_input_next, + } + } +} diff --git a/air/src/constraints/chiplets/hasher_control/mod.rs b/air/src/constraints/chiplets/hasher_control/mod.rs new file mode 100644 index 0000000000..f33e95b6a8 --- /dev/null +++ b/air/src/constraints/chiplets/hasher_control/mod.rs @@ -0,0 +1,367 @@ +//! Controller sub-chiplet constraints (dispatch side). +//! +//! The hasher uses a dispatch/compute split architecture: the **controller** (this module) +//! records permutation requests as compact (input, output) row pairs and responds to the +//! chiplets bus; the **permutation** sub-chiplet executes the actual Poseidon2 cycles. +//! A LogUp perm-link bus on the shared `v_wiring` column binds the two regions. +//! +//! The controller is active when `s_ctrl = chiplets[0] = 1`, which covers ALL controller +//! rows (input, output, and padding). +//! +//! ## Sub-modules +//! +//! - [`flags`]: Pure row-kind [`ControllerFlags`](flags::ControllerFlags) — compositions of `(s0, +//! s1, s2)` on current and next rows. Contains no chiplet-level scope; combined with +//! [`ChipletFlags`] at each call site. +//! +//! ## Constraint layout (narrative by operation lifetime) +//! +//! Constraints are organized in the order an operation walks through them: +//! +//! 1. **Trace skeleton** — first-row boundary, selector booleanity, adjacency/stability rules that +//! don't depend on the operation kind. These are the trace-layout invariants. +//! 2. **Operation start** — input is_boundary booleanity and the input→output adjacency law that +//! every operation hits on its first row. +//! 3. **Sponge operations** (LINEAR_HASH / 2-to-1 / HPERM) — input state pinning plus the respan +//! capacity preservation that glues multi-batch spans. +//! 4. **Merkle operations** (MP / MV / MU) — per-level input state, cross-level transitions (index +//! continuity, direction bit propagation, digest routing), and the MRUPDATE domain-separator +//! progression. +//! 5. **Operation end** — output is_boundary booleanity and the HOUT / SOUT return-value +//! constraints. +//! +//! Every constraint takes both a [`ChipletFlags`] (scope: active / transition) and a +//! [`ControllerFlags`] (row-kind: input/output/...), combined by multiplication at each +//! gate site. With one exception — the sub-selector booleanity assertion below — no raw +//! `cols.s0 / cols.s1 / cols.s2` columns are referenced in constraint gates. + +pub mod flags; + +use flags::ControllerFlags; +use miden_core::field::PrimeCharacteristicRing; +use miden_crypto::stark::air::AirBuilder; + +use crate::{ + MainCols, MidenAirBuilder, + constraints::{ + chiplets::{columns::ControllerCols, selectors::ChipletFlags}, + utils::BoolNot, + }, +}; + +// ENTRY POINT +// ================================================================================================ + +/// Enforce all controller sub-chiplet constraints. +/// +/// Receives pre-computed [`ChipletFlags`] from `build_chiplet_selectors`. The `s_ctrl` +/// column (`chiplets[0]`) is never referenced directly by constraint code. +pub fn enforce_controller_constraints( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + chiplet: &ChipletFlags, +) where + AB: MidenAirBuilder, +{ + let cols: &ControllerCols = local.controller(); + let cols_next: &ControllerCols = next.controller(); + + let rows = ControllerFlags::::new(cols, cols_next); + + // ===================================================================== + // 1. TRACE SKELETON + // + // Invariants on the shape of the controller section: where it starts, + // which selectors are binary, what can follow what. These constraints + // don't depend on which hasher operation is running. + // ===================================================================== + + // --- First-row boundary --- + // The first row of the trace must be a controller input row: asserting + // `is_active * is_input = 1` forces both `s_ctrl = 1` and `s0 = 1` because + // the only solution to a product of booleans equaling 1 is all factors = 1. + // NOTE: this assumes the controller is the first chiplet section in the trace. + // The transition rules (s_ctrl → s_ctrl' + s_perm' = 1) and the trace layout + // guarantee this, but a reordering of chiplet sections would require moving + // this constraint. + builder + .when_first_row() + .assert_one(chiplet.is_active.clone() * rows.is_input.clone()); + + // --- Sub-selector booleanity --- + // s0, s1, s2 are binary on all controller rows. On permutation rows, these + // columns hold S-box witnesses and are unconstrained here. + // + // NOTE: these are the only direct references to the raw `s0/s1/s2` columns + // in the controller constraint body — booleanity is inherent to the columns + // themselves and cannot be expressed through a composed row-kind flag. + builder + .when(chiplet.is_active.clone()) + .assert_bools([cols.s0, cols.s1, cols.s2]); + + // --- is_boundary booleanity on all controller rows --- + // `is_boundary = 1` marks the first row of a new operation (sponge start + // or Merkle path level 0); `is_boundary = 0` elsewhere. Hoisted to + // `when(is_active)` because input ∪ output ∪ padding covers every ctrl row + // — padding forces it to 0 (§1 below) and input/output use it as a bit. + builder.when(chiplet.is_active.clone()).assert_bool(cols.is_boundary); + + // --- Output non-adjacency --- + // An output row cannot be followed by another output row. Combined with the + // input→output adjacency law (§2 below), this guarantees strictly alternating + // (input, output) pairs for every operation. + // + // Gated on `is_transition` so `cols_next.*` columns are read only when the + // next row is also a controller row (on perm/s0 rows, `s0/s1/s2` hold + // unrelated data). + // Degree: is_transition(3) * is_output(2) * is_output_next(2) = 7. + builder + .when(chiplet.is_transition.clone()) + .when(rows.is_output.clone()) + .assert_zero(rows.is_output_next.clone()); + + // --- Padding stability --- + // A padding row may only be followed by another padding row (or the first + // permutation row, which ends the controller section). Gating on + // `chiplet.is_transition` = `is_transition * s_ctrl * s_ctrl'` makes the + // constraint vanish on the last padding row when the next row is a permutation + // row (where `cols_next.s0/s1/s2` hold S-box witnesses). + // + // Asserting `is_padding_next = (1-s0')*s1' = 1` forces `s0' = 0` and `s1' = 1`. + // Degree: is_transition(3) * is_padding(2) * is_padding_next(2) = 7. + builder + .when(chiplet.is_transition.clone()) + .when(rows.is_padding.clone()) + .assert_one(rows.is_padding_next.clone()); + + // --- Padding confinement --- + // is_boundary and direction_bit must be zero on padding rows. + builder + .when(chiplet.is_active.clone()) + .when(rows.is_padding.clone()) + .assert_zeros([cols.is_boundary, cols.direction_bit]); + + // ===================================================================== + // 2. OPERATION START + // + // The first row of every operation is a controller input row (s_ctrl = 1, + // s0 = 1). These constraints apply to ANY input row regardless of + // operation kind. + // ===================================================================== + + // --- No input row at the ctrl→perm boundary --- + // An input row cannot be the last controller row. Without this, the + // adjacency rule below (which relies on `s_ctrl'` so that `s0'/s1'` are + // binary on the next row) would have a hole at the ctrl→perm transition. + // `chiplet.is_last = s_ctrl * (1 - s_ctrl')` fires exactly on that boundary. + builder.when(chiplet.is_last.clone()).assert_zero(rows.is_input.clone()); + + // --- No non-final output at the ctrl→perm boundary --- + // Defensive: an output row at the ctrl→perm boundary must be final + // (is_boundary = 1). Without this, a non-final output (is_boundary = 0) + // would expect a continuation input that never comes, since the next row + // belongs to the permutation segment. + // Degree: is_last(2) * is_output(2) * inner(1) = 5. + builder + .when(chiplet.is_last.clone()) + .when(rows.is_output.clone()) + .assert_one(cols.is_boundary); + + // --- Input→output adjacency on ctrl→ctrl transitions --- + // On a ctrl→ctrl transition from an input row, the next row must be an + // output row. `is_transition` carries the `s_ctrl'` factor, so on this + // gate `cols_next.s0/s1` are boolean and `(1 - s0')(1 - s1') = 1` really + // does force both to 0. Combined with the `is_last` guard above, every + // ctrl_input is followed by a ctrl_output. + builder + .when(chiplet.is_transition.clone()) + .when(rows.is_input.clone()) + .assert_one(rows.is_output_next.clone()); + + // ===================================================================== + // 3. SPONGE OPERATIONS (LINEAR_HASH / 2-to-1 / HPERM) + // + // Sponge operations process rate data in (possibly multi-batch) spans. + // Capacity is set once on the first input (is_boundary = 1) and carried + // through RESPAN continuations via the preservation constraint below. + // Sponge operations have no tree position and don't use direction_bit. + // ===================================================================== + + // --- Sponge input state --- + // Sponge operations don't have a Merkle tree position, so `node_index = 0`, + // and they don't use `direction_bit` at all, so it's confined to 0. + builder + .when(chiplet.is_active.clone()) + .when(rows.is_sponge_input.clone()) + .assert_zeros([cols.node_index, cols.direction_bit]); + + // --- Respan capacity preservation --- + // During multi-batch linear hashing (RESPAN), each new batch overwrites the rate + // (h0..h7) but the capacity (h8..h11) must carry over from the previous permutation + // output. Without this, a prover could inject arbitrary capacity values on + // continuation rows, corrupting the sponge state. + // + // `is_sponge_input_next` restricts this to LINEAR_HASH continuations only (Merkle + // ops zero capacity at each level). The `!is_boundary_next` factor restricts to + // continuations (not new operation starts, which set fresh capacity). + // `is_transition` guarantees both rows are controller rows. + // Degree: is_transition(3) * is_sponge_input_next(3) * !is_boundary_next(1) * diff(1) = 8. + { + let is_boundary_next: AB::Expr = cols_next.is_boundary.into(); + let gate = chiplet.is_transition.clone() + * rows.is_sponge_input_next.clone() + * is_boundary_next.not(); + + let cap = cols.capacity(); + let cap_next = cols_next.capacity(); + + let builder = &mut builder.when(gate); + for i in 0..4 { + builder.assert_eq(cap_next[i], cap[i]); + } + } + + // ===================================================================== + // 4. MERKLE OPERATIONS (MP / MV / MU) + // + // Merkle path operations walk a 2-to-1 compression tree from leaf to root. + // Each level is an (input, output) pair: the input holds the current node + // plus the sibling in the correct rate half (selected by direction_bit), + // and the output holds the compressed digest. Between levels, the digest + // routes into the next input's rate half and the index shifts one bit. + // + // See [`flags::ControllerFlags`] for MP / MV / MU operation semantics. + // MV and MU interact with the sibling table via the hash_kernel bus; the + // shared sibling set is domain-separated by `mrupdate_id`. + // ===================================================================== + + // --- Merkle input state --- + // On each Merkle input row: + // - index decomposition: `idx = 2 * idx_next + direction_bit` threads the path bits down one + // level at a time + // - direction_bit is binary (left/right child selector) + // - capacity lanes h[8..12] are zeroed so each 2-to-1 compression starts with a clean sponge + // capacity + // Degree: is_active(1) * is_merkle_input(3) * diff(1) = 5 (on the decomp assert). + { + let gate = chiplet.is_active.clone() * rows.is_merkle_input.clone(); + let builder = &mut builder.when(gate); + + // idx = 2 * idx_next + direction_bit + let node_index_next: AB::Expr = cols_next.node_index.into(); + let idx_expected = node_index_next.double() + cols.direction_bit; + builder.assert_eq(cols.node_index, idx_expected); + + // direction_bit is binary + builder.assert_bool(cols.direction_bit); + + // Capacity lanes h[8..12] must be zero on Merkle input rows. + builder.assert_zeros(cols.capacity()); + } + + // --- Cross-step Merkle index continuity --- + // On non-final output rows, if the next row is a Merkle input, the node + // index must carry over: `idx_next = idx`. (The decomposition constraint + // above shifts the index on the input row itself.) + // + // NOTE: `is_merkle_input_next` is read without an explicit `is_active_next` + // gate. This is safe because `is_active` already scopes the current row to + // the controller section, and the transition rules enforce that the next + // row after a controller row must be either another controller row or a + // permutation row — never a non-hasher row. + // Gate: is_active(1) * is_output(2) * !is_boundary(1) * is_merkle_input_next(3) = 7 + // Constraint degree: gate(7) * diff(1) = 8 + let not_boundary: AB::Expr = cols.is_boundary.into().not(); + builder + .when(chiplet.is_active.clone()) + .when(rows.is_output.clone()) + .when(not_boundary.clone()) + .when(rows.is_merkle_input_next.clone()) + .assert_eq(cols_next.node_index, cols.node_index); + + // --- Direction bit forward propagation + digest routing --- + // + // **Forward propagation.** On non-final output → next-input Merkle boundaries, + // the `direction_bit` on the output must equal the `direction_bit` on the next + // input row. This makes `b_{i+1}` (the next step's direction bit) available on + // the output row so the digest can be routed to the correct rate half. + // + // **Digest routing.** The digest from output_i (in rate0, `h[0..4]`) must + // appear in the correct rate half of input_{i+1}, selected by direction_bit: + // - `direction_bit = 0`: digest goes to rate0 of input_{i+1} (`h_next[j]`) + // - `direction_bit = 1`: digest goes to rate1 of input_{i+1} (`h_next[4+j]`) + // + // Uses the full `is_merkle_input_next = s0' * (s1' + s2' - s1'*s2')` (degree 3) + // so the gate fires exclusively on genuine Merkle input continuations. This + // sits the constraint at exactly the max degree of 9, trading 2 degrees of + // headroom for local soundness: no bus invariant is required to reject + // sponge-mislabeling attacks, because the `s0'` factor already forbids them. + // Gate: is_active(1) * is_output(2) * !is_boundary(1) * is_merkle_input_next(3) = 7 + // Constraint degree: gate(7) * inner(2) = 9 + { + let gate = chiplet.is_active.clone() + * rows.is_output.clone() + * not_boundary + * rows.is_merkle_input_next.clone(); + let builder = &mut builder.when(gate); + + // Forward propagation: direction_bit on output = direction_bit on next input. + builder.assert_eq(cols.direction_bit, cols_next.direction_bit); + + // Digest routing: for each j in 0..4, enforce + // h[j] = b * h_next[4+j] + (1-b) * h_next[j] + // h[j] = h_next[j] + b * (h_next[4+j] - h_next[j]) + // where b = direction_bit on the output row. + let b: AB::Expr = cols.direction_bit.into(); + let rate0_curr = cols.rate0(); + let rate0_next = cols_next.rate0(); + let rate1_next = cols_next.rate1(); + for j in 0..4 { + builder.assert_eq( + rate0_curr[j], + rate0_next[j] + b.clone() * (rate1_next[j] - rate0_next[j]), + ); + } + } + + // --- MRUPDATE domain separator (mrupdate_id progression) --- + // On controller→controller transitions: + // mrupdate_id_next = mrupdate_id + is_mv_input_next * is_boundary_next + // i.e. the domain separator ticks forward exactly when the next row is an + // MV boundary input (the start of an old-path MRUPDATE leg). This separates + // sibling-table entries from different MRUPDATE operations so siblings from + // one update can't be replayed in another. + // Degree: is_transition(3) * (diff + is_mv_input_next(3) * bnd'(1))(4) = 7. + let mrupdate_id: AB::Expr = cols.mrupdate_id.into(); + let mv_start_next = rows.is_mv_input_next * cols_next.is_boundary; + builder + .when(chiplet.is_transition.clone()) + .assert_eq(cols_next.mrupdate_id, mrupdate_id + mv_start_next); + + // ===================================================================== + // 5. OPERATION END + // + // Every operation ends on an output row carrying its return value: HOUT + // returns a 4-element digest, SOUT returns the full 12-element state. + // The final output of an operation has is_boundary = 1; intermediate + // outputs (merkle levels, sponge batch boundaries) have is_boundary = 0. + // ===================================================================== + + // --- HOUT return digest --- + // HOUT output rows return a 4-element digest. They have no tree position + // (`node_index = 0`) and no direction bit (`direction_bit = 0`). + builder + .when(chiplet.is_active.clone()) + .when(rows.is_hout.clone()) + .assert_zeros([cols.node_index, cols.direction_bit]); + + // --- SOUT return full state (final row) --- + // SOUT on the boundary row (final output of an HPERM) has direction_bit = 0. + // Intermediate SOUT rows (non-boundary) are unconstrained here. + builder + .when(chiplet.is_active.clone()) + .when(rows.is_sout.clone()) + .when(cols.is_boundary) + .assert_zero(cols.direction_bit); +} diff --git a/air/src/constraints/chiplets/kernel_rom.rs b/air/src/constraints/chiplets/kernel_rom.rs index b721e9ab3f..8509b1de7e 100644 --- a/air/src/constraints/chiplets/kernel_rom.rs +++ b/air/src/constraints/chiplets/kernel_rom.rs @@ -22,58 +22,10 @@ //! 2. Digest contiguity: when sfirst'=0 and s4'=0, digest values stay the same //! 3. First row: when entering kernel ROM, sfirst' must be 1 -use miden_core::field::PrimeCharacteristicRing; +use miden_crypto::stark::air::AirBuilder; -use super::selectors::{ace_chiplet_flag, kernel_rom_chiplet_flag}; -use crate::{ - Felt, MainTraceRow, - constraints::tagging::{ - TagGroup, TaggingAirBuilderExt, tagged_assert_zero, tagged_assert_zero_integrity, - }, -}; - -// CONSTANTS -// ================================================================================================ - -// Kernel ROM chiplet offset from CHIPLETS_OFFSET (after s0, s1, s2, s3, s4). -const KERNEL_ROM_OFFSET: usize = 5; - -// Column indices within the kernel ROM chiplet -const SFIRST_IDX: usize = 0; -const R0_IDX: usize = 1; -const R1_IDX: usize = 2; -const R2_IDX: usize = 3; -const R3_IDX: usize = 4; - -// TAGGING CONSTANTS -// ================================================================================================ - -pub(super) const KERNEL_ROM_BASE_ID: usize = - super::memory::MEMORY_BASE_ID + super::memory::MEMORY_COUNT + super::ace::ACE_COUNT; -const KERNEL_ROM_SFIRST_ID: usize = KERNEL_ROM_BASE_ID; -const KERNEL_ROM_DIGEST_BASE_ID: usize = KERNEL_ROM_BASE_ID + 1; -const KERNEL_ROM_FIRST_ROW_ID: usize = KERNEL_ROM_BASE_ID + 5; - -const KERNEL_ROM_SFIRST_NAMESPACE: &str = "chiplets.kernel_rom.sfirst.binary"; -const KERNEL_ROM_DIGEST_NAMESPACE: &str = "chiplets.kernel_rom.digest.contiguity"; -const KERNEL_ROM_FIRST_ROW_NAMESPACE: &str = "chiplets.kernel_rom.first_row.start"; - -const KERNEL_ROM_SFIRST_NAMES: [&str; 1] = [KERNEL_ROM_SFIRST_NAMESPACE; 1]; -const KERNEL_ROM_DIGEST_NAMES: [&str; 4] = [KERNEL_ROM_DIGEST_NAMESPACE; 4]; -const KERNEL_ROM_FIRST_ROW_NAMES: [&str; 1] = [KERNEL_ROM_FIRST_ROW_NAMESPACE; 1]; - -const KERNEL_ROM_SFIRST_TAGS: TagGroup = TagGroup { - base: KERNEL_ROM_SFIRST_ID, - names: &KERNEL_ROM_SFIRST_NAMES, -}; -const KERNEL_ROM_DIGEST_TAGS: TagGroup = TagGroup { - base: KERNEL_ROM_DIGEST_BASE_ID, - names: &KERNEL_ROM_DIGEST_NAMES, -}; -const KERNEL_ROM_FIRST_ROW_TAGS: TagGroup = TagGroup { - base: KERNEL_ROM_FIRST_ROW_ID, - names: &KERNEL_ROM_FIRST_ROW_NAMES, -}; +use super::selectors::ChipletFlags; +use crate::{MainCols, MidenAirBuilder, constraints::utils::BoolNot}; // ENTRY POINTS // ================================================================================================ @@ -81,98 +33,43 @@ const KERNEL_ROM_FIRST_ROW_TAGS: TagGroup = TagGroup { /// Enforce kernel ROM chiplet constraints. pub fn enforce_kernel_rom_constraints( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, + flags: &ChipletFlags, ) where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { - // Chiplet selector columns; kernel ROM rows are selected by (s0..s4). - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let s2: AB::Expr = local.chiplets[2].clone().into(); - let s3: AB::Expr = local.chiplets[3].clone().into(); - let s4: AB::Expr = local.chiplets[4].clone().into(); - let s3_next: AB::Expr = next.chiplets[3].clone().into(); - let s4_next: AB::Expr = next.chiplets[4].clone().into(); + let krom = local.kernel_rom(); + let krom_next = next.kernel_rom(); - let kernel_rom_flag = - kernel_rom_chiplet_flag(s0.clone(), s1.clone(), s2.clone(), s3.clone(), s4.clone()); - let ace_flag = ace_chiplet_flag(s0.clone(), s1.clone(), s2.clone(), s3.clone()); - - // Load kernel ROM columns (sfirst + 4-word digest). - let sfirst: AB::Expr = load_kernel_rom_col::(local, SFIRST_IDX); - let sfirst_next: AB::Expr = load_kernel_rom_col::(next, SFIRST_IDX); - let r0: AB::Expr = load_kernel_rom_col::(local, R0_IDX); - let r0_next: AB::Expr = load_kernel_rom_col::(next, R0_IDX); - let r1: AB::Expr = load_kernel_rom_col::(local, R1_IDX); - let r1_next: AB::Expr = load_kernel_rom_col::(next, R1_IDX); - let r2: AB::Expr = load_kernel_rom_col::(local, R2_IDX); - let r2_next: AB::Expr = load_kernel_rom_col::(next, R2_IDX); - let r3: AB::Expr = load_kernel_rom_col::(local, R3_IDX); - let r3_next: AB::Expr = load_kernel_rom_col::(next, R3_IDX); - - let one: AB::Expr = AB::Expr::ONE; - - // Gate transition constraints by is_transition() to avoid last-row access. // ========================================================================== // SELECTOR CONSTRAINT // ========================================================================== // sfirst must be binary - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &KERNEL_ROM_SFIRST_TAGS, - &mut idx, - kernel_rom_flag.clone() * sfirst.clone() * (sfirst.clone() - one.clone()), - ); + builder.when(flags.is_active.clone()).assert_bool(krom.s_first); // ========================================================================== // DIGEST CONTIGUITY CONSTRAINTS // ========================================================================== - // When sfirst' = 0 (not the start of a new digest block) and s4' = 0 (not exiting kernel ROM), - // the digest values must remain unchanged. - let not_exiting = one.clone() - s4_next.clone(); - let not_new_block = one.clone() - sfirst_next.clone(); - let contiguity_condition = not_exiting * not_new_block; + // In all rows but last, ensure that the digest repeats except when the next + // row is the start of a new digest (i.e., s_first' = 0) + { + let gate = flags.is_transition.clone() * krom_next.s_first.into().not(); + let builder = &mut builder.when(gate); - // Use a combined gate to share `kernel_rom_flag * contiguity_condition` across all 4 lanes. - let gate = kernel_rom_flag * contiguity_condition; - let mut idx = 0; - tagged_assert_zero(builder, &KERNEL_ROM_DIGEST_TAGS, &mut idx, gate.clone() * (r0_next - r0)); - tagged_assert_zero(builder, &KERNEL_ROM_DIGEST_TAGS, &mut idx, gate.clone() * (r1_next - r1)); - tagged_assert_zero(builder, &KERNEL_ROM_DIGEST_TAGS, &mut idx, gate.clone() * (r2_next - r2)); - tagged_assert_zero(builder, &KERNEL_ROM_DIGEST_TAGS, &mut idx, gate * (r3_next - r3)); + builder.assert_eq(krom_next.root[0], krom.root[0]); + builder.assert_eq(krom_next.root[1], krom.root[1]); + builder.assert_eq(krom_next.root[2], krom.root[2]); + builder.assert_eq(krom_next.root[3], krom.root[3]); + } // ========================================================================== // FIRST ROW CONSTRAINT // ========================================================================== - // s0..s2 are stable once 1 (selector constraints), so ACE -> kernel ROM transition is - // determined by s3' = 1 and s4' = 0. - let kernel_rom_next = s3_next * (one.clone() - s4_next.clone()); - let flag_next_row_first_kernel_rom = ace_flag * kernel_rom_next; - // First row of kernel ROM must have sfirst' = 1. - let mut idx = 0; - tagged_assert_zero( - builder, - &KERNEL_ROM_FIRST_ROW_TAGS, - &mut idx, - flag_next_row_first_kernel_rom * (sfirst_next - one), - ); -} - -// INTERNAL HELPERS -// ================================================================================================ - -/// Load a column from the kernel ROM section of chiplets. -fn load_kernel_rom_col(row: &MainTraceRow, col_idx: usize) -> AB::Expr -where - AB: TaggingAirBuilderExt, -{ - // Kernel ROM columns start after s0, s1, s2, s3, s4 (5 selectors) - let local_idx = KERNEL_ROM_OFFSET + col_idx; - row.chiplets[local_idx].clone().into() + // Uses the precomputed next_is_first flag to detect ACE→KernelROM boundary. + builder.when(flags.next_is_first.clone()).assert_one(krom_next.s_first); } diff --git a/air/src/constraints/chiplets/memory.rs b/air/src/constraints/chiplets/memory.rs index 09d876469f..64fecf2eec 100644 --- a/air/src/constraints/chiplets/memory.rs +++ b/air/src/constraints/chiplets/memory.rs @@ -14,9 +14,9 @@ //! | idx0, idx1 | Element index bits (0-3) | //! | clk | Clock cycle of operation | //! | v0-v3 | Memory word values | -//! | d0, d1 | Delta tracking columns | -//! | d_inv | Delta inverse | -//! | f_scw | Same context/word flag | +//! | d0, d1 | Lower/upper 16 bits of the active delta | +//! | d_inv | Inverse of the active delta (docs: column `t`) | +//! | f_sca | Same context/addr flag (`is_same_ctx_and_addr`) | //! | w0 | Lower 16 bits of word index (word_addr / 4) | //! | w1 | Upper 16 bits of word index (word_addr / 4) | //! @@ -27,634 +27,212 @@ //! the wiring bus, this proves all memory addresses are valid 32-bit values. //! The `4 * w1` check prevents Goldilocks field wraparound (P > 2^18). -use core::ops::{Add, Mul, Sub}; - use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::LiftedAirBuilder; +use miden_crypto::stark::air::AirBuilder; -use super::selectors::memory_chiplet_flag; +use super::selectors::ChipletFlags; use crate::{ - Felt, MainTraceRow, - constraints::tagging::{TagGroup, TaggingAirBuilderExt, tagged_assert_zero_integrity}, - trace::{ - CHIPLETS_OFFSET, - chiplets::{ - MEMORY_CLK_COL_IDX, MEMORY_CTX_COL_IDX, MEMORY_D_INV_COL_IDX, MEMORY_D0_COL_IDX, - MEMORY_D1_COL_IDX, MEMORY_FLAG_SAME_CONTEXT_AND_WORD, MEMORY_IDX0_COL_IDX, - MEMORY_IDX1_COL_IDX, MEMORY_IS_READ_COL_IDX, MEMORY_IS_WORD_ACCESS_COL_IDX, - MEMORY_V_COL_RANGE, MEMORY_WORD_ADDR_HI_COL_IDX, MEMORY_WORD_ADDR_LO_COL_IDX, - MEMORY_WORD_COL_IDX, - }, - }, -}; - -// TAGGING IDS -// ================================================================================================ - -pub const MEMORY_BASE_ID: usize = super::bitwise::BITWISE_BASE_ID + super::bitwise::BITWISE_COUNT; -pub const MEMORY_COUNT: usize = 22; -const MEMORY_BINARY_BASE_ID: usize = MEMORY_BASE_ID; -const MEMORY_WORD_IDX_BASE_ID: usize = MEMORY_BASE_ID + 4; -const MEMORY_FIRST_ROW_BASE_ID: usize = MEMORY_BASE_ID + 6; -const MEMORY_DELTA_INV_BASE_ID: usize = MEMORY_BASE_ID + 10; -const MEMORY_DELTA_TRANSITION_ID: usize = MEMORY_BASE_ID + 14; -const MEMORY_SCW_FLAG_ID: usize = MEMORY_BASE_ID + 15; -const MEMORY_SCW_READS_ID: usize = MEMORY_BASE_ID + 16; -const MEMORY_VALUE_CONSIST_BASE_ID: usize = MEMORY_BASE_ID + 17; -const MEMORY_ADDR_DECOMP_BASE_ID: usize = MEMORY_BASE_ID + 21; - -const MEMORY_BINARY_NAMESPACE: &str = "chiplets.memory.binary"; -const MEMORY_WORD_IDX_NAMESPACE: &str = "chiplets.memory.word_idx.zero"; -const MEMORY_FIRST_ROW_NAMESPACE: &str = "chiplets.memory.first_row.zero"; -const MEMORY_DELTA_INV_NAMESPACE: &str = "chiplets.memory.delta.inv"; -const MEMORY_DELTA_TRANSITION_NAMESPACE: &str = "chiplets.memory.delta.transition"; -const MEMORY_SCW_FLAG_NAMESPACE: &str = "chiplets.memory.scw.flag"; -const MEMORY_SCW_READS_NAMESPACE: &str = "chiplets.memory.scw.reads"; -const MEMORY_VALUE_CONSIST_NAMESPACE: &str = "chiplets.memory.value.consistency"; -const MEMORY_ADDR_DECOMP_NAMESPACE: &str = "chiplets.memory.addr.decomposition"; - -const MEMORY_BINARY_NAMES: [&str; 4] = [MEMORY_BINARY_NAMESPACE; 4]; -const MEMORY_WORD_IDX_NAMES: [&str; 2] = [MEMORY_WORD_IDX_NAMESPACE; 2]; -const MEMORY_FIRST_ROW_NAMES: [&str; 4] = [MEMORY_FIRST_ROW_NAMESPACE; 4]; -const MEMORY_DELTA_INV_NAMES: [&str; 4] = [MEMORY_DELTA_INV_NAMESPACE; 4]; -const MEMORY_DELTA_TRANSITION_NAMES: [&str; 1] = [MEMORY_DELTA_TRANSITION_NAMESPACE; 1]; -const MEMORY_SCW_FLAG_NAMES: [&str; 1] = [MEMORY_SCW_FLAG_NAMESPACE; 1]; -const MEMORY_SCW_READS_NAMES: [&str; 1] = [MEMORY_SCW_READS_NAMESPACE; 1]; -const MEMORY_VALUE_CONSIST_NAMES: [&str; 4] = [MEMORY_VALUE_CONSIST_NAMESPACE; 4]; - -const MEMORY_BINARY_TAGS: TagGroup = TagGroup { - base: MEMORY_BINARY_BASE_ID, - names: &MEMORY_BINARY_NAMES, -}; -const MEMORY_WORD_IDX_TAGS: TagGroup = TagGroup { - base: MEMORY_WORD_IDX_BASE_ID, - names: &MEMORY_WORD_IDX_NAMES, -}; -const MEMORY_FIRST_ROW_TAGS: TagGroup = TagGroup { - base: MEMORY_FIRST_ROW_BASE_ID, - names: &MEMORY_FIRST_ROW_NAMES, -}; -const MEMORY_DELTA_INV_TAGS: TagGroup = TagGroup { - base: MEMORY_DELTA_INV_BASE_ID, - names: &MEMORY_DELTA_INV_NAMES, -}; -const MEMORY_DELTA_TRANSITION_TAGS: TagGroup = TagGroup { - base: MEMORY_DELTA_TRANSITION_ID, - names: &MEMORY_DELTA_TRANSITION_NAMES, -}; -const MEMORY_SCW_FLAG_TAGS: TagGroup = TagGroup { - base: MEMORY_SCW_FLAG_ID, - names: &MEMORY_SCW_FLAG_NAMES, -}; -const MEMORY_SCW_READS_TAGS: TagGroup = TagGroup { - base: MEMORY_SCW_READS_ID, - names: &MEMORY_SCW_READS_NAMES, -}; -const MEMORY_VALUE_CONSIST_TAGS: TagGroup = TagGroup { - base: MEMORY_VALUE_CONSIST_BASE_ID, - names: &MEMORY_VALUE_CONSIST_NAMES, + MainCols, MidenAirBuilder, + constraints::{chiplets::columns::MemoryCols, constants::TWO_POW_16, utils::BoolNot}, }; // ENTRY POINTS // ================================================================================================ /// Enforce all memory chiplet constraints. -pub fn enforce_memory_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: TaggingAirBuilderExt, -{ - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let s1_next: AB::Expr = next.chiplets[1].clone().into(); - let s2_next: AB::Expr = next.chiplets[2].clone().into(); - - let is_transition: AB::Expr = builder.is_transition(); - - enforce_memory_constraints_all_rows(builder, local, next); - - let flag_next_row_first_memory = is_transition.clone() - * flag_next_row_first_memory(s0.clone(), s1.clone(), s1_next, s2_next.clone()); - enforce_memory_constraints_first_row(builder, local, next, flag_next_row_first_memory); - - let flag_memory_active_not_last = - is_transition * flag_memory_active_not_last_row(s0, s1, s2_next); - enforce_memory_constraints_all_rows_except_last( - builder, - local, - next, - flag_memory_active_not_last, - ); -} - -/// Enforce memory chiplet constraints that apply to all rows. /// -/// This enforces: -/// - Binary constraints for selectors and indices -pub fn enforce_memory_constraints_all_rows( - builder: &mut AB, - local: &MainTraceRow, - _next: &MainTraceRow, -) where - AB: TaggingAirBuilderExt, -{ - // Compute memory active flag from top-level selectors - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let s2: AB::Expr = local.chiplets[2].clone().into(); - let memory_flag = memory_chiplet_flag(s0, s1, s2); - - // Load memory columns using typed struct - let cols: MemoryColumns = MemoryColumns::from_row::(local); - - let one: AB::Expr = AB::Expr::ONE; - - // Binary constraints - let gate = memory_flag.clone(); - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &MEMORY_BINARY_TAGS, - &mut idx, - gate.clone() * cols.is_read.clone() * (cols.is_read.clone() - one.clone()), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_BINARY_TAGS, - &mut idx, - gate.clone() * cols.is_word.clone() * (cols.is_word.clone() - one.clone()), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_BINARY_TAGS, - &mut idx, - gate.clone() * cols.idx0.clone() * (cols.idx0.clone() - one.clone()), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_BINARY_TAGS, - &mut idx, - gate * cols.idx1.clone() * (cols.idx1.clone() - one), - ); - - // For word access, idx bits must be zero (only element accesses use idx0/idx1). - let word_gate = memory_flag.clone() * cols.is_word.clone(); - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &MEMORY_WORD_IDX_TAGS, - &mut idx, - word_gate.clone() * cols.idx0.clone(), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_WORD_IDX_TAGS, - &mut idx, - word_gate * cols.idx1.clone(), - ); - - // Address decomposition: word_addr = 4 * (w0 + 2^16 * w1) - // This proves that the word address is a valid 32-bit value (when combined with - // range checks on w0, w1, and 4*w1 via the wiring bus). - let word_index = cols.w0.clone() + AB::Expr::from_u64(1 << 16) * cols.w1.clone(); - let addr_decomp_tags = TagGroup { - base: MEMORY_ADDR_DECOMP_BASE_ID, - names: &[MEMORY_ADDR_DECOMP_NAMESPACE], - }; - tagged_assert_zero_integrity( - builder, - &addr_decomp_tags, - &mut 0, - memory_flag * (cols.word_addr.clone() - AB::Expr::from_u64(4) * word_index), - ); -} - -/// Enforce memory first row initialization constraints. -/// -/// This constraint is enforced in the last row of the previous trace segment (bitwise). -/// When entering the memory chiplet, unwritten values must be 0. -pub fn enforce_memory_constraints_first_row( - builder: &mut AB, - _local: &MainTraceRow, - cols_first: &MainTraceRow, - flag_next_row_first_memory: AB::Expr, -) where - AB: TaggingAirBuilderExt, -{ - // Load first memory row columns using typed struct - let cols_next: MemoryColumns = MemoryColumns::from_row::(cols_first); - - let one: AB::Expr = AB::Expr::ONE; - - // Compute constraint flags for all 4 word elements - let [c0, c1, c2, c3] = cols_next.compute_value_constraint_flags(one.clone()); - - // First row: if v'[i] is not written to, then v'[i] = 0 - let gate = flag_next_row_first_memory; - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &MEMORY_FIRST_ROW_TAGS, - &mut idx, - gate.clone() * c0 * cols_next.values[0].clone(), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_FIRST_ROW_TAGS, - &mut idx, - gate.clone() * c1 * cols_next.values[1].clone(), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_FIRST_ROW_TAGS, - &mut idx, - gate.clone() * c2 * cols_next.values[2].clone(), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_FIRST_ROW_TAGS, - &mut idx, - gate * c3 * cols_next.values[3].clone(), - ); -} - -/// Enforce memory transition constraints (all rows except last). -/// -/// This enforces: -/// - Delta inverse constraints -/// - Context/address/clock delta constraints -/// - Same context/word flag constraints -/// - Value consistency constraints -pub fn enforce_memory_constraints_all_rows_except_last( +/// The memory trace is ordered by (ctx, addr, clk). Consecutive rows are compared +/// via deltas to enforce monotonicity of this ordering. A select mechanism +/// using `ctx_changed` and `addr_changed` (docs: `n0`, `n1`) determines which delta +/// is active: context change takes precedence over address change, which takes +/// precedence over clock change. +pub fn enforce_memory_constraints( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - flag_memory_active_not_last: AB::Expr, + local: &MainCols, + next: &MainCols, + flags: &ChipletFlags, ) where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { - // Load columns using typed struct - let cols: MemoryColumns = MemoryColumns::from_row::(local); - let cols_next: MemoryColumns = MemoryColumns::from_row::(next); - - let one: AB::Expr = AB::Expr::ONE; - - let deltas = MemoryDeltas::new::(&cols, &cols_next, one.clone()); - - // ========================================================================== - // DELTA INVERSE CONSTRAINTS - // ========================================================================== - enforce_delta_inverse_constraints::( - builder, - flag_memory_active_not_last.clone(), - &deltas, - one.clone(), - ); + let cols = local.memory(); + let cols_next = next.memory(); // ========================================================================== - // DELTA CONSTRAINTS (monotonicity) - // ========================================================================== - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &MEMORY_DELTA_TRANSITION_TAGS, - &mut idx, - flag_memory_active_not_last.clone() - * (deltas.computed_delta.clone() - deltas.delta_next.clone()), - ); - + // BINARY CONSTRAINTS (all rows) // ========================================================================== - // SAME CONTEXT/WORD FLAG - // ========================================================================== - // f_scw' = !n0 * !n1 - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &MEMORY_SCW_FLAG_TAGS, - &mut idx, - flag_memory_active_not_last.clone() - * (cols_next.flag_same_ctx_word.clone() - - (one.clone() - deltas.n0.clone()) * (one.clone() - deltas.n1.clone())), - ); + // Selectors and indices must be binary. + { + let builder = &mut builder.when(flags.is_active.clone()); + builder.assert_bool(cols.is_read); + builder.assert_bool(cols.is_word); + builder.assert_bool(cols.idx0); + builder.assert_bool(cols.idx1); + + // For word access, idx bits must be zero (only element accesses use idx0/idx1). + { + let builder = &mut builder.when(cols.is_word); + builder.assert_zero(cols.idx0); + builder.assert_zero(cols.idx1); + } + } - // ========================================================================== - // SAME CONTEXT/WORD READ-ONLY CONSTRAINTS - // ========================================================================== - enforce_scw_readonly_constraint::( - builder, - flag_memory_active_not_last.clone(), - &cols, - &cols_next, - &deltas, - one.clone(), - ); + // not_written[i] = 1 when v'[i] is NOT being written and must be constrained. + // Computed once, shared between first-row initialization and value consistency. + let not_written = compute_not_written_flags::(cols_next); // ========================================================================== - // VALUE CONSISTENCY + // FIRST-ROW INITIALIZATION // ========================================================================== - - // Compute constraint flags for all 4 elements - let [c0, c1, c2, c3] = cols_next.compute_value_constraint_flags(one.clone()); - - // When v'[i] is not written to: - // - if f_scw' = 1: v'[i] = v[i] (copy from previous) - // - if f_scw' = 0: v'[i] = 0 (initialize to zero) - // Simplified: v'[i] = f_scw' * v[i] - let constrain_value = |c: AB::Expr, v: AB::Expr, v_next: AB::Expr| { - flag_memory_active_not_last.clone() - * c - * (v_next - cols_next.flag_same_ctx_word.clone() * v) - }; - - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &MEMORY_VALUE_CONSIST_TAGS, - &mut idx, - constrain_value(c0, cols.values[0].clone(), cols_next.values[0].clone()), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_VALUE_CONSIST_TAGS, - &mut idx, - constrain_value(c1, cols.values[1].clone(), cols_next.values[1].clone()), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_VALUE_CONSIST_TAGS, - &mut idx, - constrain_value(c2, cols.values[2].clone(), cols_next.values[2].clone()), - ); - tagged_assert_zero_integrity( - builder, - &MEMORY_VALUE_CONSIST_TAGS, - &mut idx, - constrain_value(c3, cols.values[3].clone(), cols_next.values[3].clone()), - ); -} - -// INTERNAL HELPERS -// ================================================================================================ - -/// Derived delta values for memory transitions. -/// -/// These capture the deltas, selection flags, and the computed monotonicity term -/// used across multiple constraint groups. -struct MemoryDeltas { - ctx_delta: E, - addr_delta: E, - clk_delta: E, - n0: E, - n1: E, - delta_next: E, - computed_delta: E, -} - -impl MemoryDeltas -where - E: Clone + Add + Sub + Mul, -{ - fn new(cols: &MemoryColumns, cols_next: &MemoryColumns, one: E) -> Self - where - AB: LiftedAirBuilder, - AB::Expr: Into, + // Enforced at the bitwise→memory boundary. When entering the memory chiplet, + // values not being written must be zero. { - let ctx_delta = cols_next.ctx.clone() - cols.ctx.clone(); - let addr_delta = cols_next.word_addr.clone() - cols.word_addr.clone(); - let clk_delta = cols_next.clk.clone() - cols.clk.clone(); - let two_pow_16: E = AB::Expr::from_u32(1 << 16).into(); - - // n0 = ctx_delta * d_inv' - // n1 = addr_delta * d_inv' - let n0 = ctx_delta.clone() * cols_next.d_inv.clone(); - let n1 = addr_delta.clone() * cols_next.d_inv.clone(); - - // delta_next = d1' * 2^16 + d0' - let delta_next = cols_next.d1.clone() * two_pow_16 + cols_next.d0.clone(); - - // n0 * ctx_delta + !n0 * (n1 * addr_delta + !n1 * clk_delta) = delta_next - let computed_delta = n0.clone() * ctx_delta.clone() - + (one.clone() - n0.clone()) - * (n1.clone() * addr_delta.clone() + (one - n1.clone()) * clk_delta.clone()); - - Self { - ctx_delta, - addr_delta, - clk_delta, - n0, - n1, - delta_next, - computed_delta, + let builder = &mut builder.when(flags.next_is_first.clone()); + for (i, nw) in not_written.iter().enumerate() { + builder.when(nw.clone()).assert_zero(cols_next.values[i]); } } -} -/// Typed access to memory chiplet columns. -/// -/// This struct provides named access to memory columns, eliminating error-prone -/// index arithmetic. Created from a `MainTraceRow` reference. -pub struct MemoryColumns { - /// Read/write selector: 1=read, 0=write - pub is_read: E, - /// Element/word access: 0=element, 1=word - pub is_word: E, - /// Context ID - pub ctx: E, - /// Word address - pub word_addr: E, - /// First bit of element index - pub idx0: E, - /// Second bit of element index - pub idx1: E, - /// Clock cycle - pub clk: E, - /// Memory word values (4 elements) - pub values: [E; 4], - /// Delta low 16 bits - pub d0: E, - /// Delta high 16 bits - pub d1: E, - /// Delta inverse - pub d_inv: E, - /// Same context/word flag - pub flag_same_ctx_word: E, - /// Lower 16 bits of word index (word_addr / 4) - pub w0: E, - /// Upper 16 bits of word index (word_addr / 4) - pub w1: E, -} - -impl MemoryColumns { - /// Extract memory columns from a main trace row. - pub fn from_row(row: &MainTraceRow) -> Self - where - AB: LiftedAirBuilder, - AB::Var: Into + Clone, + // ========================================================================== + // TRANSITION CONSTRAINTS (all rows except last) + // ========================================================================== + // Enforces: delta inverse, monotonicity, same-context/addr flag, read-only, + // and value consistency. + let builder = &mut builder.when(flags.is_transition.clone()); + + // --- delta inverse --- + // d_inv (docs: column `t`) is shared across all three delta levels (ctx, addr, clk). + // The assert_bool + assert_zero pairs below form conditional inverses that force d_inv + // to the correct value at each level. + let d_inv_next = cols_next.d_inv; + + // Context: prover sets d_inv = 1/ctx_delta → ctx_changed = 1. + let ctx_delta = cols_next.ctx - cols.ctx; + let ctx_changed = ctx_delta.clone() * d_inv_next; + let same_ctx = ctx_changed.not(); + // ctx_changed must be boolean. When ctx_delta ≠ 0, this forces ctx_changed ∈ {0, 1}. + // If ctx_changed were 0 (same_ctx = 1), the assert_zero(ctx_delta) below would + // require ctx_delta = 0 — contradiction. So ctx_changed = 1, forcing d_inv = 1/ctx_delta. + builder.assert_bool(ctx_changed.clone()); + + // Address: prover sets d_inv = 1/addr_delta → addr_changed = 1. + // Only meaningful when same_ctx = 1; when context changes, addr_changed = + // addr_delta/ctx_delta which is unconstrained, but always gated by same_ctx. + let addr_delta = cols_next.word_addr - cols.word_addr; + let addr_changed = addr_delta.clone() * d_inv_next; + let same_addr = addr_changed.not(); + + // When context is unchanged (same_ctx = 1): { - let load = |global_idx: usize| { - let local_idx = global_idx - CHIPLETS_OFFSET; - row.chiplets[local_idx].clone().into() - }; - - MemoryColumns { - is_read: load(MEMORY_IS_READ_COL_IDX), - is_word: load(MEMORY_IS_WORD_ACCESS_COL_IDX), - ctx: load(MEMORY_CTX_COL_IDX), - word_addr: load(MEMORY_WORD_COL_IDX), - idx0: load(MEMORY_IDX0_COL_IDX), - idx1: load(MEMORY_IDX1_COL_IDX), - clk: load(MEMORY_CLK_COL_IDX), - values: core::array::from_fn(|i| load(MEMORY_V_COL_RANGE.start + i)), - d0: load(MEMORY_D0_COL_IDX), - d1: load(MEMORY_D1_COL_IDX), - d_inv: load(MEMORY_D_INV_COL_IDX), - flag_same_ctx_word: load(MEMORY_FLAG_SAME_CONTEXT_AND_WORD), - w0: load(MEMORY_WORD_ADDR_LO_COL_IDX), - w1: load(MEMORY_WORD_ADDR_HI_COL_IDX), - } + let builder = &mut builder.when(same_ctx.clone()); + // Completes the ctx_changed enforcement: ctx_delta must be zero. + builder.assert_zero(ctx_delta.clone()); + // addr_changed must be boolean. Same enforcement as ctx_changed: when + // addr_delta ≠ 0, this + the assert_zero(addr_delta) below forces + // addr_changed = 1, i.e. d_inv = 1/addr_delta. + builder.assert_bool(addr_changed.clone()); + // Completes the addr_changed enforcement: addr_delta must be zero. + builder.when(same_addr.clone()).assert_zero(addr_delta.clone()); } - /// Compute constraint flags c_0, c_1, c_2, c_3 for value consistency constraints. - /// - /// c_i = 1 when v[i] needs to be constrained (not being written to), 0 otherwise. - /// - /// For each element i: - /// - Read operation: c_i = 1 (always constrain) - /// - Write operation, element access, element i selected: c_i = 0 (being written, no - /// constraining needed) - /// - Write operation, otherwise: c_i = 1 (not being written, constrain) - /// - /// Logic: c_i = is_read + is_write * is_element * !f_i - /// = is_read + (1 - is_read) * (1 - is_word) * (1 - f_i) - pub fn compute_value_constraint_flags(&self, one: One) -> [E; 4] - where - E: Add + Sub + Mul, - One: Into, + // --- same context/addr flag --- + // f_sca' = 1 when both context and word address are unchanged between rows. + // Stored in a dedicated column for degree reduction (same_ctx * same_addr is + // degree 4; the column lets downstream constraints use it at degree 1). + // Not constrained in the first row (intentional — first-row constraints use + // not_written flags directly, not f_sca). + let same_ctx_and_addr = cols_next.is_same_ctx_and_addr; + builder.assert_eq(same_ctx_and_addr, same_ctx.clone() * same_addr.clone()); + + // --- monotonicity --- + // The priority-selected delta must equal the range-checked decomposition. + // d0, d1 are range-checked 16-bit limbs, so delta_next >= 0. For ctx and addr, + // delta = 0 would contradict the flag being 1, so those deltas are strictly + // positive. For clk, delta = 0 is allowed (duplicate reads; see read-only). + // ctx changed → ctx_delta + // addr changed → addr_delta (reachable only when same context) + // neither → clk_delta + let clk_delta = cols_next.clk - cols.clk; + let computed_delta = { + let ctx_term = ctx_changed * ctx_delta; + let addr_term = addr_changed * addr_delta; + let clk_term = same_addr * clk_delta.clone(); + ctx_term + same_ctx * (addr_term + clk_term) + }; + let delta_next = cols_next.d1 * TWO_POW_16 + cols_next.d0; + builder.assert_eq(computed_delta, delta_next); + + // --- read-only constraint --- + // When context/addr are unchanged (f_sca'=1) and the clock doesn't advance, + // both operations must be reads. + // + // clk_no_change = 1 - clk_delta * d_inv is used as a when() gate. Unlike the ctx + // and addr levels, no constraint forces d_inv = 1/clk_delta. This is intentional: + // clk advances → prover must set d_inv = 1/clk_delta to get clk_no_change = 0, + // otherwise the gate stays active and blocks writes the prover needs. + // clk unchanged → clk_delta = 0, so clk_no_change = 1 regardless of d_inv. + // One-sided safe: a wrong d_inv can only block writes, never enable them. { - let one = one.into(); - - let is_write = one.clone() - self.is_read.clone(); - let is_element = one.clone() - self.is_word.clone(); + let clk_no_change = AB::Expr::ONE - clk_delta * d_inv_next; + let is_write = cols.is_read.into().not(); + let is_write_next = cols_next.is_read.into().not(); + let any_write = is_write + is_write_next; - // Element selection flags (f_i = 1 when idx0,idx1 select element i) - let f0 = (one.clone() - self.idx1.clone()) * (one.clone() - self.idx0.clone()); - let f1 = (one.clone() - self.idx1.clone()) * self.idx0.clone(); - let f2 = self.idx1.clone() * (one.clone() - self.idx0.clone()); - let f3 = self.idx1.clone() * self.idx0.clone(); - - // c_i = is_read + is_write * is_element * !f_i - let compute_c = |f_i: E| { - let not_f_i = one.clone() - f_i; - self.is_read.clone() + is_write.clone() * is_element.clone() * not_f_i - }; + builder.when(same_ctx_and_addr).when(clk_no_change).assert_zero(any_write); + } - [compute_c(f0), compute_c(f1), compute_c(f2), compute_c(f3)] + // --- value consistency --- + // Values not being written must follow the consistency rule: + // same context/addr (f_sca'=1): v'[i] = v[i] (copy from previous row) + // new context/addr (f_sca'=0): v'[i] = 0 (initialize to zero) + // Combined: v'[i] = f_sca' * v[i] + let values = cols.values; + let values_next = cols_next.values; + for (i, nw) in not_written.into_iter().enumerate() { + builder.when(nw).assert_eq(values_next[i], same_ctx_and_addr * values[i]); } } -/// Enforce delta inverse constraints for ctx/addr/clk monotonicity. -/// -/// n0 and n1 are binary flags computed via delta inverse: -/// - n0 = 1 iff ctx changes (ctx_delta != 0) -/// - n1 = 1 iff addr changes when ctx doesn't (addr_delta != 0 and ctx_delta = 0) -fn enforce_delta_inverse_constraints( - builder: &mut AB, - flag_memory_active_not_last: AB::Expr, - deltas: &MemoryDeltas, - one: AB::Expr, -) where - AB: TaggingAirBuilderExt, -{ - let n0 = deltas.n0.clone(); - let n1 = deltas.n1.clone(); - let ctx_delta = deltas.ctx_delta.clone(); - let addr_delta = deltas.addr_delta.clone(); - - // Extract negations for reuse - let not_n0 = one.clone() - n0.clone(); - let not_n1 = one.clone() - n1.clone(); - - let gate = flag_memory_active_not_last; - let gate_not_n0 = gate.clone() * not_n0.clone(); - - let mut idx = 0; - // n0 is binary - tagged_assert_zero_integrity( - builder, - &MEMORY_DELTA_INV_TAGS, - &mut idx, - gate * n0.clone() * (n0.clone() - one.clone()), - ); - // !n0 => ctx_delta = 0 - tagged_assert_zero_integrity( - builder, - &MEMORY_DELTA_INV_TAGS, - &mut idx, - gate_not_n0.clone() * ctx_delta.clone(), - ); - // !n0 and n1 is binary - tagged_assert_zero_integrity( - builder, - &MEMORY_DELTA_INV_TAGS, - &mut idx, - gate_not_n0.clone() * n1.clone() * (n1.clone() - one.clone()), - ); - // !n0 and !n1 => addr_delta = 0 - tagged_assert_zero_integrity( - builder, - &MEMORY_DELTA_INV_TAGS, - &mut idx, - gate_not_n0 * not_n1 * addr_delta.clone(), - ); -} +// INTERNAL HELPERS +// ================================================================================================ -/// Enforce read-only access when context and word address are unchanged. -fn enforce_scw_readonly_constraint( - builder: &mut AB, - flag_memory_active_not_last: AB::Expr, - cols: &MemoryColumns, - cols_next: &MemoryColumns, - deltas: &MemoryDeltas, - one: AB::Expr, -) where - AB: TaggingAirBuilderExt, +/// Compute "not written" flags for each of the 4 word elements. +/// +/// Returns `not_written[i]`: 1 when `v[i]` is NOT the write target (must be constrained), +/// 0 when `v[i]` IS being written (unconstrained). +/// +/// The three operation modes: +/// - **Read** (`is_read=1`): all flags = 1 (reads don't change any value) +/// - **Word write** (`is_word=1`): all flags = 0 (all 4 elements are written) +/// - **Element write** (`is_word=0, is_read=0`): flag = 0 for the selected element, 1 for the other +/// three +/// +/// Corresponds to `c_i` in the docs, with `selected[i]` ≡ `f_i`. +/// +/// Formula: `not_written[i] = is_read + is_write * is_element * !selected[i]` +fn compute_not_written_flags(cols: &MemoryCols) -> [AB::Expr; 4] +where + AB: MidenAirBuilder, { - // If ctx/word are unchanged and clk_delta = 0, both rows must be reads. - // Constraint: f_scw' * (1 - clk_delta * d_inv') * (is_write + is_write') = 0 - - let clk_no_change = one.clone() - deltas.clk_delta.clone() * cols_next.d_inv.clone(); - - let is_write = one.clone() - cols.is_read.clone(); - let is_write_next = one.clone() - cols_next.is_read.clone(); - let any_write = is_write + is_write_next; - - let mut idx = 0; - tagged_assert_zero_integrity( - builder, - &MEMORY_SCW_READS_TAGS, - &mut idx, - flag_memory_active_not_last - * cols_next.flag_same_ctx_word.clone() - * clk_no_change - * any_write, - ); -} - -/// Memory chiplet flag for current row active and continuing to next row. -pub fn flag_memory_active_not_last_row(s0: E, s1: E, s2_next: E) -> E { - // Memory active when s0 = s1 = 1 and not transitioning out (s2' = 0) - s0 * s1 * (E::ONE - s2_next) -} - -/// Flag for transitioning into memory chiplet (first row of memory). -pub fn flag_next_row_first_memory( - s0: E, - s1: E, - s1_next: E, - s2_next: E, -) -> E { - // Current row is bitwise (!s1), next row is memory (s1' & !s2') - (E::ONE - s1) * s0.clone() * s1_next * (E::ONE - s2_next) + let is_read = cols.is_read; + let is_write = is_read.into().not(); + + let is_word = cols.is_word; + let is_element = is_word.into().not(); + + // One-hot element selection: selected[i] = 1 when idx = 2*idx1 + idx0 equals i. + let idx0 = cols.idx0; + let idx1 = cols.idx1; + let not_idx0 = idx0.into().not(); + let not_idx1 = idx1.into().not(); + + let selected = [ + not_idx1.clone() * not_idx0.clone(), // element 0: idx = 0b00 + not_idx1 * idx0, // element 1: idx = 0b01 + idx1 * not_idx0, // element 2: idx = 0b10 + idx1 * idx0, // element 3: idx = 0b11 + ]; + + // not_written[i] = is_read + is_write * is_element * !selected[i] + let is_element_write = is_write * is_element; + selected.map(|s_i| is_read + is_element_write.clone() * s_i.not()) } diff --git a/air/src/constraints/chiplets/mod.rs b/air/src/constraints/chiplets/mod.rs index 4f52c9f23c..da01faa4f5 100644 --- a/air/src/constraints/chiplets/mod.rs +++ b/air/src/constraints/chiplets/mod.rs @@ -1,8 +1,9 @@ -//! Chiplets constraints module (partial). +//! Chiplets constraints module. //! //! Currently we implement: -//! - chiplet selector constraints -//! - hasher chiplet main-trace constraints +//! - chiplet selector constraints (including hasher internal selectors) +//! - permutation sub-chiplet main-trace constraints +//! - controller sub-chiplet main-trace constraints //! - bitwise chiplet main-trace constraints //! - memory chiplet main-trace constraints //! - ACE chiplet main-trace constraints @@ -13,14 +14,16 @@ pub mod ace; pub mod bitwise; pub mod bus; -pub mod hasher; +pub mod columns; +pub mod hasher_control; pub mod kernel_rom; pub mod memory; +pub mod permutation; pub mod selectors; -use miden_crypto::stark::air::LiftedAirBuilder; +use selectors::ChipletSelectors; -use crate::{Felt, MainTraceRow}; +use crate::{MainCols, MidenAirBuilder}; // ENTRY POINTS // ================================================================================================ @@ -28,15 +31,21 @@ use crate::{Felt, MainTraceRow}; /// Enforces chiplets main-trace constraints. pub fn enforce_main( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, + selectors: &ChipletSelectors, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - selectors::enforce_chiplet_selectors(builder, local, next); - hasher::enforce_hasher_constraints(builder, local, next); - bitwise::enforce_bitwise_constraints(builder, local, next); - memory::enforce_memory_constraints(builder, local, next); - ace::enforce_ace_constraints(builder, local, next); - kernel_rom::enforce_kernel_rom_constraints(builder, local, next); + // Selector constraints (including hasher internal selectors) are enforced in + // build_chiplet_selectors (called from lib.rs). + + // Hasher sub-chiplets: permutation + controller. + permutation::enforce_permutation_constraints(builder, local, next, &selectors.permutation); + hasher_control::enforce_controller_constraints(builder, local, next, &selectors.controller); + + bitwise::enforce_bitwise_constraints(builder, local, next, &selectors.bitwise); + memory::enforce_memory_constraints(builder, local, next, &selectors.memory); + ace::enforce_ace_constraints_all_rows(builder, local, next, &selectors.ace); + kernel_rom::enforce_kernel_rom_constraints(builder, local, next, &selectors.kernel_rom); } diff --git a/air/src/constraints/chiplets/permutation/mod.rs b/air/src/constraints/chiplets/permutation/mod.rs new file mode 100644 index 0000000000..36e81bc210 --- /dev/null +++ b/air/src/constraints/chiplets/permutation/mod.rs @@ -0,0 +1,112 @@ +//! Permutation sub-chiplet constraints. +//! +//! The permutation sub-chiplet executes Poseidon2 permutations as 16-row cycles. +//! It is active when `s_perm = 1` (the permutation segment selector). +//! +//! ## Sub-modules +//! +//! - [`state`]: Poseidon2 round transition constraints +//! +//! ## Column Layout (via [`PermutationCols`]) +//! +//! | Column | Purpose | +//! |--------------|---------| +//! | w0, w1, w2 | S-box witnesses (same physical columns as hasher selectors) | +//! | h[0..12) | Poseidon2 state (RATE0, RATE1, CAP) | +//! | multiplicity | Request multiplicity (same physical column as node_index) | +//! | s_perm | Permutation segment selector (consumed by chiplet selectors) | + +pub mod state; + +use core::borrow::Borrow; + +use miden_crypto::stark::air::AirBuilder; + +use crate::{ + MainCols, MidenAirBuilder, + constraints::chiplets::{ + columns::{HasherPeriodicCols, PeriodicCols}, + selectors::ChipletFlags, + }, +}; + +// ENTRY POINT +// ================================================================================================ + +/// Enforce all permutation sub-chiplet constraints. +/// +/// Receives pre-computed [`ChipletFlags`] from `build_chiplet_selectors`. The `s_perm` +/// column is never referenced directly by constraint code. +pub fn enforce_permutation_constraints( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + flags: &ChipletFlags, +) where + AB: MidenAirBuilder, +{ + let periodic_hasher: HasherPeriodicCols = { + let periodic: &PeriodicCols = builder.periodic_values().borrow(); + periodic.hasher + }; + + let cols = local.permutation(); + let cols_next = next.permutation(); + + // not_cycle_end: 1 on perm-cycle rows 0-14, 0 on the cycle boundary row 15. + let not_cycle_end: AB::Expr = [ + periodic_hasher.is_init_ext, + periodic_hasher.is_ext, + periodic_hasher.is_packed_int, + periodic_hasher.is_int_ext, + ] + .map(Into::into) + .into_iter() + .sum(); + + // --- Poseidon2 permutation step constraints --- + // Gate by is_active (= s_perm, degree 1) alone. This is sound because + // the tri-state selector constraints confine s_perm to hasher rows. + // Keeping the gate at degree 1 is critical: the S-box has degree 7, and + // with the periodic selector (degree 1), the total constraint degree is + // 1 + 1 + 7 = 9, which matches the system's max degree. + state::enforce_permutation_steps( + builder, + flags.is_active.clone(), + cols, + cols_next, + &periodic_hasher, + ); + + // --- Structural confinement on perm rows --- + // is_boundary, direction_bit, and mrupdate_id are unused on permutation rows + // and must be zero to avoid accidental coupling with controller-side logic. + builder.when(flags.is_active.clone()).assert_zeros(cols.unused_padding()); + + // --- Multiplicity constancy within perm cycles --- + // On perm rows that are NOT the cycle boundary (row 15), multiplicity must stay + // constant. This ensures each 16-row cycle has a single multiplicity value. + // Degree: is_active(1) * not_cycle_end(1) * diff(1) = 3. + builder + .when(flags.is_active.clone()) + .when(not_cycle_end.clone()) + .assert_eq(cols_next.multiplicity, cols.multiplicity); + + // --- Cycle boundary alignment --- + // The permutation section must be aligned to the 16-row Poseidon2 cycle: the + // first perm row must land on cycle row 0 and the last on cycle row 15. + // Together these guarantee every permutation spans exactly one complete cycle, + // so the periodic column selectors assign the correct round type to each row. + // + // Entry alignment: the row before the first perm row (= last controller row) + // must be on cycle row 15. `flags.next_is_first` = `ctrl.is_last * s_perm'`, + // which equals `ctrl.is_last` because the transition rules force `s_perm' = 1` + // when `ctrl.is_last` fires. + // Degree: next_is_first(3) * not_cycle_end(1) = 4. + builder.when(flags.next_is_first.clone()).assert_zero(not_cycle_end.clone()); + + // Exit safety: the last permutation row must be on cycle row 15. + // This prevents cross-chiplet next-row reads from firing under perm gates. + // Degree: is_last(2) * not_cycle_end(1) = 3. + builder.when(flags.is_last.clone()).assert_zero(not_cycle_end); +} diff --git a/air/src/constraints/chiplets/permutation/state.rs b/air/src/constraints/chiplets/permutation/state.rs new file mode 100644 index 0000000000..dee5ef7633 --- /dev/null +++ b/air/src/constraints/chiplets/permutation/state.rs @@ -0,0 +1,337 @@ +//! Permutation chiplet state transition constraints. +//! +//! This module enforces the Poseidon2 permutation constraints for the permutation sub-chiplet. +//! The permutation operates on a 16-row cycle with five types of steps: +//! +//! - **Row 0 (init+ext1)**: Merged init linear layer + first external round +//! - **Rows 1-3, 12-14 (external)**: Single external round: add RCs, S-box^7, M_E +//! - **Rows 4-10 (packed internal)**: 3 internal rounds packed per row using witnesses as S-box +//! outputs +//! - **Row 11 (int+ext)**: Last internal round + first trailing external round +//! - **Row 15 (boundary)**: No step constraint (cycle boundary, final permutation state) +//! +//! ## Poseidon2 Parameters +//! +//! - State width: 12 field elements +//! - External rounds: 8 (4 initial + 4 terminal) +//! - Internal rounds: 22 +//! - S-box: x^7 + +use miden_core::{chiplets::hasher::Hasher, field::PrimeCharacteristicRing}; +use miden_crypto::stark::air::AirBuilder; + +use crate::{ + MidenAirBuilder, + constraints::chiplets::columns::{HasherPeriodicCols, PermutationCols}, + trace::chiplets::hasher::STATE_WIDTH, +}; + +// CONSTRAINT HELPERS +// ================================================================================================ + +/// Enforces Poseidon2 permutation step constraints on the 16-row packed cycle. +/// +/// These constraints are gated by `perm_gate = flags.is_active`, so they only +/// fire on permutation segment rows. +/// +/// ## Step Types +/// +/// 1. **Init+ext1 (row 0)**: `h' = M_E(S(M_E(h) + ark))` — degree 9 +/// 2. **Single ext (rows 1-3, 12-14)**: `h' = M_E(S(h + ark))` — degree 9 +/// 3. **Packed 3x internal (rows 4-10)**: witnesses + affine next-state — degree 9 / 3 +/// 4. **Int+ext (row 11)**: witness + `h' = M_E(S(y + ark))` — degree 9 +/// 5. **Boundary (row 15)**: No constraint +/// +/// The witness columns `w[0..2]` correspond to the S-box outputs on permutation rows. +pub fn enforce_permutation_steps( + builder: &mut AB, + perm_gate: AB::Expr, + cols: &PermutationCols, + cols_next: &PermutationCols, + periodic: &HasherPeriodicCols, +) where + AB: MidenAirBuilder, +{ + let h: [AB::Expr; STATE_WIDTH] = core::array::from_fn(|i| cols.state[i].into()); + let h_next: [AB::Expr; STATE_WIDTH] = core::array::from_fn(|i| cols_next.state[i].into()); + let w: [AB::Expr; 3] = core::array::from_fn(|i| cols.witnesses[i].into()); + + // Step-type selectors + let is_init_ext: AB::Expr = periodic.is_init_ext.into(); + let is_ext: AB::Expr = periodic.is_ext.into(); + let is_packed_int: AB::Expr = periodic.is_packed_int.into(); + let is_int_ext: AB::Expr = periodic.is_int_ext.into(); + + // Shared round constants + let ark: [AB::Expr; STATE_WIDTH] = core::array::from_fn(|i| periodic.ark[i].into()); + + // Lift Felt constants needed by pure math helpers. + let mat_diag: [AB::Expr; STATE_WIDTH] = core::array::from_fn(|i| Hasher::MAT_DIAG[i].into()); + let ark_int_21: AB::Expr = Hasher::ARK_INT[21].into(); + + // ------------------------------------------------------------------------- + // 0. Unused witness zeroing + // + // Unused witness columns are forced to zero. On non-packed rows, this means: + // - rows 0-3, 12-15: w0 = w1 = w2 = 0 + // - row 11: w1 = w2 = 0 + // - rows 4-10: w0, w1, w2 unconstrained here (checked by packed witness equations) + // + // These constraints are primarily defensive. They make permutation rows inert when + // witnesses are reused and reduce accidental coupling with controller-side selector + // logic. + // + // Gate degrees: + // - perm_gate(1) * (1 - is_packed_int - is_int_ext)(1) = 2 for w0 + // - perm_gate(1) * (1 - is_packed_int)(1) = 2 for w1,w2 + // Constraint degree: gate(2) * witness(1) = 3 + // ------------------------------------------------------------------------- + // w0 unused on rows that are neither packed-int nor int+ext. + builder + .when(perm_gate.clone() * (AB::Expr::ONE - is_packed_int.clone() - is_int_ext.clone())) + .assert_zero(w[0].clone()); + // w1, w2 unused on rows that are not packed-int. + { + let builder = + &mut builder.when(perm_gate.clone() * (AB::Expr::ONE - is_packed_int.clone())); + builder.assert_zero(w[1].clone()); + builder.assert_zero(w[2].clone()); + } + + // ------------------------------------------------------------------------- + // 1. Init+ext1 (row 0): h' = M_E(S(M_E(h) + ark)) + // Gate degree: perm_gate(1) * is_init_ext(1) = 2 + // Constraint degree: gate(2) * sbox(7) = 9 + // ------------------------------------------------------------------------- + { + let expected = apply_init_plus_ext(&h, &ark); + let builder = &mut builder.when(perm_gate.clone() * is_init_ext); + for i in 0..STATE_WIDTH { + builder.assert_eq(h_next[i].clone(), expected[i].clone()); + } + } + + // ------------------------------------------------------------------------- + // 2. Single external round (rows 1-3, 12-14): h' = M_E(S(h + ark)) + // Gate degree: perm_gate(1) * is_ext(1) = 2 + // Constraint degree: gate(2) * sbox(7) = 9 + // ------------------------------------------------------------------------- + { + let ext_with_rc: [AB::Expr; STATE_WIDTH] = + core::array::from_fn(|i| h[i].clone() + ark[i].clone()); + let ext_with_sbox: [AB::Expr; STATE_WIDTH] = + core::array::from_fn(|i| ext_with_rc[i].clone().exp_const_u64::<7>()); + let expected = apply_matmul_external(&ext_with_sbox); + + let builder = &mut builder.when(perm_gate.clone() * is_ext); + for i in 0..STATE_WIDTH { + builder.assert_eq(h_next[i].clone(), expected[i].clone()); + } + } + + // ------------------------------------------------------------------------- + // 3. Packed 3x internal (rows 4-10): witness checks + affine next-state + // Gate degree: perm_gate(1) * is_packed_int(1) = 2 + // Witness constraint degree: gate(2) * sbox(7) = 9 + // Next-state constraint degree: gate(2) * affine(1) = 3 + // ------------------------------------------------------------------------- + { + // ark[0..2] hold the 3 internal round constants on packed-int rows + let ark_int_3: [AB::Expr; 3] = core::array::from_fn(|i| ark[i].clone()); + let (expected, witness_checks) = apply_packed_internals(&h, &w, &ark_int_3, &mat_diag); + + let builder = &mut builder.when(perm_gate.clone() * is_packed_int); + // 3 witness constraints + for wc in &witness_checks { + builder.assert_zero(wc.clone()); + } + // 12 next-state constraints + for i in 0..STATE_WIDTH { + builder.assert_eq(h_next[i].clone(), expected[i].clone()); + } + } + + // ------------------------------------------------------------------------- + // 4. Int+ext merged (row 11): 1 internal (ARK_INT[21] hardcoded) + 1 external + // Gate degree: perm_gate(1) * is_int_ext(1) = 2 + // Witness constraint degree: gate(2) * sbox(7) = 9 + // Next-state constraint degree: gate(2) * sbox(7) = 9 + // ------------------------------------------------------------------------- + { + let (expected, witness_check) = + apply_internal_plus_ext(&h, &w[0], ark_int_21, &ark, &mat_diag); + + let builder = &mut builder.when(perm_gate * is_int_ext); + // 1 witness constraint + builder.assert_zero(witness_check); + // 12 next-state constraints + for i in 0..STATE_WIDTH { + builder.assert_eq(h_next[i].clone(), expected[i].clone()); + } + } +} + +// ============================================================================= +// LINEAR ALGEBRA HELPERS +// ============================================================================= + +/// Applies the external linear layer M_E to the state. +/// +/// The external layer consists of: +/// 1. Apply M4 to each 4-element block +/// 2. Add cross-block sums to each element +fn apply_matmul_external(state: &[E; STATE_WIDTH]) -> [E; STATE_WIDTH] { + // Apply M4 to each 4-element block + let b0 = matmul_m4(core::array::from_fn(|i| state[i].clone())); + let b1 = matmul_m4(core::array::from_fn(|i| state[4 + i].clone())); + let b2 = matmul_m4(core::array::from_fn(|i| state[8 + i].clone())); + + // Compute cross-block sums + let stored0 = b0[0].clone() + b1[0].clone() + b2[0].clone(); + let stored1 = b0[1].clone() + b1[1].clone() + b2[1].clone(); + let stored2 = b0[2].clone() + b1[2].clone() + b2[2].clone(); + let stored3 = b0[3].clone() + b1[3].clone() + b2[3].clone(); + + // Add sums to each element + [ + b0[0].clone() + stored0.clone(), + b0[1].clone() + stored1.clone(), + b0[2].clone() + stored2.clone(), + b0[3].clone() + stored3.clone(), + b1[0].clone() + stored0.clone(), + b1[1].clone() + stored1.clone(), + b1[2].clone() + stored2.clone(), + b1[3].clone() + stored3.clone(), + b2[0].clone() + stored0, + b2[1].clone() + stored1, + b2[2].clone() + stored2, + b2[3].clone() + stored3, + ] +} + +/// Applies the 4x4 matrix M4 used in Poseidon2's external linear layer. +fn matmul_m4(input: [E; 4]) -> [E; 4] { + let [a, b, c, d] = input.clone(); + + let t0 = a.clone() + b.clone(); + let t1 = c.clone() + d.clone(); + let t2 = b.double() + t1.clone(); // 2b + t1 + let t3 = d.double() + t0.clone(); // 2d + t0 + let t4 = t1.double().double() + t3.clone(); // 4*t1 + t3 + let t5 = t0.double().double() + t2.clone(); // 4*t0 + t2 + + let out0 = t3.clone() + t5.clone(); + let out1 = t5; + let out2 = t2 + t4.clone(); + let out3 = t4; + + [out0, out1, out2, out3] +} + +/// Applies the internal linear layer M_I to the state. +/// +/// M_I = I + diag(MAT_DIAG) where all rows share the same sum. +/// The `mat_diag` parameter provides `Hasher::MAT_DIAG` pre-lifted to the expression type. +fn apply_matmul_internal( + state: &[E; STATE_WIDTH], + mat_diag: &[E; STATE_WIDTH], +) -> [E; STATE_WIDTH] { + // Sum of all state elements + let sum = E::sum_array::(state); + // result[i] = state[i] * MAT_DIAG[i] + sum + core::array::from_fn(|i| state[i].clone() * mat_diag[i].clone() + sum.clone()) +} + +// ============================================================================= +// PACKED ROUND HELPERS +// ============================================================================= + +/// Computes the expected next state for the merged init linear + first external round. +/// +/// h' = M_E(S(M_E(h) + ark_ext)) +/// +/// The init step applies M_E to the input, then the first external round adds round +/// constants, applies the full S-box, and applies M_E again. This is a single S-box +/// layer over affine expressions, so the constraint degree is 7. +pub fn apply_init_plus_ext( + h: &[E; STATE_WIDTH], + ark_ext: &[E; STATE_WIDTH], +) -> [E; STATE_WIDTH] { + // Apply M_E to get the pre-round state + let pre = apply_matmul_external(h); + + // Add round constants, apply S-box, apply M_E + let with_rc: [E; STATE_WIDTH] = core::array::from_fn(|i| pre[i].clone() + ark_ext[i].clone()); + let with_sbox: [E; STATE_WIDTH] = + core::array::from_fn(|i| with_rc[i].clone().exp_const_u64::<7>()); + apply_matmul_external(&with_sbox) +} + +/// Computes the expected next state and witness checks for 3 packed internal rounds. +/// +/// Each internal round applies: add RC to lane 0, S-box lane 0, then M_I. +/// The S-box output for each round is provided as an explicit witness (w0, w1, w2), +/// which keeps the intermediate states affine and the constraint degree at 7. +/// +/// Returns: +/// - `next_state`: expected state after all 3 rounds (affine in trace columns, degree 1) +/// - `witness_checks`: 3 expressions that must be zero (each degree 7): `wk - (y(k)_0 + +/// ark_int[k])^7` +pub fn apply_packed_internals( + h: &[E; STATE_WIDTH], + w: &[E; 3], + ark_int: &[E; 3], + mat_diag: &[E; STATE_WIDTH], +) -> ([E; STATE_WIDTH], [E; 3]) { + let mut state = h.clone(); + let mut witness_checks: [E; 3] = core::array::from_fn(|_| E::ZERO); + + for k in 0..3 { + // Witness check: wk = (state[0] + ark_int[k])^7 + let sbox_input = state[0].clone() + ark_int[k].clone(); + witness_checks[k] = w[k].clone() - sbox_input.exp_const_u64::<7>(); + + // Substitute witness for lane 0 and apply M_I + state[0] = w[k].clone(); + state = apply_matmul_internal(&state, mat_diag); + } + + (state, witness_checks) +} + +/// Computes the expected next state and witness check for one internal round followed +/// by one external round. +/// +/// Used for the int22+ext5 merged row (row 11). The internal round constant ARK_INT[21] +/// is passed as a concrete Felt rather than read from a periodic column. This is valid +/// because row 11 is the only row gated by `is_int_ext` -- no other row needs a different +/// value under the same gate. A periodic column would waste 15 zero entries to deliver +/// one value. +/// +/// Returns: +/// - `next_state`: expected state after int + ext (degree 7 in trace columns) +/// - `witness_check`: `w0 - (h[0] + ark_int_const)^7` (degree 7) +pub fn apply_internal_plus_ext( + h: &[E; STATE_WIDTH], + w0: &E, + ark_int_const: E, + ark_ext: &[E; STATE_WIDTH], + mat_diag: &[E; STATE_WIDTH], +) -> ([E; STATE_WIDTH], E) { + // Internal round: witness check and state update + let sbox_input = h[0].clone() + ark_int_const; + let witness_check = w0.clone() - sbox_input.exp_const_u64::<7>(); + + let mut int_state = h.clone(); + int_state[0] = w0.clone(); + let intermediate = apply_matmul_internal(&int_state, mat_diag); + + // External round: add RC, S-box all lanes, M_E + let with_rc: [E; STATE_WIDTH] = + core::array::from_fn(|i| intermediate[i].clone() + ark_ext[i].clone()); + let with_sbox: [E; STATE_WIDTH] = + core::array::from_fn(|i| with_rc[i].clone().exp_const_u64::<7>()); + let next_state = apply_matmul_external(&with_sbox); + + (next_state, witness_check) +} diff --git a/air/src/constraints/chiplets/selectors.rs b/air/src/constraints/chiplets/selectors.rs index 2810da7bcb..5ef30bdf21 100644 --- a/air/src/constraints/chiplets/selectors.rs +++ b/air/src/constraints/chiplets/selectors.rs @@ -1,204 +1,322 @@ -//! Chiplet selector system constraints. +//! Chiplet selector system constraints and precomputed flags. //! -//! This module implements the hierarchical chiplet selector system that determines -//! which chiplet is active at any given row. +//! This module implements the chiplet selector system that determines which chiplet is +//! active at any given row, and provides precomputed flags for gating chiplet-specific +//! constraints. //! //! ## Selector Hierarchy //! -//! The chiplet system uses 5 selector columns `s[0..4]` to identify active chiplets: +//! The chiplet system uses two physical selector columns (`s_ctrl = chiplets[0]` and +//! `s_perm = chiplets[20]`) plus the virtual `s0 = 1 - (s_ctrl + s_perm)` to partition +//! rows into three top-level regions. The remaining selectors `s1..s4` subdivide the +//! `s0` region into the remaining chiplets. //! -//! | Chiplet | Active when | Selector pattern | -//! |-------------|--------------------------------|------------------| -//! | Hasher | `!s0` | `(0, *, *, *, *)` | -//! | Bitwise | `s0 * !s1` | `(1, 0, *, *, *)` | -//! | Memory | `s0 * s1 * !s2` | `(1, 1, 0, *, *)` | -//! | ACE | `s0 * s1 * s2 * !s3` | `(1, 1, 1, 0, *)` | -//! | Kernel ROM | `s0 * s1 * s2 * s3 * !s4` | `(1, 1, 1, 1, 0)` | +//! | Chiplet | Active when | +//! |-------------|--------------------------------| +//! | Controller | `s_ctrl` | +//! | Permutation | `s_perm` | +//! | Bitwise | `s0 * !s1` | +//! | Memory | `s0 * s1 * !s2` | +//! | ACE | `s0 * s1 * s2 * !s3` | +//! | Kernel ROM | `s0 * s1 * s2 * s3 * !s4` | +//! +//! ## Selector Transition Rules +//! +//! - `s_ctrl`, `s_perm`, and `s_ctrl + s_perm` are boolean (at most one is active) +//! - `s_ctrl = 1 → s_ctrl' + s_perm' = 1` (a controller row must be followed by another controller +//! row or a permutation row) +//! - `s_perm = 1 → s_ctrl' = 0` (a permutation row cannot be followed by a controller row; it can +//! only continue as permutation or transition to s0) +//! - `s0 = 1 → s_ctrl' = 0 ∧ s_perm' = 0` (once in the s0 region, stay there) +//! +//! These force the trace ordering: `ctrl...ctrl, perm...perm, s0...s0`. +//! +//! ## Precomputed Flags +//! +//! Each chiplet gets a [`ChipletFlags`] struct with four flags: +//! - `is_active`: 1 when this chiplet owns the current row +//! - `is_transition`: active on both current and next row (bakes in `is_transition()`) +//! - `is_last`: last row of this chiplet's section (`is_active * s_n'`) +//! - `next_is_first`: next row is the first of this chiplet (`is_last[n-1] * (1 - s_n')`) +//! +//! For controller and permutation, `is_active` is the direct physical selector (`s_ctrl` or +//! `s_perm`). For the remaining chiplets under `s0`, `is_active` uses the subtraction trick +//! (`prefix - prefix * s_n`). //! //! ## Constraints //! -//! 1. **Binary constraints**: Each selector is binary when it could be active -//! 2. **Stability constraints**: Once a selector becomes 1, it stays 1 (no 1→0 transitions) +//! 1. **Tri-state partition**: `s_ctrl`, `s_perm`, `(s_ctrl + s_perm)` are boolean +//! 2. **Transition rules**: ctrl→ctrl|perm, perm→perm|s0, s0→s0 +//! 3. **Binary constraints**: `s1..s4` are binary when their prefix is active +//! 4. **Stability constraints**: Once `s1..s4` become 1, they stay 1 (no 1→0 transitions) +//! 5. **Last-row invariant**: `s_ctrl = 0`, `s1 = s2 = s3 = s4 = 1` on the final row +//! +//! The last-row invariant ensures every chiplet's `is_active` flag is zero on the last +//! row. Combined with the `(1 - s_n')` factor in the precomputed flags, this makes +//! chiplet-gated constraints automatically vanish on the last row without needing +//! explicit `when_transition()` guards. use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{AirBuilder, LiftedAirBuilder}; +use miden_crypto::stark::air::AirBuilder; -use crate::{ - Felt, MainTraceRow, - constraints::tagging::{TaggingAirBuilderExt, ids::TAG_CHIPLETS_BASE}, -}; +use crate::{MainCols, MidenAirBuilder, constraints::utils::BoolNot}; -// TAGGING IDS +// CHIPLET FLAGS // ================================================================================================ -/// Base ID for chiplet selector constraints. -const CHIPLET_SELECTORS_BASE_ID: usize = TAG_CHIPLETS_BASE; - -/// Constraint namespaces in assertion order. -const CHIPLET_SELECTORS_NAMES: [&str; 10] = [ - "chiplets.selectors.s0.binary", - "chiplets.selectors.s1.binary", - "chiplets.selectors.s2.binary", - "chiplets.selectors.s3.binary", - "chiplets.selectors.s4.binary", - "chiplets.selectors.s0.stability", - "chiplets.selectors.s1.stability", - "chiplets.selectors.s2.stability", - "chiplets.selectors.s3.stability", - "chiplets.selectors.s4.stability", -]; - -// ENTRY POINTS +/// Precomputed flags for a single chiplet. +#[derive(Clone)] +pub struct ChipletFlags { + /// 1 when this chiplet owns the current row. + pub is_active: E, + /// `is_transition() * prefix * (1 - s_n')` — bakes in the transition flag. + pub is_transition: E, + /// `is_active * s_n'` — last row of this chiplet's section. + pub is_last: E, + /// `is_last[n-1] * (1 - s_n')` — next row is the first row of this chiplet. + pub next_is_first: E, +} + +/// Precomputed flags for all chiplets. +#[derive(Clone)] +pub struct ChipletSelectors { + pub controller: ChipletFlags, + pub permutation: ChipletFlags, + pub bitwise: ChipletFlags, + pub memory: ChipletFlags, + pub ace: ChipletFlags, + pub kernel_rom: ChipletFlags, +} + +// ENTRY POINT // ================================================================================================ -/// Enforce chiplet selector constraints. +/// Enforce chiplet selector constraints and build precomputed flags. /// /// This enforces: -/// 1. Binary constraints for each selector level -/// 2. Stability constraints (no 1→0 transitions) -pub fn enforce_chiplet_selectors( +/// 1. Tri-state partition constraints for `s_ctrl`, `s_perm`, virtual `s0` +/// 2. Transition rules (ctrl→ctrl|perm, perm→perm|s0, s0→s0) +/// 3. Binary and stability constraints for `s1..s4` under `s0` +/// 4. Last-row invariant (`s_ctrl = 0`, `s1..s4 = 1`) +/// 5. Hasher domain-specific constraints (sub-selector booleanity, pairing, cycle alignment) +/// +/// Returns [`ChipletSelectors`] with precomputed flags for gating chiplet constraints. +pub fn build_chiplet_selectors( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: LiftedAirBuilder, + local: &MainCols, + next: &MainCols, +) -> ChipletSelectors +where + AB: MidenAirBuilder, { - // Load selector columns (chiplets[0..5] are the selectors) - let s0: AB::Expr = local.chiplets[0].clone().into(); - let s1: AB::Expr = local.chiplets[1].clone().into(); - let s2: AB::Expr = local.chiplets[2].clone().into(); - let s3: AB::Expr = local.chiplets[3].clone().into(); - let s4: AB::Expr = local.chiplets[4].clone().into(); - - let s0_next: AB::Expr = next.chiplets[0].clone().into(); - let s1_next: AB::Expr = next.chiplets[1].clone().into(); - let s2_next: AB::Expr = next.chiplets[2].clone().into(); - let s3_next: AB::Expr = next.chiplets[3].clone().into(); - let s4_next: AB::Expr = next.chiplets[4].clone().into(); - - let one: AB::Expr = AB::Expr::ONE; - - // ========================================================================== - // BINARY CONSTRAINTS - // ========================================================================== - // Each selector is binary when it could be active - - // s0 is always binary - builder.tagged(CHIPLET_SELECTORS_BASE_ID, CHIPLET_SELECTORS_NAMES[0], |builder| { - builder.assert_zero(s0.clone() * (s0.clone() - one.clone())); - }); - - // s1 is binary when s0 = 1 (bitwise, memory, ACE, or kernel ROM could be active) - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 1, CHIPLET_SELECTORS_NAMES[1], |builder| { - builder.when(s0.clone()).assert_zero(s1.clone() * (s1.clone() - one.clone())); - }); - - // s2 is binary when s0 = 1 and s1 = 1 (memory, ACE, or kernel ROM could be active) - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 2, CHIPLET_SELECTORS_NAMES[2], |builder| { - builder - .when(s0.clone()) - .when(s1.clone()) - .assert_zero(s2.clone() * (s2.clone() - one.clone())); - }); - - // s3 is binary when s0 = s1 = s2 = 1 (ACE or kernel ROM could be active) - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 3, CHIPLET_SELECTORS_NAMES[3], |builder| { - builder - .when(s0.clone()) - .when(s1.clone()) - .when(s2.clone()) - .assert_zero(s3.clone() * (s3.clone() - one.clone())); - }); - - // s4 is binary when s0 = s1 = s2 = s3 = 1 (kernel ROM could be active) - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 4, CHIPLET_SELECTORS_NAMES[4], |builder| { - builder - .when(s0.clone()) - .when(s1.clone()) - .when(s2.clone()) - .when(s3.clone()) - .assert_zero(s4.clone() * (s4.clone() - one.clone())); - }); - - // ========================================================================== - // STABILITY CONSTRAINTS (transition only) - // ========================================================================== - // Once a selector becomes 1, it must stay 1 (forbids 1→0 transitions) - - // s0' = s0 when s0 = 1 - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 5, CHIPLET_SELECTORS_NAMES[5], |builder| { - builder - .when_transition() - .when(s0.clone()) - .assert_zero(s0_next.clone() - s0.clone()); - }); - - // s1' = s1 when s0 = 1 and s1 = 1 - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 6, CHIPLET_SELECTORS_NAMES[6], |builder| { - builder - .when_transition() - .when(s0.clone()) - .when(s1.clone()) - .assert_zero(s1_next.clone() - s1.clone()); - }); - - // s2' = s2 when s0 = s1 = s2 = 1 - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 7, CHIPLET_SELECTORS_NAMES[7], |builder| { - builder - .when_transition() - .when(s0.clone()) - .when(s1.clone()) - .when(s2.clone()) - .assert_zero(s2_next.clone() - s2.clone()); - }); - - // s3' = s3 when s0 = s1 = s2 = s3 = 1 - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 8, CHIPLET_SELECTORS_NAMES[8], |builder| { - builder - .when_transition() - .when(s0.clone()) - .when(s1.clone()) - .when(s2.clone()) - .when(s3.clone()) - .assert_zero(s3_next.clone() - s3.clone()); - }); - - // s4' = s4 when s0 = s1 = s2 = s3 = s4 = 1 - builder.tagged(CHIPLET_SELECTORS_BASE_ID + 9, CHIPLET_SELECTORS_NAMES[9], |builder| { - builder - .when_transition() - .when(s0) - .when(s1) - .when(s2) - .when(s3) - .when(s4.clone()) - .assert_zero(s4_next - s4); - }); -} + // ========================================================================= + // LOAD SELECTOR COLUMNS + // ========================================================================= -// INTERNAL HELPERS -// ================================================================================================ + // [s_ctrl, s_perm, s1, s2, s3, s4] + let sel = local.chiplet_selectors(); + let sel_next = next.chiplet_selectors(); -/// Bitwise chiplet active flag: `s0 * !s1`. -#[inline] -pub fn bitwise_chiplet_flag(s0: E, s1: E) -> E { - s0 * (E::ONE - s1) -} + // s_ctrl = chiplets[0]: 1 on controller rows, 0 on perm/non-hasher rows. + let s_ctrl: AB::Expr = sel[0].into(); + let s_ctrl_next: AB::Expr = sel_next[0].into(); -/// Memory chiplet active flag: `s0 * s1 * !s2`. -#[inline] -pub fn memory_chiplet_flag(s0: E, s1: E, s2: E) -> E { - s0 * s1 * (E::ONE - s2) -} + // s_perm: 1 on permutation rows, 0 elsewhere. + let s_perm: AB::Expr = sel[1].into(); + let s_perm_next: AB::Expr = sel_next[1].into(); -/// ACE chiplet active flag: `s0 * s1 * s2 * !s3`. -#[inline] -pub fn ace_chiplet_flag(s0: E, s1: E, s2: E, s3: E) -> E { - s0 * s1 * s2 * (E::ONE - s3) -} + // s_ctrl_or_s_perm: 1 on any hasher row (controller or permutation), 0 on s0 rows. + let s_ctrl_or_s_perm = s_ctrl.clone() + s_perm.clone(); + let s_ctrl_or_s_perm_next = s_ctrl_next.clone() + s_perm_next.clone(); + + // s1..s4: remaining chiplet selectors. + let s1: AB::Expr = sel[2].into(); + let s2: AB::Expr = sel[3].into(); + let s3: AB::Expr = sel[4].into(); + let s4: AB::Expr = sel[5].into(); + + let s1_next: AB::Expr = sel_next[2].into(); + let s2_next: AB::Expr = sel_next[3].into(); + let s3_next: AB::Expr = sel_next[4].into(); + let s4_next: AB::Expr = sel_next[5].into(); + + // Virtual s0 = 1 - (s_ctrl + s_perm): same semantics as old chiplets[0]. + // 0 on controller and perm rows, 1 on non-hasher rows. + let s0: AB::Expr = s_ctrl_or_s_perm.clone().not(); + + // ========================================================================= + // TRI-STATE SELECTOR CONSTRAINTS + // ========================================================================= + + // s_ctrl and s_perm are each boolean, and at most one can be active (their + // sum is also boolean, so they cannot both be 1 simultaneously). + builder.assert_bool(s_ctrl.clone()); + builder.assert_bool(s_perm.clone()); + builder.assert_bool(s_ctrl_or_s_perm.clone()); + + // Transition rules: enforce the trace ordering ctrl...ctrl, perm...perm, s0...s0. + { + let builder = &mut builder.when_transition(); + + // A controller row must be followed by another controller or permutation row. + // s_ctrl * (1 - (s_ctrl' + s_perm')) = 0. + builder.when(s_ctrl.clone()).assert_one(s_ctrl_or_s_perm_next.clone()); + + // A permutation row cannot be followed by a controller row. + // s_perm * s_ctrl' = 0. + builder.when(s_perm.clone()).assert_zero(s_ctrl_next.clone()); + + // Once in the s0 region, neither s_ctrl nor s_perm can appear again. + // s0 * s_ctrl' = 0, s0 * s_perm' = 0. + { + let builder = &mut builder.when(s0.clone()); + builder.assert_zero(s_ctrl_next.clone()); + builder.assert_zero(s_perm_next.clone()); + } + } + + // ========================================================================= + // REMAINING CHIPLET SELECTOR CONSTRAINTS (s1..s4 under virtual s0) + // ========================================================================= + + // Cumulative products gate each selector on its prefix being active. + let s01 = s0.clone() * s1.clone(); + let s012 = s01.clone() * s2.clone(); + let s0123 = s012.clone() * s3.clone(); + + // s1..s4 booleanity, gated by their prefix under s0. + builder.when(s0.clone()).assert_bool(s1.clone()); + builder.when(s01.clone()).assert_bool(s2.clone()); + builder.when(s012.clone()).assert_bool(s3.clone()); + builder.when(s0123.clone()).assert_bool(s4.clone()); + + // s1..s4 stability: once set to 1, they stay 1 (forbids 1→0 transitions). + // Gated by the cumulative product including the target selector, so the gate + // is only active when the selector is already 1 — permitting the 0→1 + // transition at section boundaries while forbidding 1→0. + let s01234 = s0123.clone() * s4.clone(); + { + let builder = &mut builder.when_transition(); + builder.when(s01.clone()).assert_eq(s1_next.clone(), s1.clone()); + builder.when(s012.clone()).assert_eq(s2_next.clone(), s2.clone()); + builder.when(s0123.clone()).assert_eq(s3_next.clone(), s3.clone()); + builder.when(s01234.clone()).assert_eq(s4_next.clone(), s4.clone()); + } + + // ========================================================================= + // LAST-ROW INVARIANT + // ========================================================================= + // On the last row: s_ctrl = s_perm = 0 and s1 = s2 = s3 = s4 = 1 (kernel_rom + // section). Virtual s0 = 1 follows from s_ctrl = s_perm = 0. + // This ensures every chiplet's is_active flag is zero on the last row. + // Combined with the (1 - s_n') factor in precomputed flags, chiplet-gated + // constraints automatically vanish without explicit when_transition() guards. + { + let builder = &mut builder.when_last_row(); + builder.assert_zero(s_ctrl.clone()); + builder.assert_zero(s_perm.clone()); + builder.assert_one(s1.clone()); + builder.assert_one(s2.clone()); + builder.assert_one(s3.clone()); + builder.assert_one(s4.clone()); + } + + // ========================================================================= + // PRECOMPUTE FLAGS + // ========================================================================= + + let not_s1_next = s1_next.not(); + let not_s2_next = s2_next.not(); + let not_s3_next = s3_next.not(); + let not_s4_next = s4_next.not(); + + let is_transition_flag: AB::Expr = builder.is_transition(); + + // --- Controller flags (direct physical selector s_ctrl) --- + // is_active = s_ctrl (deg 1) + // is_transition = is_transition_flag * s_ctrl * s_ctrl' (deg 3) + // is_last = s_ctrl * (1 - s_ctrl') (deg 2) + let ctrl_is_active = s_ctrl.clone(); + let ctrl_is_transition = is_transition_flag.clone() * s_ctrl.clone() * s_ctrl_next.clone(); + let ctrl_is_last = s_ctrl.clone() * s_ctrl_next.clone().not(); + let ctrl_next_is_first = AB::Expr::ZERO; // controller is first section + + // --- Permutation flags (direct physical selector s_perm) --- + // is_active = s_perm (deg 1) + // is_transition = is_transition_flag * s_perm * s_perm' (deg 3) + // is_last = s_perm * (1 - s_perm') (deg 2) + // next_is_first = ctrl_is_last * s_perm' (deg 3) + let perm_is_active = s_perm.clone(); + let perm_is_transition = is_transition_flag.clone() * s_perm.clone() * s_perm_next.clone(); + let perm_is_last = s_perm.clone() * s_perm_next.clone().not(); + let perm_next_is_first = ctrl_is_last.clone() * s_perm_next.clone(); + + // --- Remaining chiplet active flags (subtraction trick: prefix - prefix * s_n) --- + let is_bitwise = s0.clone() - s01.clone(); + let is_memory = s01.clone() - s012.clone(); + let is_ace = s012.clone() - s0123.clone(); + let is_kernel_rom = s0123.clone() - s01234; + + // --- Remaining chiplet last-row flags: is_active * s_n' --- + let is_bitwise_last = is_bitwise.clone() * s1_next; + let is_memory_last = is_memory.clone() * s2_next; + let is_ace_last = is_ace.clone() * s3_next; + let is_kernel_rom_last = is_kernel_rom.clone() * s4_next; + + // --- Remaining chiplet next-is-first flags: is_last[n-1] * (1 - s_n') --- + let next_is_bitwise_first = perm_is_last.clone() * not_s1_next.clone(); + let next_is_memory_first = is_bitwise_last.clone() * not_s2_next.clone(); + let next_is_ace_first = is_memory_last.clone() * not_s3_next.clone(); + let next_is_kernel_rom_first = is_ace_last.clone() * not_s4_next.clone(); + + // --- Remaining chiplet transition flags --- + // Each sub-s0 chiplet fires its transition flag when the current row is in that + // chiplet's section (the prefix product) and the next row hasn't yet advanced + // past it (the `1 - s_n'` factor). We don't need an explicit `(1 - s_ctrl' - + // s_perm')` factor because the tri-state transition rule already enforces + // `s0 = 1 → s_ctrl' = 0 ∧ s_perm' = 0`, so on valid traces that factor is + // always 1 whenever the prefix is active. + let bitwise_transition = is_transition_flag.clone() * s0.clone() * not_s1_next; + let memory_transition = is_transition_flag.clone() * s01.clone() * not_s2_next; + let ace_transition = is_transition_flag.clone() * s012.clone() * not_s3_next; + let kernel_rom_transition = is_transition_flag * s0123 * not_s4_next; -/// Kernel ROM chiplet active flag: `s0 * s1 * s2 * s3 * !s4`. -#[inline] -pub fn kernel_rom_chiplet_flag(s0: E, s1: E, s2: E, s3: E, s4: E) -> E { - s0 * s1 * s2 * s3 * (E::ONE - s4) + ChipletSelectors { + controller: ChipletFlags { + is_active: ctrl_is_active, + is_transition: ctrl_is_transition, + is_last: ctrl_is_last, + next_is_first: ctrl_next_is_first, + }, + permutation: ChipletFlags { + is_active: perm_is_active, + is_transition: perm_is_transition, + is_last: perm_is_last, + next_is_first: perm_next_is_first, + }, + bitwise: ChipletFlags { + is_active: is_bitwise, + is_transition: bitwise_transition, + is_last: is_bitwise_last, + next_is_first: next_is_bitwise_first, + }, + memory: ChipletFlags { + is_active: is_memory, + is_transition: memory_transition, + is_last: is_memory_last, + next_is_first: next_is_memory_first, + }, + ace: ChipletFlags { + is_active: is_ace, + is_transition: ace_transition, + is_last: is_ace_last, + next_is_first: next_is_ace_first, + }, + kernel_rom: ChipletFlags { + is_active: is_kernel_rom, + is_transition: kernel_rom_transition, + is_last: is_kernel_rom_last, + next_is_first: next_is_kernel_rom_first, + }, + } } diff --git a/air/src/constraints/columns.rs b/air/src/constraints/columns.rs new file mode 100644 index 0000000000..6f158e14cf --- /dev/null +++ b/air/src/constraints/columns.rs @@ -0,0 +1,297 @@ +//! Column layout types for the main and auxiliary execution traces. +//! +//! These `#[repr(C)]` structs provide typed, named access to trace columns. +//! They are borrowed zero-copy from raw `[T; WIDTH]` slices and are used +//! exclusively by constraint code. They are independent of trace storage +//! (`MainTrace`, `TraceStorage`, etc.). + +use core::{ + borrow::{Borrow, BorrowMut}, + mem::size_of, +}; + +use super::{ + chiplets::columns::{ + AceCols, AceEvalCols, AceReadCols, BitwiseCols, ControllerCols, KernelRomCols, MemoryCols, + PermutationCols, borrow_chiplet, + }, + decoder::columns::DecoderCols, + range::columns::RangeCols, + stack::columns::StackCols, + system::columns::SystemCols, +}; +use crate::trace::{AUX_TRACE_WIDTH, CHIPLETS_WIDTH, TRACE_WIDTH}; + +// MAIN TRACE COLUMN STRUCT +// ================================================================================================ + +/// Column layout of the main execution trace (71 columns). +/// +/// This `#[repr(C)]` struct provides typed, named access to every column. It can be +/// borrowed zero-copy from a raw `[T; TRACE_WIDTH]` slice via `Borrow>`. +/// +/// Chiplet columns are not public because the 20 columns are a union — their interpretation +/// depends on which chiplet is active. Access goes through typed accessors like +/// [`MainCols::permutation()`], [`MainCols::controller()`], [`MainCols::bitwise()`], etc. +/// +/// The `s_perm` column is separated from the chiplets array because it is consumed +/// exclusively by the chiplet selector system, not by any chiplet's constraint code. +#[repr(C)] +pub struct MainCols { + pub system: SystemCols, + pub decoder: DecoderCols, + pub stack: StackCols, + pub range: RangeCols, + pub(crate) chiplets: [T; CHIPLETS_WIDTH - 1], + /// Permutation segment selector: consumed by `build_chiplet_selectors`. + pub s_perm: T, +} + +impl MainCols { + /// Returns the 6 chiplet selector columns `[s_ctrl, s_perm, s1, s2, s3, s4]`. + /// + /// `s_ctrl = chiplets[0]` and `s_perm` are the two physical selectors + /// for the controller and permutation sub-chiplets. `s1..s4` subdivide the + /// remaining chiplets under the virtual `s0 = 1 - (s_ctrl + s_perm)`. + pub fn chiplet_selectors(&self) -> [T; 6] + where + T: Copy, + { + [ + self.chiplets[0], + self.s_perm, + self.chiplets[1], + self.chiplets[2], + self.chiplets[3], + self.chiplets[4], + ] + } + + /// Returns a typed borrow of the bitwise chiplet columns (chiplets\[2..15\]). + pub fn bitwise(&self) -> &BitwiseCols { + borrow_chiplet(&self.chiplets[2..15]) + } + + /// Returns a typed borrow of the memory chiplet columns (chiplets\[3..18\]). + pub fn memory(&self) -> &MemoryCols { + borrow_chiplet(&self.chiplets[3..18]) + } + + /// Returns a typed borrow of the ACE chiplet columns (chiplets\[4..20\]). + /// + /// Spans `chiplets[4..20]` (16 cols). Since `chiplets` has 20 elements (indices + /// 0..19), this is `chiplets[4..20]` = `chiplets[4..]` (all 16 remaining). + pub fn ace(&self) -> &AceCols { + borrow_chiplet(&self.chiplets[4..]) + } + + /// Returns a typed borrow of the kernel ROM chiplet columns (chiplets\[5..10\]). + pub fn kernel_rom(&self) -> &KernelRomCols { + borrow_chiplet(&self.chiplets[5..10]) + } + + /// Returns a typed borrow of the permutation sub-chiplet columns (chiplets\[1..20\]). + pub fn permutation(&self) -> &PermutationCols { + borrow_chiplet(&self.chiplets[1..]) + } + + /// Returns a typed borrow of the controller sub-chiplet columns (chiplets\[1..20\]). + pub fn controller(&self) -> &ControllerCols { + borrow_chiplet(&self.chiplets[1..]) + } +} + +impl Borrow> for [T] { + fn borrow(&self) -> &MainCols { + debug_assert_eq!(self.len(), TRACE_WIDTH); + let (prefix, shorts, suffix) = unsafe { self.align_to::>() }; + debug_assert!(prefix.is_empty() && suffix.is_empty() && shorts.len() == 1); + &shorts[0] + } +} + +impl BorrowMut> for [T] { + fn borrow_mut(&mut self) -> &mut MainCols { + debug_assert_eq!(self.len(), TRACE_WIDTH); + let (prefix, shorts, suffix) = unsafe { self.align_to_mut::>() }; + debug_assert!(prefix.is_empty() && suffix.is_empty() && shorts.len() == 1); + &mut shorts[0] + } +} + +// CONST INDEX MAP +// ================================================================================================ + +/// Generates an array `[0, 1, 2, ..., N-1]` at compile time. +pub const fn indices_arr() -> [usize; N] { + let mut arr = [0; N]; + let mut i = 0; + while i < N { + arr[i] = i; + i += 1; + } + arr +} + +/// Number of columns in the main trace (71), derived from the struct layout. +pub const NUM_MAIN_COLS: usize = size_of::>(); + +/// Compile-time index map: each field holds its column index. +/// +/// Example: `MAIN_COL_MAP.decoder.addr == 6`, `MAIN_COL_MAP.stack.top[0] == 30`. +#[allow(dead_code)] +pub const MAIN_COL_MAP: MainCols = { + assert!(NUM_MAIN_COLS == TRACE_WIDTH); + unsafe { core::mem::transmute(indices_arr::()) } +}; + +// AUXILIARY TRACE COLUMN STRUCT +// ================================================================================================ + +/// Column layout of the auxiliary execution trace (8 columns). +#[repr(C)] +pub struct AuxCols { + /// Decoder: block stack table running product. + pub p1_block_stack: T, + /// Decoder: block hash table running product. + pub p2_block_hash: T, + /// Decoder: op group table running product. + pub p3_op_group: T, + /// Stack overflow running product. + pub stack_overflow: T, + /// Range checker LogUp sum. + pub range_check: T, + /// Hash-kernel virtual table bus. + pub hash_kernel_vtable: T, + /// Chiplets bus running product. + pub chiplets_bus: T, + /// ACE wiring LogUp sum. + pub ace_wiring: T, +} + +/// Number of columns in the auxiliary trace (8), derived from the struct layout. +pub const NUM_AUX_COLS: usize = size_of::>(); + +/// Compile-time index map for auxiliary columns. +#[allow(dead_code)] +pub const AUX_COL_MAP: AuxCols = { + assert!(NUM_AUX_COLS == AUX_TRACE_WIDTH); + unsafe { core::mem::transmute(indices_arr::()) } +}; + +// COLUMN COUNTS +// ================================================================================================ + +pub const NUM_SYSTEM_COLS: usize = size_of::>(); +pub const NUM_DECODER_COLS: usize = size_of::>(); +pub const NUM_STACK_COLS: usize = size_of::>(); +pub const NUM_RANGE_COLS: usize = size_of::>(); +pub const NUM_BITWISE_COLS: usize = size_of::>(); +pub const NUM_MEMORY_COLS: usize = size_of::>(); +pub const NUM_ACE_COLS: usize = size_of::>(); +pub const NUM_ACE_READ_COLS: usize = size_of::>(); +pub const NUM_ACE_EVAL_COLS: usize = size_of::>(); +pub const NUM_KERNEL_ROM_COLS: usize = size_of::>(); + +const _: () = assert!(NUM_MAIN_COLS == TRACE_WIDTH); +const _: () = assert!(NUM_AUX_COLS == AUX_TRACE_WIDTH); +const _: () = assert!(NUM_SYSTEM_COLS == 6); +const _: () = assert!(NUM_DECODER_COLS == 24); +const _: () = assert!(NUM_STACK_COLS == 19); +const _: () = assert!(NUM_RANGE_COLS == 2); +const _: () = assert!(NUM_BITWISE_COLS == 13); +const _: () = assert!(NUM_MEMORY_COLS == 15); +const _: () = assert!(NUM_ACE_COLS == 16); +const _: () = assert!(NUM_ACE_READ_COLS == 4); +const _: () = assert!(NUM_ACE_EVAL_COLS == 4); +const _: () = assert!(NUM_KERNEL_ROM_COLS == 5); + +// TESTS +// ================================================================================================ + +#[cfg(test)] +mod tests { + use super::*; + use crate::trace::{ + ACE_CHIPLET_WIRING_BUS_OFFSET, CHIPLETS_BUS_AUX_TRACE_OFFSET, CHIPLETS_OFFSET, CLK_COL_IDX, + CTX_COL_IDX, DECODER_AUX_TRACE_OFFSET, DECODER_TRACE_OFFSET, FN_HASH_OFFSET, + HASH_KERNEL_VTABLE_AUX_TRACE_OFFSET, RANGE_CHECK_AUX_TRACE_OFFSET, STACK_AUX_TRACE_OFFSET, + STACK_TRACE_OFFSET, decoder, range, stack, + }; + + // --- Main trace column map vs legacy constants ----------------------------------------------- + + #[test] + fn col_map_system() { + assert_eq!(MAIN_COL_MAP.system.clk, CLK_COL_IDX); + assert_eq!(MAIN_COL_MAP.system.ctx, CTX_COL_IDX); + assert_eq!(MAIN_COL_MAP.system.fn_hash[0], FN_HASH_OFFSET); + assert_eq!(MAIN_COL_MAP.system.fn_hash[3], FN_HASH_OFFSET + 3); + } + + #[test] + fn col_map_decoder() { + assert_eq!(MAIN_COL_MAP.decoder.addr, DECODER_TRACE_OFFSET + decoder::ADDR_COL_IDX); + assert_eq!(MAIN_COL_MAP.decoder.op_bits[0], DECODER_TRACE_OFFSET + decoder::OP_BITS_OFFSET); + assert_eq!( + MAIN_COL_MAP.decoder.op_bits[6], + DECODER_TRACE_OFFSET + decoder::OP_BITS_OFFSET + 6 + ); + assert_eq!( + MAIN_COL_MAP.decoder.hasher_state[0], + DECODER_TRACE_OFFSET + decoder::HASHER_STATE_OFFSET + ); + assert_eq!(MAIN_COL_MAP.decoder.in_span, DECODER_TRACE_OFFSET + decoder::IN_SPAN_COL_IDX); + assert_eq!( + MAIN_COL_MAP.decoder.group_count, + DECODER_TRACE_OFFSET + decoder::GROUP_COUNT_COL_IDX + ); + assert_eq!(MAIN_COL_MAP.decoder.op_index, DECODER_TRACE_OFFSET + decoder::OP_INDEX_COL_IDX); + assert_eq!( + MAIN_COL_MAP.decoder.batch_flags[0], + DECODER_TRACE_OFFSET + decoder::OP_BATCH_FLAGS_OFFSET + ); + assert_eq!( + MAIN_COL_MAP.decoder.extra[0], + DECODER_TRACE_OFFSET + decoder::OP_BITS_EXTRA_COLS_OFFSET + ); + } + + #[test] + fn col_map_stack() { + assert_eq!(MAIN_COL_MAP.stack.top[0], STACK_TRACE_OFFSET + stack::STACK_TOP_OFFSET); + assert_eq!(MAIN_COL_MAP.stack.top[15], STACK_TRACE_OFFSET + 15); + assert_eq!(MAIN_COL_MAP.stack.b0, STACK_TRACE_OFFSET + stack::B0_COL_IDX); + assert_eq!(MAIN_COL_MAP.stack.b1, STACK_TRACE_OFFSET + stack::B1_COL_IDX); + assert_eq!(MAIN_COL_MAP.stack.h0, STACK_TRACE_OFFSET + stack::H0_COL_IDX); + } + + #[test] + fn col_map_range() { + assert_eq!(MAIN_COL_MAP.range.multiplicity, range::M_COL_IDX); + assert_eq!(MAIN_COL_MAP.range.value, range::V_COL_IDX); + } + + #[test] + fn col_map_chiplets() { + assert_eq!(MAIN_COL_MAP.chiplets[0], CHIPLETS_OFFSET); + assert_eq!(MAIN_COL_MAP.chiplets[19], CHIPLETS_OFFSET + 19); + // s_perm is a separate field after chiplets[0..20] + assert_eq!(MAIN_COL_MAP.s_perm, CHIPLETS_OFFSET + 20); + } + + // --- Auxiliary trace column map vs legacy constants + // ------------------------------------------- + + #[test] + fn aux_col_map() { + assert_eq!(AUX_COL_MAP.p1_block_stack, DECODER_AUX_TRACE_OFFSET); + assert_eq!(AUX_COL_MAP.p2_block_hash, DECODER_AUX_TRACE_OFFSET + 1); + assert_eq!(AUX_COL_MAP.p3_op_group, DECODER_AUX_TRACE_OFFSET + 2); + assert_eq!(AUX_COL_MAP.stack_overflow, STACK_AUX_TRACE_OFFSET); + assert_eq!(AUX_COL_MAP.range_check, RANGE_CHECK_AUX_TRACE_OFFSET); + assert_eq!(AUX_COL_MAP.hash_kernel_vtable, HASH_KERNEL_VTABLE_AUX_TRACE_OFFSET); + assert_eq!(AUX_COL_MAP.chiplets_bus, CHIPLETS_BUS_AUX_TRACE_OFFSET); + assert_eq!(AUX_COL_MAP.ace_wiring, ACE_CHIPLET_WIRING_BUS_OFFSET); + } +} diff --git a/air/src/constraints/constants.rs b/air/src/constraints/constants.rs new file mode 100644 index 0000000000..3a0cebef76 --- /dev/null +++ b/air/src/constraints/constants.rs @@ -0,0 +1,29 @@ +//! Shared field constants for constraint code. + +use miden_core::field::PrimeCharacteristicRing; + +use crate::Felt; + +pub const F_1: Felt = Felt::ONE; +#[allow(dead_code)] +pub const F_NEG_1: Felt = Felt::NEG_ONE; +pub const F_2: Felt = Felt::TWO; +pub const F_3: Felt = Felt::new(3); +pub const F_4: Felt = Felt::new(4); +pub const F_5: Felt = Felt::new(5); +pub const F_6: Felt = Felt::new(6); +pub const F_7: Felt = Felt::new(7); +pub const F_8: Felt = Felt::new(8); +pub const F_9: Felt = Felt::new(9); +pub const F_16: Felt = Felt::new(16); +pub const F_27: Felt = Felt::new(27); +pub const F_81: Felt = Felt::new(81); +pub const F_128: Felt = Felt::new(128); +pub const F_243: Felt = Felt::new(243); +pub const F_729: Felt = Felt::new(729); +pub const F_2187: Felt = Felt::new(2187); +pub const TWO_POW_16: Felt = Felt::new(1 << 16); +pub const TWO_POW_16_MINUS_1: Felt = Felt::new(65535); +pub const TWO_POW_32: Felt = Felt::new(1 << 32); +pub const TWO_POW_32_MINUS_1: Felt = Felt::new((1u64 << 32) - 1); +pub const TWO_POW_48: Felt = Felt::new(1 << 48); diff --git a/air/src/constraints/decoder/bus.rs b/air/src/constraints/decoder/bus.rs index 84806c08e9..b51cf3d86b 100644 --- a/air/src/constraints/decoder/bus.rs +++ b/air/src/constraints/decoder/bus.rs @@ -23,50 +23,39 @@ //! - Processor tables: `processor/src/decoder/aux_trace/block_stack_table.rs` (p1), //! `processor/src/decoder/aux_trace/block_hash_table.rs` (p2), //! `processor/src/decoder/aux_trace/op_group_table.rs` (p3). -//! - air‑script constraints: `constraints/decoder.air`. use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{ExtensionBuilder, LiftedAirBuilder, WindowAccess}; +use miden_crypto::stark::air::{ExtensionBuilder, WindowAccess}; use crate::{ - MainTraceRow, - constraints::{ - bus::indices::P1_BLOCK_STACK, - op_flags::OpFlags, - tagging::{TaggingAirBuilderExt, ids::TAG_DECODER_BUS_BASE}, + Felt, MainCols, MidenAirBuilder, + constraints::{bus::indices::P1_BLOCK_STACK, constants::*, op_flags::OpFlags, utils::BoolNot}, + trace::{ + Challenges, + bus_types::{BLOCK_HASH_TABLE, BLOCK_STACK_TABLE, OP_GROUP_TABLE}, }, - trace::Challenges, }; // CONSTANTS // ================================================================================================ -/// Base ID for decoder bus constraints. -const DECODER_BUS_BASE_ID: usize = TAG_DECODER_BUS_BASE; - -/// Decoder bus constraint namespaces in assertion order. -const DECODER_BUS_NAMES: [&str; 3] = [ - "decoder.bus.p1.transition", - "decoder.bus.p2.transition", - "decoder.bus.p3.transition", -]; - /// Weights for opcode bit decoding: b0 + 2*b1 + ... + 64*b6. const OP_BIT_WEIGHTS: [u16; 7] = [1, 2, 4, 8, 16, 32, 64]; /// Encoders for block stack table (p1) messages. -struct BlockStackEncoders<'a, AB: LiftedAirBuilder> { +struct BlockStackEncoders<'a, AB: MidenAirBuilder> { challenges: &'a Challenges, } -impl<'a, AB: LiftedAirBuilder> BlockStackEncoders<'a, AB> { +impl<'a, AB: MidenAirBuilder> BlockStackEncoders<'a, AB> { fn new(challenges: &'a Challenges) -> Self { Self { challenges } } /// Encodes `[block_id, parent_id, is_loop]`. fn simple(&self, block_id: &AB::Expr, parent_id: &AB::Expr, is_loop: &AB::Expr) -> AB::ExprEF { - self.challenges.encode([block_id.clone(), parent_id.clone(), is_loop.clone()]) + self.challenges + .encode(BLOCK_STACK_TABLE, [block_id.clone(), parent_id.clone(), is_loop.clone()]) } /// Encodes `[block_id, parent_id, is_loop, ctx, depth, overflow, fn_hash[0..4]]`. @@ -80,27 +69,30 @@ impl<'a, AB: LiftedAirBuilder> BlockStackEncoders<'a, AB> { overflow: &AB::Expr, fh: &[AB::Expr; 4], ) -> AB::ExprEF { - self.challenges.encode([ - block_id.clone(), - parent_id.clone(), - is_loop.clone(), - ctx.clone(), - depth.clone(), - overflow.clone(), - fh[0].clone(), - fh[1].clone(), - fh[2].clone(), - fh[3].clone(), - ]) + self.challenges.encode( + BLOCK_STACK_TABLE, + [ + block_id.clone(), + parent_id.clone(), + is_loop.clone(), + ctx.clone(), + depth.clone(), + overflow.clone(), + fh[0].clone(), + fh[1].clone(), + fh[2].clone(), + fh[3].clone(), + ], + ) } } /// Encoder for block hash table (p2) messages. -struct BlockHashEncoder<'a, AB: LiftedAirBuilder> { +struct BlockHashEncoder<'a, AB: MidenAirBuilder> { challenges: &'a Challenges, } -impl<'a, AB: LiftedAirBuilder> BlockHashEncoder<'a, AB> { +impl<'a, AB: MidenAirBuilder> BlockHashEncoder<'a, AB> { fn new(challenges: &'a Challenges) -> Self { Self { challenges } } @@ -113,112 +105,56 @@ impl<'a, AB: LiftedAirBuilder> BlockHashEncoder<'a, AB> { first_child: &AB::Expr, loop_body: &AB::Expr, ) -> AB::ExprEF { - self.challenges.encode([ - parent.clone(), - hash[0].clone(), - hash[1].clone(), - hash[2].clone(), - hash[3].clone(), - first_child.clone(), - loop_body.clone(), - ]) + self.challenges.encode( + BLOCK_HASH_TABLE, + [ + parent.clone(), + hash[0].clone(), + hash[1].clone(), + hash[2].clone(), + hash[3].clone(), + first_child.clone(), + loop_body.clone(), + ], + ) } } /// Encoder for op group table (p3) messages. -struct OpGroupEncoder<'a, AB: LiftedAirBuilder> { +struct OpGroupEncoder<'a, AB: MidenAirBuilder> { challenges: &'a Challenges, } -impl<'a, AB: LiftedAirBuilder> OpGroupEncoder<'a, AB> { +impl<'a, AB: MidenAirBuilder> OpGroupEncoder<'a, AB> { fn new(challenges: &'a Challenges) -> Self { Self { challenges } } /// Encodes `[block_id, group_count, op_value]`. fn encode(&self, block_id: &AB::Expr, group_count: &AB::Expr, value: &AB::Expr) -> AB::ExprEF { - self.challenges.encode([block_id.clone(), group_count.clone(), value.clone()]) + self.challenges + .encode(OP_GROUP_TABLE, [block_id.clone(), group_count.clone(), value.clone()]) } } -/// Decoder column indices (relative to decoder trace). -mod decoder_cols { - /// Block address column. - pub const ADDR: usize = 0; - /// Hasher state offset within decoder trace. - pub const HASHER_STATE_OFFSET: usize = 8; - /// is_loop_flag column (hasher_state[5]). - pub const IS_LOOP_FLAG: usize = HASHER_STATE_OFFSET + 5; - /// is_call_flag column (hasher_state[6]). - pub const IS_CALL_FLAG: usize = HASHER_STATE_OFFSET + 6; - /// is_syscall_flag column (hasher_state[7]). - pub const IS_SYSCALL_FLAG: usize = HASHER_STATE_OFFSET + 7; -} - -/// Stack column indices (relative to stack trace). -mod stack_cols { - /// B0 column - stack depth. - pub const B0: usize = 16; - /// B1 column - overflow address. - pub const B1: usize = 17; -} - -/// Op group table column indices (relative to decoder trace). -mod op_group_cols { - /// HASHER_STATE_RANGE.end (hasher state is 8 columns starting at offset 8). - const HASHER_STATE_END: usize = super::decoder_cols::HASHER_STATE_OFFSET + 8; - - /// is_in_span flag column. - pub const IS_IN_SPAN: usize = HASHER_STATE_END; - - /// Group count column. - pub const GROUP_COUNT: usize = IS_IN_SPAN + 1; - - /// Op index column (not used directly here but defines layout). - const OP_INDEX: usize = GROUP_COUNT + 1; - - /// Batch flag columns (c0, c1, c2). - const BATCH_FLAGS_OFFSET: usize = OP_INDEX + 1; - pub const BATCH_FLAG_0: usize = BATCH_FLAGS_OFFSET; - pub const BATCH_FLAG_1: usize = BATCH_FLAGS_OFFSET + 1; - pub const BATCH_FLAG_2: usize = BATCH_FLAGS_OFFSET + 2; -} - -// HELPERS -// ================================================================================================ - -/// Decodes opcode bits from a trace row into an opcode value. -fn opcode_from_row(row: &MainTraceRow) -> AB::Expr -where - AB: LiftedAirBuilder, -{ - OP_BIT_WEIGHTS.iter().enumerate().fold(AB::Expr::ZERO, |acc, (i, weight)| { - let bit: AB::Expr = row.decoder[1 + i].clone().into(); - acc + bit * AB::Expr::from_u16(*weight) - }) -} - // ENTRY POINTS // ================================================================================================ /// Enforces all decoder bus constraints (p1, p2, p3). pub fn enforce_bus( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { enforce_block_stack_table_constraint(builder, local, next, op_flags, challenges); enforce_block_hash_table_constraint(builder, local, next, op_flags, challenges); enforce_op_group_table_constraint(builder, local, next, op_flags, challenges); } -// CONSTRAINT HELPERS -// ================================================================================================ - // BLOCK STACK TABLE (p1) // ================================================================================================ @@ -253,12 +189,12 @@ pub fn enforce_bus( /// - CALL/SYSCALL/DYNCALL: 11 elements with context `[..., ctx, fmp, b0, b1, fn_hash[0..4]]` pub fn enforce_block_stack_table_constraint( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { // Auxiliary trace must be present @@ -270,58 +206,50 @@ pub fn enforce_block_stack_table_constraint( (aux_local[P1_BLOCK_STACK], aux_next[P1_BLOCK_STACK]) }; - let one = AB::Expr::ONE; - let zero = AB::Expr::ZERO; - let one_ef = AB::ExprEF::ONE; - - // Helper to convert trace value to base field expression - let to_expr = |v: AB::Var| -> AB::Expr { v.into() }; - // ========================================================================= // TRACE VALUE EXTRACTION // ========================================================================= // Block addresses - let addr_local = to_expr(local.decoder[decoder_cols::ADDR].clone()); - let addr_next = to_expr(next.decoder[decoder_cols::ADDR].clone()); + let addr_local: AB::Expr = local.decoder.addr.into(); + let addr_next: AB::Expr = next.decoder.addr.into(); // Hasher state element 1 (for RESPAN parent_id) - let h1_next = to_expr(next.decoder[decoder_cols::HASHER_STATE_OFFSET + 1].clone()); + let h1_next: AB::Expr = next.decoder.hasher_state[1].into(); // Stack top (for LOOP is_loop condition) - let s0 = to_expr(local.stack[0].clone()); + let s0: AB::Expr = local.stack.get(0).into(); // Context info for CALL/SYSCALL/DYNCALL insertions (from current row) - let ctx_local = to_expr(local.ctx.clone()); - let b0_local = to_expr(local.stack[stack_cols::B0].clone()); - let b1_local = to_expr(local.stack[stack_cols::B1].clone()); + let ctx_local: AB::Expr = local.system.ctx.into(); + let b0_local: AB::Expr = local.stack.b0.into(); + let b1_local: AB::Expr = local.stack.b1.into(); let fn_hash_local: [AB::Expr; 4] = [ - to_expr(local.fn_hash[0].clone()), - to_expr(local.fn_hash[1].clone()), - to_expr(local.fn_hash[2].clone()), - to_expr(local.fn_hash[3].clone()), + local.system.fn_hash[0].into(), + local.system.fn_hash[1].into(), + local.system.fn_hash[2].into(), + local.system.fn_hash[3].into(), ]; // Hasher state for DYNCALL (h4, h5 contain post-shift stack state) - let h4_local = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 4].clone()); - let h5_local = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 5].clone()); + let h4_local: AB::Expr = local.decoder.hasher_state[4].into(); + let h5_local: AB::Expr = local.decoder.hasher_state[5].into(); // Flags for END context detection - let is_loop_flag = to_expr(local.decoder[decoder_cols::IS_LOOP_FLAG].clone()); - let is_call_flag = to_expr(local.decoder[decoder_cols::IS_CALL_FLAG].clone()); - let is_syscall_flag = to_expr(local.decoder[decoder_cols::IS_SYSCALL_FLAG].clone()); + let is_loop_flag: AB::Expr = local.decoder.hasher_state[5].into(); + let is_call_flag: AB::Expr = local.decoder.hasher_state[6].into(); + let is_syscall_flag: AB::Expr = local.decoder.hasher_state[7].into(); // Context info for END after CALL/SYSCALL (from next row) - let ctx_next = to_expr(next.ctx.clone()); - let b0_next = to_expr(next.stack[stack_cols::B0].clone()); - let b1_next = to_expr(next.stack[stack_cols::B1].clone()); + let ctx_next: AB::Expr = next.system.ctx.into(); + let b0_next: AB::Expr = next.stack.b0.into(); + let b1_next: AB::Expr = next.stack.b1.into(); let fn_hash_next: [AB::Expr; 4] = [ - to_expr(next.fn_hash[0].clone()), - to_expr(next.fn_hash[1].clone()), - to_expr(next.fn_hash[2].clone()), - to_expr(next.fn_hash[3].clone()), + next.system.fn_hash[0].into(), + next.system.fn_hash[1].into(), + next.system.fn_hash[2].into(), + next.system.fn_hash[3].into(), ]; - // ========================================================================= // MESSAGE BUILDERS // ========================================================================= @@ -345,7 +273,7 @@ pub fn enforce_block_stack_table_constraint( let is_end = op_flags.end(); // JOIN/SPLIT/SPAN/DYN: insert(addr', addr, 0, 0, 0, 0, 0, 0, 0, 0) - let msg_simple = encoders.simple(&addr_next, &addr_local, &zero); + let msg_simple = encoders.simple(&addr_next, &addr_local, &AB::Expr::ZERO); let v_join = msg_simple.clone() * is_join.clone(); let v_split = msg_simple.clone() * is_split.clone(); let v_span = msg_simple.clone() * is_span.clone(); @@ -356,14 +284,14 @@ pub fn enforce_block_stack_table_constraint( let v_loop = msg_loop * is_loop.clone(); // RESPAN: insert(addr', h1', 0, 0, 0, 0, 0, 0, 0, 0) - let msg_respan_insert = encoders.simple(&addr_next, &h1_next, &zero); + let msg_respan_insert = encoders.simple(&addr_next, &h1_next, &AB::Expr::ZERO); let v_respan = msg_respan_insert * is_respan.clone(); // CALL/SYSCALL: insert(addr', addr, 0, ctx, fmp, b0, b1, fn_hash[0..4]) let msg_call = encoders.full( &addr_next, &addr_local, - &zero, + &AB::Expr::ZERO, &ctx_local, &b0_local, &b1_local, @@ -376,7 +304,7 @@ pub fn enforce_block_stack_table_constraint( let msg_dyncall = encoders.full( &addr_next, &addr_local, - &zero, + &AB::Expr::ZERO, &ctx_local, &h4_local, &h5_local, @@ -400,18 +328,18 @@ pub fn enforce_block_stack_table_constraint( v_join + v_split + v_span + v_dyn + v_loop + v_respan + v_call + v_syscall + v_dyncall; // Response side: insertion_sum + (1 - insert_flag_sum) - let response = insertion_sum + (one_ef.clone() - insert_flag_sum); + let response = insertion_sum + insert_flag_sum.not(); // ========================================================================= // REMOVAL CONTRIBUTIONS (u_xxx = f_xxx * message) // ========================================================================= // RESPAN removal: remove(addr, h1', 0, 0, 0, 0, 0, 0, 0, 0) - let msg_respan_remove = encoders.simple(&addr_local, &h1_next, &zero); + let msg_respan_remove = encoders.simple(&addr_local, &h1_next, &AB::Expr::ZERO); let u_respan = msg_respan_remove * is_respan.clone(); // END for simple blocks: remove(addr, addr', is_loop_flag, 0, 0, 0, 0, 0, 0, 0) - let is_simple_end = one.clone() - is_call_flag.clone() - is_syscall_flag.clone(); + let is_simple_end = AB::Expr::ONE - is_call_flag.clone() - is_syscall_flag.clone(); let msg_end_simple = encoders.simple(&addr_local, &addr_next, &is_loop_flag); let end_simple_gate = is_end.clone() * is_simple_end; let u_end_simple = msg_end_simple * end_simple_gate; @@ -419,7 +347,7 @@ pub fn enforce_block_stack_table_constraint( // END for CALL/SYSCALL: remove(addr, addr', is_loop_flag, ctx', b0', b1', fn_hash'[0..4]) // Note: The is_loop value is the is_loop_flag from the current row (same as simple END) // Context values come from the next row's dedicated columns (not hasher state) - let is_call_or_syscall = is_call_flag.clone() + is_syscall_flag.clone(); + let is_call_or_syscall = is_call_flag + is_syscall_flag; let msg_end_call = encoders.full( &addr_local, &addr_next, @@ -442,7 +370,7 @@ pub fn enforce_block_stack_table_constraint( let removal_sum = u_end + u_respan; // Request side: removal_sum + (1 - remove_flag_sum) - let request = removal_sum + (one_ef.clone() - remove_flag_sum); + let request = removal_sum + remove_flag_sum.not(); // ========================================================================= // RUNNING PRODUCT CONSTRAINT @@ -452,9 +380,7 @@ pub fn enforce_block_stack_table_constraint( let lhs: AB::ExprEF = p1_next.into() * request; let rhs: AB::ExprEF = p1_local.into() * response; - builder.tagged(DECODER_BUS_BASE_ID, DECODER_BUS_NAMES[0], |builder| { - builder.when_transition().assert_zero_ext(lhs - rhs); - }); + builder.when_transition().assert_eq_ext(lhs, rhs); } // BLOCK HASH TABLE (p2) @@ -497,12 +423,12 @@ pub fn enforce_block_stack_table_constraint( /// ``` pub fn enforce_block_hash_table_constraint( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { // Auxiliary trace must be present @@ -517,44 +443,36 @@ pub fn enforce_block_hash_table_constraint( ) }; - let one = AB::Expr::ONE; - let zero = AB::Expr::ZERO; - let one_ef = AB::ExprEF::ONE; - - // Helper to convert trace value to base field expression - let to_expr = |v: AB::Var| -> AB::Expr { v.into() }; - // ========================================================================= // TRACE VALUE EXTRACTION // ========================================================================= // Parent block ID (next row's address for all insertions) - let parent_id = to_expr(next.decoder[decoder_cols::ADDR].clone()); - + let parent_id: AB::Expr = next.decoder.addr.into(); // Hasher state for child hashes // First half: h[0..4] - let h0 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET].clone()); - let h1 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 1].clone()); - let h2 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 2].clone()); - let h3 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 3].clone()); + let h0: AB::Expr = local.decoder.hasher_state[0].into(); + let h1: AB::Expr = local.decoder.hasher_state[1].into(); + let h2: AB::Expr = local.decoder.hasher_state[2].into(); + let h3: AB::Expr = local.decoder.hasher_state[3].into(); // Second half: h[4..8] - let h4 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 4].clone()); - let h5 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 5].clone()); - let h6 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 6].clone()); - let h7 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 7].clone()); + let h4: AB::Expr = local.decoder.hasher_state[4].into(); + let h5: AB::Expr = local.decoder.hasher_state[5].into(); + let h6: AB::Expr = local.decoder.hasher_state[6].into(); + let h7: AB::Expr = local.decoder.hasher_state[7].into(); // Stack top (for SPLIT and LOOP conditions) - let s0: AB::Expr = to_expr(local.stack[0].clone()); + let s0: AB::Expr = local.stack.get(0).into(); // For END: block hash comes from current row's hasher state first half - let end_parent_id = to_expr(next.decoder[decoder_cols::ADDR].clone()); + let end_parent_id = parent_id.clone(); let end_hash_0 = h0.clone(); let end_hash_1 = h1.clone(); let end_hash_2 = h2.clone(); let end_hash_3 = h3.clone(); // is_loop_body flag for END (stored at hasher_state[4] = IS_LOOP_BODY_FLAG) - let is_loop_body_flag = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 4].clone()); + let is_loop_body_flag: AB::Expr = local.decoder.hasher_state[4].into(); // is_first_child detection for END: // A block is first_child if the NEXT row's opcode is NOT (END, REPEAT, or HALT). @@ -563,17 +481,13 @@ pub fn enforce_block_hash_table_constraint( // // Note: END (112), REPEAT (116), HALT (124) are all degree-4 operations, // so is_first_child has degree 4. - let accessor_next = - crate::constraints::op_flags::ExprDecoderAccess::::new(next); - let op_flags_next = OpFlags::new(accessor_next); - - let is_end_next = op_flags_next.end(); - let is_repeat_next = op_flags_next.repeat(); - let is_halt_next = op_flags_next.halt(); + let is_end_next = op_flags.end_next(); + let is_repeat_next = op_flags.repeat_next(); + let is_halt_next = op_flags.halt_next(); // is_first_child = 1 when next op is NOT end/repeat/halt let is_not_first_child = is_end_next + is_repeat_next + is_halt_next; - let is_first_child = one.clone() - is_not_first_child; + let is_first_child = is_not_first_child.not(); // ========================================================================= // MESSAGE BUILDERS @@ -601,32 +515,42 @@ pub fn enforce_block_hash_table_constraint( // JOIN: Insert both children // Left child (is_first_child=1): hash from first half - let msg_join_left = encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &one, &zero); + let msg_join_left = + encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &AB::Expr::ONE, &AB::Expr::ZERO); // Right child (is_first_child=0): hash from second half - let msg_join_right = encoder.encode(&parent_id, [&h4, &h5, &h6, &h7], &zero, &zero); + let msg_join_right = + encoder.encode(&parent_id, [&h4, &h5, &h6, &h7], &AB::Expr::ZERO, &AB::Expr::ZERO); let v_join = (msg_join_left * msg_join_right) * is_join.clone(); // SPLIT: Insert selected child based on s0 // If s0=1: left child (h0-h3), else right child (h4-h7) - let split_h0 = s0.clone() * h0.clone() + (one.clone() - s0.clone()) * h4.clone(); - let split_h1 = s0.clone() * h1.clone() + (one.clone() - s0.clone()) * h5.clone(); - let split_h2 = s0.clone() * h2.clone() + (one.clone() - s0.clone()) * h6.clone(); - let split_h3 = s0.clone() * h3.clone() + (one.clone() - s0.clone()) * h7.clone(); - let msg_split = - encoder.encode(&parent_id, [&split_h0, &split_h1, &split_h2, &split_h3], &zero, &zero); + let not_s0 = s0.not(); + let split_h0 = s0.clone() * h0.clone() + not_s0.clone() * h4.clone(); + let split_h1 = s0.clone() * h1.clone() + not_s0.clone() * h5.clone(); + let split_h2 = s0.clone() * h2.clone() + not_s0.clone() * h6.clone(); + let split_h3 = s0.clone() * h3.clone() + not_s0 * h7.clone(); + let msg_split = encoder.encode( + &parent_id, + [&split_h0, &split_h1, &split_h2, &split_h3], + &AB::Expr::ZERO, + &AB::Expr::ZERO, + ); let v_split = msg_split * is_split.clone(); // LOOP: Conditionally insert body if s0=1 - let msg_loop = encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &zero, &one); + let msg_loop = + encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &AB::Expr::ZERO, &AB::Expr::ONE); // When s0=1: insert msg_loop; when s0=0: multiply by 1 (no insertion) - let v_loop = (msg_loop * s0.clone() + (one_ef.clone() - s0.clone())) * is_loop.clone(); + let v_loop = (msg_loop * s0.clone() + (AB::ExprEF::ONE - s0.clone())) * is_loop.clone(); // REPEAT: Insert loop body - let msg_repeat = encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &zero, &one); + let msg_repeat = + encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &AB::Expr::ZERO, &AB::Expr::ONE); let v_repeat = msg_repeat * is_repeat.clone(); // DYN/DYNCALL/CALL/SYSCALL: Insert child hash from first half - let msg_call_like = encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &zero, &zero); + let msg_call_like = + encoder.encode(&parent_id, [&h0, &h1, &h2, &h3], &AB::Expr::ZERO, &AB::Expr::ZERO); let v_dyn = msg_call_like.clone() * is_dyn.clone(); let v_dyncall = msg_call_like.clone() * is_dyncall.clone(); let v_call = msg_call_like.clone() * is_call.clone(); @@ -651,7 +575,7 @@ pub fn enforce_block_hash_table_constraint( + v_dyncall + v_call + v_syscall - + (one_ef.clone() - insert_flag_sum); + + insert_flag_sum.not(); // ========================================================================= // REQUEST CONTRIBUTIONS (removals) @@ -668,7 +592,7 @@ pub fn enforce_block_hash_table_constraint( let u_end = msg_end * is_end.clone(); // Request side - let request = u_end + (one_ef.clone() - is_end); + let request = u_end + is_end.not(); // ========================================================================= // RUNNING PRODUCT CONSTRAINT @@ -678,9 +602,7 @@ pub fn enforce_block_hash_table_constraint( let lhs: AB::ExprEF = p2_next.into() * request; let rhs: AB::ExprEF = p2_local.into() * response; - builder.tagged(DECODER_BUS_BASE_ID + 1, DECODER_BUS_NAMES[1], |builder| { - builder.when_transition().assert_zero_ext(lhs - rhs); - }); + builder.when_transition().assert_eq_ext(lhs, rhs); } // OP GROUP TABLE (p3) @@ -732,12 +654,12 @@ pub fn enforce_block_hash_table_constraint( /// - Total constraint: degree 9 pub fn enforce_op_group_table_constraint( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { // Auxiliary trace must be present @@ -752,44 +674,38 @@ pub fn enforce_op_group_table_constraint( ) }; - let one = AB::Expr::ONE; - let one_ef = AB::ExprEF::ONE; - - // Helper to convert trace value to base field expression - let to_expr = |v: AB::Var| -> AB::Expr { v.into() }; - // ========================================================================= // TRACE VALUE EXTRACTION // ========================================================================= // Block ID (next row's address for insertions, current for removals) - let block_id_insert = to_expr(next.decoder[decoder_cols::ADDR].clone()); - let block_id_remove = to_expr(local.decoder[decoder_cols::ADDR].clone()); + let block_id_insert: AB::Expr = next.decoder.addr.into(); + let block_id_remove: AB::Expr = local.decoder.addr.into(); // Group count - let gc = to_expr(local.decoder[op_group_cols::GROUP_COUNT].clone()); - let gc_next = to_expr(next.decoder[op_group_cols::GROUP_COUNT].clone()); + let gc: AB::Expr = local.decoder.group_count.into(); + let gc_next: AB::Expr = next.decoder.group_count.into(); // Hasher state for group values (h1-h7, h0 is decoded immediately) - let h1 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 1].clone()); - let h2 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 2].clone()); - let h3 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 3].clone()); - let h4 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 4].clone()); - let h5 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 5].clone()); - let h6 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 6].clone()); - let h7 = to_expr(local.decoder[decoder_cols::HASHER_STATE_OFFSET + 7].clone()); + let h1: AB::Expr = local.decoder.hasher_state[1].into(); + let h2: AB::Expr = local.decoder.hasher_state[2].into(); + let h3: AB::Expr = local.decoder.hasher_state[3].into(); + let h4: AB::Expr = local.decoder.hasher_state[4].into(); + let h5: AB::Expr = local.decoder.hasher_state[5].into(); + let h6: AB::Expr = local.decoder.hasher_state[6].into(); + let h7: AB::Expr = local.decoder.hasher_state[7].into(); // Batch flag columns (c0, c1, c2) - let c0 = to_expr(local.decoder[op_group_cols::BATCH_FLAG_0].clone()); - let c1 = to_expr(local.decoder[op_group_cols::BATCH_FLAG_1].clone()); - let c2 = to_expr(local.decoder[op_group_cols::BATCH_FLAG_2].clone()); + let c0: AB::Expr = local.decoder.batch_flags[0].into(); + let c1: AB::Expr = local.decoder.batch_flags[1].into(); + let c2: AB::Expr = local.decoder.batch_flags[2].into(); // For removal: h0' and s0' from next row - let h0_next = to_expr(next.decoder[decoder_cols::HASHER_STATE_OFFSET].clone()); - let s0_next = to_expr(next.stack[0].clone()); + let h0_next: AB::Expr = next.decoder.hasher_state[0].into(); + let s0_next: AB::Expr = next.stack.get(0).into(); // is_in_span flag (sp) - let sp = to_expr(local.decoder[op_group_cols::IS_IN_SPAN].clone()); + let sp = local.decoder.in_span; // ========================================================================= // MESSAGE BUILDER @@ -813,34 +729,22 @@ pub fn enforce_op_group_table_constraint( // OP_BATCH_2_GROUPS = [0, 0, 1] -> f_g2 = (1-c0) * (1-c1) * c2 // OP_BATCH_1_GROUPS = [0, 1, 1] -> f_g1 = (1-c0) * c1 * c2 let f_g8 = c0.clone(); - let f_g4 = (one.clone() - c0.clone()) * c1.clone() * (one.clone() - c2.clone()); - let f_g2 = (one.clone() - c0.clone()) * (one.clone() - c1.clone()) * c2.clone(); - - // ========================================================================= - // CONSTANTS - // ========================================================================= - - // Build base field constants. - let two = AB::Expr::from_u16(2); - let three = AB::Expr::from_u16(3); - let four = AB::Expr::from_u16(4); - let five = AB::Expr::from_u16(5); - let six = AB::Expr::from_u16(6); - let seven = AB::Expr::from_u16(7); - let onetwentyeight = AB::Expr::from_u16(128); + let not_c0 = c0.not(); + let f_g4 = not_c0.clone() * c1.clone() * c2.not(); + let f_g2 = not_c0 * c1.not() * c2.clone(); // ========================================================================= // RESPONSE (insertions during SPAN/RESPAN) // ========================================================================= // Build messages for each group: v_i = msg(block_id', gc - i, h_i) - let v_1 = encoder.encode(&block_id_insert, &(gc.clone() - one.clone()), &h1); - let v_2 = encoder.encode(&block_id_insert, &(gc.clone() - two.clone()), &h2); - let v_3 = encoder.encode(&block_id_insert, &(gc.clone() - three.clone()), &h3); - let v_4 = encoder.encode(&block_id_insert, &(gc.clone() - four.clone()), &h4); - let v_5 = encoder.encode(&block_id_insert, &(gc.clone() - five.clone()), &h5); - let v_6 = encoder.encode(&block_id_insert, &(gc.clone() - six.clone()), &h6); - let v_7 = encoder.encode(&block_id_insert, &(gc.clone() - seven.clone()), &h7); + let v_1 = encoder.encode(&block_id_insert, &(gc.clone() - F_1), &h1); + let v_2 = encoder.encode(&block_id_insert, &(gc.clone() - F_2), &h2); + let v_3 = encoder.encode(&block_id_insert, &(gc.clone() - F_3), &h3); + let v_4 = encoder.encode(&block_id_insert, &(gc.clone() - F_4), &h4); + let v_5 = encoder.encode(&block_id_insert, &(gc.clone() - F_5), &h5); + let v_6 = encoder.encode(&block_id_insert, &(gc.clone() - F_6), &h6); + let v_7 = encoder.encode(&block_id_insert, &(gc.clone() - F_7), &h7); // Compute products for each batch size let prod_3 = v_1.clone() * v_2.clone() * v_3.clone(); @@ -856,7 +760,7 @@ pub fn enforce_op_group_table_constraint( let response = (v_1.clone() * f_g2.clone()) + (prod_3 * f_g4.clone()) + (prod_7 * f_g8.clone()) - + (one_ef.clone() - (f_g2 + f_g4 + f_g8)); + + (AB::ExprEF::ONE - (f_g2 + f_g4 + f_g8)); // ========================================================================= // REQUEST (removals when group count decrements inside span) @@ -868,21 +772,25 @@ pub fn enforce_op_group_table_constraint( let f_dg = sp * delta_gc; // Compute op_code' from next row's opcode bits (b0' + 2*b1' + ... + 64*b6'). - let op_code_next = opcode_from_row::(next); + let op_code_next = + OP_BIT_WEIGHTS.iter().enumerate().fold(AB::Expr::ZERO, |acc, (i, weight)| { + let bit = next.decoder.op_bits[i]; + acc + bit * Felt::new(*weight as u64) + }); // Removal value formula: // u = (h0' * 128 + op_code') * (1 - is_push) + s0' * is_push // // When PUSH: the immediate value is on the stack (s0') // Otherwise: the group value is h0' * 128 + op_code' - let group_value_non_push = h0_next * onetwentyeight + op_code_next; - let group_value = is_push.clone() * s0_next + (one.clone() - is_push) * group_value_non_push; + let group_value_non_push = h0_next * F_128 + op_code_next; + let group_value = is_push.clone() * s0_next + is_push.not() * group_value_non_push; // Removal message: u = msg(block_id, gc, group_value) let u = encoder.encode(&block_id_remove, &gc, &group_value); // Request formula: f_dg * u + (1 - f_dg) - let request = u * f_dg.clone() + (one_ef.clone() - f_dg); + let request = u * f_dg.clone() + f_dg.not(); // ========================================================================= // RUNNING PRODUCT CONSTRAINT @@ -892,7 +800,5 @@ pub fn enforce_op_group_table_constraint( let lhs: AB::ExprEF = p3_next.into() * request; let rhs: AB::ExprEF = p3_local.into() * response; - builder.tagged(DECODER_BUS_BASE_ID + 2, DECODER_BUS_NAMES[2], |builder| { - builder.when_transition().assert_zero_ext(lhs - rhs); - }); + builder.when_transition().assert_eq_ext(lhs, rhs); } diff --git a/air/src/constraints/decoder/columns.rs b/air/src/constraints/decoder/columns.rs new file mode 100644 index 0000000000..3bb607a577 --- /dev/null +++ b/air/src/constraints/decoder/columns.rs @@ -0,0 +1,58 @@ +use crate::trace::decoder::{ + NUM_HASHER_COLUMNS, NUM_OP_BATCH_FLAGS, NUM_OP_BITS, NUM_OP_BITS_EXTRA_COLS, + NUM_USER_OP_HELPERS, +}; + +/// Decoder columns in the main execution trace (24 columns). +#[repr(C)] +pub struct DecoderCols { + /// Block address (hasher table row pointer). + pub addr: T, + /// Opcode bits b0-b6. + pub op_bits: [T; NUM_OP_BITS], + /// Hasher state h0-h7 (shared between decoding and MAST node hashing). + pub hasher_state: [T; NUM_HASHER_COLUMNS], + /// In-span flag (1 inside a basic block). + pub in_span: T, + /// Remaining operation group count. + pub group_count: T, + /// Position within operation group (0-8). + pub op_index: T, + /// Operation batch flags c0, c1, c2. + pub batch_flags: [T; NUM_OP_BATCH_FLAGS], + /// Degree-reduction extra columns e0, e1. + pub extra: [T; NUM_OP_BITS_EXTRA_COLS], +} + +impl DecoderCols { + /// Returns the 6 user-op helper registers (hasher_state[2..8]). + pub fn user_op_helpers(&self) -> [T; NUM_USER_OP_HELPERS] { + [ + self.hasher_state[2], + self.hasher_state[3], + self.hasher_state[4], + self.hasher_state[5], + self.hasher_state[6], + self.hasher_state[7], + ] + } + + /// Returns the 4 end-block flags (hasher_state[4..8]). + pub fn end_block_flags(&self) -> EndBlockFlags { + EndBlockFlags { + is_loop_body: self.hasher_state[4], + is_loop: self.hasher_state[5], + is_call: self.hasher_state[6], + is_syscall: self.hasher_state[7], + } + } +} + +/// Named end-block flag overlay for `hasher_state[4..8]`. +#[repr(C)] +pub struct EndBlockFlags { + pub is_loop_body: T, + pub is_loop: T, + pub is_call: T, + pub is_syscall: T, +} diff --git a/air/src/constraints/decoder/mod.rs b/air/src/constraints/decoder/mod.rs index 0aea0e35fb..be42adb6d5 100644 --- a/air/src/constraints/decoder/mod.rs +++ b/air/src/constraints/decoder/mod.rs @@ -5,21 +5,29 @@ //! //! ## Constraint Categories //! -//! 1. **Op Bit Constraints**: Ensure operation bits are binary -//! 2. **Op Bits Extra Columns**: Ensure degree reduction columns are correctly computed -//! 3. **Batch Flag Constraints**: Ensure batch flags are binary and properly set -//! 4. **In-Span Constraints**: Ensure in-span flag transitions correctly -//! 5. **Group Count Constraints**: Ensure group count transitions correctly +//! 1. **In-span constraints**: Ensure the in-span flag transitions correctly. +//! 2. **Op-bit binary constraints**: Ensure operation bits are binary. +//! 3. **Extra columns (e0, e1)**: Degree-reduction columns for operation flag computation. +//! 4. **Opcode-bit group constraints**: Eliminate unused opcode prefixes. +//! 5. **General opcode-semantic constraints**: Per-operation invariants (SPLIT/LOOP, DYN, REPEAT, +//! END, HALT). +//! 6. **Group count constraints**: Group-count transitions inside basic blocks. +//! 7. **Op group decoding (h0) constraints**: Base-128 opcode packing in h0. +//! 8. **Op index constraints**: Position tracking within an operation group. +//! 9. **Batch flag constraints**: Batch size encoding and unused-lane zeroing. +//! 10. **Block address (addr) constraints**: Hasher-table address management. +//! 11. **Control flow constraint**: Mutual exclusivity of `in_span` and `f_ctrl`. //! //! ## Mental Model //! //! The decoder trace is the control-flow spine of the VM. Each row is either: -//! - **inside a basic block** (sp = 1) where ops execute and counters advance, or -//! - **a control-flow row** (sp = 0) that starts/ends/reshapes a block. +//! - **inside a basic block** (`in_span` = 1) where ops execute and counters advance, or +//! - **a control-flow row** (`in_span` = 0) that starts/ends/reshapes a block. //! //! The constraints below enforce three linked ideas: //! 1. **Opcode decoding is well-formed** (op bits and degree-reduction columns are consistent). -//! 2. **Span state is coherent** (sp, group_count, op_index evolve exactly as control-flow allows). +//! 2. **Span state is coherent** (`in_span`, `group_count`, `op_index` evolve exactly as +//! control-flow allows). //! 3. **Hasher lanes match batch semantics** (batch flags and h0..h7 encode the pending groups). //! //! Read the sections in that order: first the binary/format checks, then the span state machine, @@ -27,242 +35,53 @@ //! //! ## Decoder Trace Layout //! -//! The decoder trace consists of the following columns: -//! - `addr`: Block address (row address in hasher table) -//! - `b0-b6`: 7 operation bits encoding the opcode -//! - `h0-h7`: 8 hasher state columns (shared between decoding and program hashing) -//! - `sp`: In-span flag (1 when inside basic block, 0 otherwise) -//! - `gc`: Group count (remaining operation groups in current span) -//! - `ox`: Operation index (position within current operation group, 0-8) -//! - `c0, c1, c2`: Batch flags (encode number of groups in current batch) -//! - `e0, e1`: Extra columns for degree reduction - -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{AirBuilder, LiftedAirBuilder}; +//! ```text +//! addr | b0 b1 b2 b3 b4 b5 b6 | h0 h1 h2 h3 h4 h5 h6 h7 | sp | gc | ox | c0 c1 c2 | e0 e1 +//! (1) (7 op bits) (8 hasher state) (1) (1) (1) (3) (2) +//! ``` +//! +//! ### Hasher state dual-purpose (`h0`–`h7`) +//! +//! The 8 hasher-state columns serve different roles depending on the current operation: +//! +//! | Context | h0 | h1..h3 | h4 | h5 | h6 | h7 | +//! |-------------|------------|-----------|----------------|---------|---------|------------| +//! | SPAN/RESPAN | packed ops | op groups | op group | op group| op group| op group | +//! | END | block hash₀| hash₁..₃ | is_loop_body | is_loop | is_call | is_syscall | +//! | User ops | packed ops | op groups | user_op_helper | ... | ... | ... | +//! +//! ## Operation Flag Degrees +//! +//! | Operation | Flag | Degree | +//! |-----------|:------------:|:------:| +//! | JOIN | f_join | 5 | +//! | SPLIT | f_split | 5 | +//! | LOOP | f_loop | 5 | +//! | REPEAT | f_repeat | 4 | +//! | SPAN | f_span | 5 | +//! | RESPAN | f_respan | 4 | +//! | DYN | f_dyn | 5 | +//! | END | f_end | 4 | +//! | HALT | f_halt | 4 | +//! | PUSH | f_push | 5 | +//! | f_ctrl | (composite) | 5 | + +pub mod columns; + +use miden_crypto::stark::air::AirBuilder; use crate::{ - MainTraceRow, + Felt, MainCols, MidenAirBuilder, constraints::{ - op_flags::{ExprDecoderAccess, OpFlags}, - tagging::{ - TagGroup, TaggingAirBuilderExt, ids::TAG_DECODER_BASE, tagged_assert_zero, - tagged_assert_zero_integrity, - }, + constants::{F_1, F_128}, + decoder::columns::DecoderCols, + op_flags::OpFlags, + utils::{BoolNot, horner_eval_bits}, }, - trace::decoder as decoder_cols, + trace::chiplets::hasher::CONTROLLER_ROWS_PER_PERM_FELT, }; pub mod bus; -#[cfg(test)] -pub mod tests; - -// CONSTANTS -// ================================================================================================ - -/// Index offset for block address column within decoder (column 0). -const ADDR_OFFSET: usize = 0; - -/// Index offsets within the decoder array for op bits (b0-b6). -/// Op bits start at index 1 in the decoder (after addr at index 0). -const OP_BITS_OFFSET: usize = 1; - -/// Number of hasher controller rows per permutation request (= 2: input + output). -/// This is the address increment per hash operation in the decoder's addr column. -const ADDR_INCREMENT_PER_HASH: u64 = - crate::trace::chiplets::hasher::CONTROLLER_ROWS_PER_PERMUTATION as u64; - -/// Number of operation bits. -const NUM_OP_BITS: usize = 7; - -/// Index offset for in-span column within decoder. -const IN_SPAN_OFFSET: usize = 16; - -/// Index offset for group count column within decoder. -const GROUP_COUNT_OFFSET: usize = 17; - -/// Index offset for operation index column within decoder. -const OP_INDEX_OFFSET: usize = 18; - -/// Index offset for batch flags within decoder. -const BATCH_FLAGS_OFFSET: usize = 19; - -/// Number of batch flag columns. -const NUM_BATCH_FLAGS: usize = 3; - -/// Index offset for extra columns (e0, e1) within decoder. -const EXTRA_COLS_OFFSET: usize = 22; - -/// Number of decoder constraints, in the order of `DECODER_NAMES`. -/// - 7 op bits binary constraints -/// - 2 extra columns constraints (e0, e1) -/// - 3 op-bit group constraints (u32 b0, very-high b0/b1) -/// - 3 batch flags binary constraints -/// - 14 general constraints -/// - 1 in-span boundary constraint (first row sp = 0) -/// - 1 in-span binary constraint -/// - 2 in-span transition constraints (after SPAN/RESPAN, sp' = 1) -/// - 5 group count constraints -/// - 2 op group decoding constraints -/// - 4 op index constraints -/// - 9 op batch flag constraints -/// - 3 block address constraints -/// - 1 control flow constraint (1 - sp - f_ctrl = 0) -#[allow(dead_code)] -pub const NUM_CONSTRAINTS: usize = 57; - -/// Base ID for decoder constraints (inclusive). -const DECODER_BASE_ID: usize = TAG_DECODER_BASE; - -/// Decoder constraint namespaces in assertion order. -const DECODER_NAMES: [&str; NUM_CONSTRAINTS] = [ - // in-span constraints (boundary first, then transition rules) - "decoder.in_span.first_row", - "decoder.in_span.binary", - "decoder.in_span.span", - "decoder.in_span.respan", - // op bits binary (b0..b6) - "decoder.op_bits.b0.binary", - "decoder.op_bits.b1.binary", - "decoder.op_bits.b2.binary", - "decoder.op_bits.b3.binary", - "decoder.op_bits.b4.binary", - "decoder.op_bits.b5.binary", - "decoder.op_bits.b6.binary", - // extra columns (e0, e1) - "decoder.extra.e0", - "decoder.extra.e1", - // op-bit group constraints - "decoder.op_bits.u32_prefix.b0", - "decoder.op_bits.very_high.b0", - "decoder.op_bits.very_high.b1", - // batch flags binary (c0..c2) - "decoder.batch_flags.c0.binary", - "decoder.batch_flags.c1.binary", - "decoder.batch_flags.c2.binary", - // general constraints - "decoder.general.split_loop.s0.binary", - "decoder.general.dyn.h4.zero", - "decoder.general.dyn.h5.zero", - "decoder.general.dyn.h6.zero", - "decoder.general.dyn.h7.zero", - "decoder.general.repeat.s0.one", - "decoder.general.repeat.h4.one", - "decoder.general.end.loop.s0.zero", - "decoder.general.end_repeat.h0.carry", - "decoder.general.end_repeat.h1.carry", - "decoder.general.end_repeat.h2.carry", - "decoder.general.end_repeat.h3.carry", - "decoder.general.end_repeat.h4.carry", - "decoder.general.halt.next", - // group count constraints - "decoder.group_count.delta.binary", - "decoder.group_count.decrement.h0_or_imm", - "decoder.group_count.span_decrement", - "decoder.group_count.end_or_respan.hold", - "decoder.group_count.end.zero", - // op group decoding constraints - "decoder.op_group.shift", - "decoder.op_group.end_or_respan.h0.zero", - // op index constraints - "decoder.op_index.span_respan.reset", - "decoder.op_index.new_group.reset", - "decoder.op_index.increment", - "decoder.op_index.range", - // batch flag constraints and zeroing rules - "decoder.batch_flags.span_sum", - "decoder.batch_flags.zero_when_not_span", - "decoder.batch_flags.h4.zero", - "decoder.batch_flags.h5.zero", - "decoder.batch_flags.h6.zero", - "decoder.batch_flags.h7.zero", - "decoder.batch_flags.h2.zero", - "decoder.batch_flags.h3.zero", - "decoder.batch_flags.h1.zero", - // block address constraints - "decoder.addr.hold_in_span", - "decoder.addr.respan.increment", - "decoder.addr.halt.zero", - // control flow constraint - "decoder.control_flow.sp_complement", -]; - -/// Tag metadata for this constraint group. -const DECODER_TAGS: TagGroup = TagGroup { - base: DECODER_BASE_ID, - names: &DECODER_NAMES, -}; - -// Relative offsets into DECODER_NAMES by constraint group. -const IN_SPAN_BASE: usize = 0; -const OP_BITS_BASE: usize = IN_SPAN_BASE + 4; -const EXTRA_BASE: usize = OP_BITS_BASE + NUM_OP_BITS; -const OP_BIT_GROUP_BASE: usize = EXTRA_BASE + 2; -const BATCH_FLAGS_BINARY_BASE: usize = OP_BIT_GROUP_BASE + 3; -const GENERAL_BASE: usize = BATCH_FLAGS_BINARY_BASE + NUM_BATCH_FLAGS; -const GROUP_COUNT_BASE: usize = GENERAL_BASE + 14; -const OP_GROUP_DECODING_BASE: usize = GROUP_COUNT_BASE + 5; -const OP_INDEX_BASE: usize = OP_GROUP_DECODING_BASE + 2; -const BATCH_FLAGS_BASE: usize = OP_INDEX_BASE + 4; -const ADDR_BASE: usize = BATCH_FLAGS_BASE + 9; -const CONTROL_FLOW_BASE: usize = ADDR_BASE + 3; - -/// The degrees of the decoder constraints. -#[allow(dead_code)] -pub const CONSTRAINT_DEGREES: [usize; NUM_CONSTRAINTS] = [ - 2, 2, 2, 2, 2, 2, 2, // op bits binary (degree 2) - 4, 3, // e0 (degree 4), e1 (degree 3) - 4, 3, 3, // u32 b0, very-high b0/b1 - 2, 2, 2, // batch flags binary (degree 2) - 7, 6, 6, 6, 6, // general: split/loop top binary, dyn h4..h7 = 0 - 5, 5, // general: repeat top=1, repeat in-loop - 6, // general: end + is_loop + s0 - 9, 9, 9, 9, 9, // general: end + repeat' copies h0..h4 - 8, // general: halt -> halt' - 1, // sp first row (degree 1) - 2, // sp binary (degree 2) - 6, 5, // sp transition for SPAN (deg 5+1=6), RESPAN (deg 4+1=5) - 3, // gc delta bounded (degree 3: sp * delta * (delta - 1)) - 8, // gc decrement implies (h0=0 or is_push=1) - 6, // gc decrement on SPAN/RESPAN/PUSH - 5, // gc stays when next is END or RESPAN - 5, // gc zero at END - 6, // op group decoding: h0 shift by op' - 6, // op group decoding: h0 must be 0 before END/RESPAN - 6, // ox reset on SPAN/RESPAN (degree 6) - 6, // ox reset on new group (degree 6: sp * ng * ox') - 7, // ox increment inside basic block (degree 7) - 9, // ox range [0,8] (degree 9) - 5, // batch flags sum (span/respan -> one of g1/g2/g4/g8) - 6, // batch flags zero when not span/respan - 4, 4, 4, 4, // h4..h7 zero when <=4 groups - 4, 4, // h2..h3 zero when <=2 groups - 4, // h1 zero when <=1 group - 2, // addr unchanged inside basic block (degree 2) - 5, // addr increment on RESPAN (degree 5) - 5, // addr zero at HALT (degree 5) - 5, // control flow: 1 - sp - f_ctrl = 0 -]; - -// SMALL HELPERS -// ================================================================================================ - -/// Asserts a value is binary (0 or 1): `x * (x - 1) = 0`. -fn assert_binary(builder: &mut AB, idx: usize, value: AB::Expr) -where - AB: TaggingAirBuilderExt, -{ - assert_zero_integrity(builder, idx, value.clone() * (value - AB::Expr::ONE)); -} - -/// Computes the opcode value from op bits: `b0 + 2*b1 + ... + 64*b6`. -fn op_bits_to_value(bits: &[AB::Expr; NUM_OP_BITS]) -> AB::Expr -where - AB: LiftedAirBuilder, -{ - bits.iter().enumerate().fold(AB::Expr::ZERO, |acc, (i, bit)| { - acc + bit.clone() * AB::Expr::from_u16(1u16 << i) - }) -} // ENTRY POINTS // ================================================================================================ @@ -270,645 +89,429 @@ where /// Enforces decoder main-trace constraints (entry point). pub fn enforce_main( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, ) where - AB: TaggingAirBuilderExt, + AB: MidenAirBuilder, { - // Load decoder columns using typed struct - let cols: DecoderColumns = DecoderColumns::from_row::(local); - let cols_next: DecoderColumns = DecoderColumns::from_row::(next); - let op_flags_next = OpFlags::new(ExprDecoderAccess::::new(next)); - - enforce_in_span_constraints(builder, &cols, &cols_next, op_flags); - enforce_op_bits_binary(builder, &cols); - enforce_extra_columns(builder, &cols); - enforce_op_bit_group_constraints(builder, &cols); - enforce_batch_flags_binary(builder, &cols); - enforce_general_constraints(builder, local, next, op_flags, &op_flags_next); - enforce_group_count_constraints(builder, &cols, &cols_next, local, op_flags, &op_flags_next); - enforce_op_group_decoding_constraints( - builder, - &cols, - &cols_next, - local, - next, - op_flags, - &op_flags_next, - ); - enforce_op_index_constraints(builder, &cols, &cols_next, op_flags); - enforce_batch_flags_constraints(builder, &cols, local, op_flags); - enforce_block_address_constraints(builder, &cols, &cols_next, op_flags); - enforce_control_flow_constraints(builder, &cols, op_flags); -} - -// INTERNAL HELPERS -// ================================================================================================ - -/// Typed access to decoder columns. -/// -/// This struct provides named access to decoder columns, eliminating error-prone -/// index arithmetic. Created from a `MainTraceRow` reference. -/// -/// ## Layout -/// - `addr`: Block address (row address in hasher table) -/// - `op_bits[0..7]`: Operation bits b0-b6 encoding the opcode -/// - `in_span`: In-span flag (sp) - 1 when inside basic block -/// - `group_count`: Group count (gc) - remaining operation groups -/// - `op_index`: Operation index (ox) - position within group (0-8) -/// - `batch_flags[0..3]`: Batch flags c0, c1, c2 -/// - `extra[0..2]`: Extra columns e0, e1 for degree reduction -/// -/// Note: the 8 decoder hasher-state lanes live in the decoder trace but are not included here. -/// Constraints which depend on these lanes access them directly via `MainTraceRow` accessors. -pub struct DecoderColumns { - /// Block address (row address in hasher table) - pub addr: E, - /// Operation bits b0-b6 (7 bits encoding the opcode) - pub op_bits: [E; NUM_OP_BITS], - /// In-span flag (1 when inside basic block, 0 otherwise) - pub in_span: E, - /// Group count (remaining operation groups in current span) - pub group_count: E, - /// Operation index (position within current operation group, 0-8) - pub op_index: E, - /// Batch flags c0, c1, c2 (encode number of groups in current batch) - pub batch_flags: [E; NUM_BATCH_FLAGS], - /// Extra columns e0, e1 for degree reduction - pub extra: [E; 2], -} + // --- Destructure current-row decoder columns ------------------------------------------------ + let DecoderCols { + addr, + op_bits, + hasher_state, + in_span, + group_count, + op_index, + batch_flags, + extra, + } = local.decoder; + // b2 and b3 are not used directly in decoder constraints — they are consumed only + // by the op_flags module for individual opcode discrimination. + let [b0, b1, _, _, b4, b5, b6] = op_bits; + let [bc0, bc1, bc2] = batch_flags; + let [e0, e1] = extra; + let h0 = hasher_state[0]; + + // End-block flags occupy hasher_state[4..8] during END operations. + let end_flags = local.decoder.end_block_flags(); + let is_loop_body = end_flags.is_loop_body; + let is_loop = end_flags.is_loop; + + // --- Destructure next-row decoder columns --------------------------------------------------- + let DecoderCols { + addr: addr_next, + op_bits: op_bits_next, + hasher_state: hasher_state_next, + in_span: in_span_next, + group_count: group_count_next, + op_index: op_index_next, + .. + } = next.decoder; + let h0_next = hasher_state_next[0]; + + // --- Cached derived expressions ------------------------------------------------------------- + // These values appear in multiple constraint sections below. + + // The change in group count across one row. + // Inside a span, delta_group_count is constrained to be boolean (0 or 1). + // When delta_group_count = 1, a group has been consumed (either a completed op group or a PUSH + // immediate). When delta_group_count = 0, the current group is still being decoded. + let delta_group_count: AB::Expr = group_count - group_count_next; + + // PUSH is the only operation with an immediate value. When PUSH executes, it consumes + // an op group from h0 to read the immediate value pushed onto the stack, causing + // delta_group_count = 1. However, this is NOT a "new group start" for decoding purposes — the + // distinction matters for the new_group flag: new_group = delta_group_count - is_push. + let is_push = op_flags.push(); -impl DecoderColumns { - /// Extract decoder columns from a main trace row. - pub fn from_row(row: &MainTraceRow) -> Self - where - AB: LiftedAirBuilder, - AB::Var: Into + Clone, + // ============================================= + // In-span constraints + // ============================================= + // The in_span flag indicates whether we are inside a basic block: + // in_span = 1 when executing user operations, + // in_span = 0 on control-flow rows (SPAN, RESPAN, END, JOIN, SPLIT, LOOP, etc.). + // + // in_span is pinned to 1 - f_ctrl on every row by the control-flow constraint at + // the end of this function (in_span + f_ctrl = 1), so in_span cannot become 1 + // without a preceding SPAN or RESPAN that sets in_span' = 1 on the next row. + + // Execution starts outside any basic block. + builder.when_first_row().assert_zero(in_span); + + // The in-span flag is binary. + builder.assert_bool(in_span); + + // After SPAN, next row enters a basic block. + builder.when_transition().when(op_flags.span()).assert_one(in_span_next); + + // After RESPAN, next row stays in a basic block. + builder.when_transition().when(op_flags.respan()).assert_one(in_span_next); + + // ============================================= + // Op-bit binary constraints + // ============================================= + // Each opcode bit must be 0 or 1. + builder.assert_bools(op_bits); + + // ============================================= + // Extra columns (e0, e1) — degree reduction + // ============================================= + // Without these columns, operation flags for the upper opcode groups (U32, VeryHigh) + // would require products of up to 7 bits (degree 7), exceeding the constraint system's + // degree budget. By precomputing e0 and e1 in the trace and constraining them here, + // the op_flags module can reference these degree-1 columns instead. + // + // e0 = b6 · (1 - b5) · b4 selects the "101" prefix (degree-5 ops) + // e1 = b6 · b5 selects the "11" prefix (degree-4 ops) + + // e0 must equal b6 · (1 - b5) · b4. + let e0_expected = b6 * b5.into().not() * b4; + builder.assert_eq(e0, e0_expected); + + // e1 must equal b6 · b5. + let e1_expected = b6 * b5; + builder.assert_eq(e1, e1_expected); + + // ============================================= + // Opcode-bit group constraints + // ============================================= + // Certain opcode prefixes have unused bit positions that must be zero to prevent + // invalid opcodes from being encoded. Both opcode groups use e0/e1 for degree reduction: + // + // Prefix | b6 b5 b4 | Meaning | Constraint + // --------+----------+------------+------------ + // U32 | 1 0 0 | 8 U32 ops | b0 = 0 + // VeryHi | 1 1 * | 8 hi ops | b0 = b1 = 0 + // + // The U32 prefix is computed as b6·(1-b5)·(1-b4) = b6 - e1 - e0 (degree 1). + // The VeryHi prefix is b6·b5 = e1 (degree 1). + + // When U32 prefix is active, b0 must be zero. + builder.when(b6 - e1 - e0).assert_zero(b0); + + // When VeryHi prefix is active, both b0 and b1 must be zero. { - DecoderColumns { - addr: row.decoder[ADDR_OFFSET].clone().into(), - op_bits: core::array::from_fn(|i| row.decoder[OP_BITS_OFFSET + i].clone().into()), - in_span: row.decoder[IN_SPAN_OFFSET].clone().into(), - group_count: row.decoder[GROUP_COUNT_OFFSET].clone().into(), - op_index: row.decoder[OP_INDEX_OFFSET].clone().into(), - batch_flags: core::array::from_fn(|i| { - row.decoder[BATCH_FLAGS_OFFSET + i].clone().into() - }), - extra: core::array::from_fn(|i| row.decoder[EXTRA_COLS_OFFSET + i].clone().into()), - } + let builder = &mut builder.when(e1); + builder.assert_zero(b0); + builder.assert_zero(b1); } -} -// CONSTRAINT HELPERS -// ================================================================================================ - -/// Enforces in-span (sp) constraints. -/// -/// The in-span flag indicates whether we're inside a basic block: -/// - sp = 1 when executing operations inside a basic block -/// - sp = 0 for SPAN, RESPAN, END, and control-flow operations -/// -/// This is the entry point to the decoder state machine. Once sp is set by SPAN/RESPAN, -/// the rest of the decoder constraints (gc, ox, batch flags) are interpreted relative to -/// being inside that span. -/// -/// Constraints: -/// 1. sp is binary: sp * (sp - 1) = 0 -/// 2. After SPAN operation, sp' = 1: span_flag * (1 - sp') = 0 -/// 3. After RESPAN operation, sp' = 1: respan_flag * (1 - sp') = 0 -fn enforce_in_span_constraints( - builder: &mut AB, - cols: &DecoderColumns, - cols_next: &DecoderColumns, - op_flags: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let sp = cols.in_span.clone(); - let sp_next = cols_next.in_span.clone(); - - // Boundary: execution starts outside any basic block. - assert_zero_first_row(builder, IN_SPAN_BASE, sp.clone()); - - // Constraint 1: sp is binary, so span state is well-formed. - let sp_binary = sp.clone() * (sp - AB::Expr::ONE); - assert_zero_integrity(builder, IN_SPAN_BASE + 1, sp_binary); - - // Constraint 2: After SPAN, the next row must be inside a span. - // span_flag * (1 - sp') = 0 - let span_flag = op_flags.span(); - assert_zero_transition( - builder, - IN_SPAN_BASE + 2, - span_flag * (AB::Expr::ONE - sp_next.clone()), - ); - - // Constraint 3: After RESPAN, the next row must be inside a span. - // respan_flag * (1 - sp') = 0 - let respan_flag = op_flags.respan(); - assert_zero_transition(builder, IN_SPAN_BASE + 3, respan_flag * (AB::Expr::ONE - sp_next)); -} - -/// Enforces that all operation bits (b0-b6) are binary (0 or 1). -/// -/// For each bit bi: bi * (bi - 1) = 0 -fn enforce_op_bits_binary(builder: &mut AB, cols: &DecoderColumns) -where - AB: TaggingAirBuilderExt, -{ - for i in 0..NUM_OP_BITS { - // Each opcode bit must be 0 or 1 to make decoding deterministic. - assert_binary(builder, OP_BITS_BASE + i, cols.op_bits[i].clone()); + // ============================================= + // General opcode-semantic constraints + // ============================================= + // Per-operation invariants that don't fit into the generic counter/decoding sections. + // + // Operation | Constraint | Why + // ----------+-------------------------------------+------------------------------------ + // SPLIT | s0 in {0, 1} | s0 selects true/false branch + // LOOP | s0 in {0, 1} | s0 determines enter (1) / skip (0) + // DYN | h4 = h5 = h6 = h7 = 0 | callee digest lives in h0..h3 only + // REPEAT | s0 = 1 | loop condition must be true + // REPEAT | is_loop_body (h4) = 1 | must be inside an active loop body + // END+loop | is_loop (h5) => s0 = 0 | exiting loop: condition became false + // END+REP' | h0'..h4' = h0..h4 | carry block hash + loop flag for re-entry + // HALT | f_halt => f_halt' | absorbing / terminal state + + // SPLIT/LOOP: branch selector must be binary. + let branch_condition = local.stack.get(0); + builder + .when(op_flags.split() + op_flags.loop_op()) + .assert_bool(branch_condition); + + // DYN: the upper hasher lanes must be zero so the callee digest in h0..h3 is the + // only input to the hash chiplet. + { + let builder = &mut builder.when(op_flags.dyn_op()); + let hasher_zeros = [hasher_state[4], hasher_state[5], hasher_state[6], hasher_state[7]]; + builder.assert_zeros(hasher_zeros) } -} - -/// Enforces that the extra columns (e0, e1) are correctly computed from op bits. -/// -/// These columns are used for degree reduction in operation flag computation: -/// - e0 = b6 * (1 - b5) * b4 -/// - e1 = b6 * b5 -fn enforce_extra_columns(builder: &mut AB, cols: &DecoderColumns) -where - AB: TaggingAirBuilderExt, -{ - let b4 = cols.op_bits[4].clone(); - let b5 = cols.op_bits[5].clone(); - let b6 = cols.op_bits[6].clone(); - - let e0 = cols.extra[0].clone(); - let e1 = cols.extra[1].clone(); - - // e0 = b6 * (1 - b5) * b4. - // This extra register exists to reduce the degree of op-flag selectors for the - // `101...` opcode group (see docs/src/design/stack/op_constraints.md). - let expected_e0 = b6.clone() * (AB::Expr::ONE - b5.clone()) * b4; - assert_zero_integrity(builder, EXTRA_BASE, e0 - expected_e0); - - // e1 = b6 * b5. - // This extra register exists to reduce the degree of op-flag selectors for the - // `11...` opcode group (see docs/src/design/stack/op_constraints.md). - let expected_e1 = b6 * b5; - assert_zero_integrity(builder, EXTRA_BASE + 1, e1 - expected_e1); -} - -/// Enforces opcode-bit constraints for grouped opcode families. -/// -/// - U32 ops (prefix `100`) must have b0 = 0. -/// - Very-high-degree ops (prefix `11`) must have b0 = b1 = 0. -fn enforce_op_bit_group_constraints(builder: &mut AB, cols: &DecoderColumns) -where - AB: TaggingAirBuilderExt, -{ - let b0 = cols.op_bits[0].clone(); - let b1 = cols.op_bits[1].clone(); - let b4 = cols.op_bits[4].clone(); - let b5 = cols.op_bits[5].clone(); - let b6 = cols.op_bits[6].clone(); - - // U32 prefix pattern: b6=1, b5=0, b4=0. Under this prefix, b0 must be 0 to - // eliminate invalid opcodes in the U32 opcode subset. - let u32_prefix = b6.clone() * (AB::Expr::ONE - b5.clone()) * (AB::Expr::ONE - b4); - assert_zero_integrity(builder, OP_BIT_GROUP_BASE, u32_prefix * b0.clone()); - - // Very-high prefix pattern: b6=1, b5=1. Under this prefix, b0 and b1 must be 0 - // to eliminate invalid opcodes in the very-high opcode subset. - let very_high_prefix = b6 * b5; - assert_zero_integrity(builder, OP_BIT_GROUP_BASE + 1, very_high_prefix.clone() * b0); - assert_zero_integrity(builder, OP_BIT_GROUP_BASE + 2, very_high_prefix * b1); -} -/// Enforces that batch flags (c0, c1, c2) are binary. -/// -/// For each flag ci: ci * (ci - 1) = 0 -fn enforce_batch_flags_binary(builder: &mut AB, cols: &DecoderColumns) -where - AB: TaggingAirBuilderExt, -{ - for i in 0..NUM_BATCH_FLAGS { - // Batch flags are selectors; they must be boolean. - assert_binary(builder, BATCH_FLAGS_BINARY_BASE + i, cols.batch_flags[i].clone()); + // REPEAT: top-of-stack must be 1 (loop condition true) and we must be inside an + // active loop body (is_loop_body = h4 = 1). + { + let loop_condition = local.stack.get(0); + let builder = &mut builder.when(op_flags.repeat()); + builder.assert_one(loop_condition); + builder.assert_one(is_loop_body); } -} -/// Enforces general decoder constraints derived from opcode semantics. -/// -/// These are the opcode-specific rules that aren't captured by the generic counters: -/// - SPLIT/LOOP: s0 must be binary (branch selector) -/// - DYN: upper hasher lanes are zero (callee hash lives in lower half) -/// - REPEAT: must be inside loop body and s0 = 1 -/// - END + REPEAT': carry hasher state forward -/// - HALT: absorbing -fn enforce_general_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, - op_flags_next: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let s0: AB::Expr = local.stack[0].clone().into(); - - // SPLIT/LOOP: top stack value must be binary (branch selector). - let split_or_loop = op_flags.split() + op_flags.loop_op(); - let s0_binary = s0.clone() * (s0.clone() - AB::Expr::ONE); - assert_zero_integrity(builder, GENERAL_BASE, split_or_loop * s0_binary); - - // DYN: the first half holds the callee digest; the second half must be zero. - let f_dyn = op_flags.dyn_op(); - for i in 0..4 { - let hi: AB::Expr = local.decoder[decoder_cols::HASHER_STATE_OFFSET + 4 + i].clone().into(); - assert_zero_integrity(builder, GENERAL_BASE + 1 + i, f_dyn.clone() * hi); - } + // END inside a loop: when ending a loop block (is_loop = h5 = 1), top-of-stack must + // be 0 — the loop exits because the condition became false. + let loop_condition = local.stack.get(0); + builder.when(op_flags.end()).when(is_loop).assert_zero(loop_condition); - // REPEAT: top stack must be 1 and we must be in a loop body (h4=1). - let f_repeat = op_flags.repeat(); - let h4: AB::Expr = local.decoder[decoder_cols::IS_LOOP_BODY_FLAG_COL_IDX].clone().into(); - assert_zero_integrity( - builder, - GENERAL_BASE + 5, - f_repeat.clone() * (AB::Expr::ONE - s0.clone()), - ); - assert_zero_integrity(builder, GENERAL_BASE + 6, f_repeat * (AB::Expr::ONE - h4)); - - // END inside a loop: if is_loop flag is set, top stack must be 0. - let f_end = op_flags.end(); - let h5: AB::Expr = local.decoder[decoder_cols::IS_LOOP_FLAG_COL_IDX].clone().into(); - assert_zero_integrity(builder, GENERAL_BASE + 7, f_end.clone() * h5 * s0); - - // END followed by REPEAT: carry h0..h4 into the next row. - let f_repeat_next = op_flags_next.repeat(); - for i in 0..5 { - let hi: AB::Expr = local.decoder[decoder_cols::HASHER_STATE_OFFSET + i].clone().into(); - let hi_next: AB::Expr = next.decoder[decoder_cols::HASHER_STATE_OFFSET + i].clone().into(); - assert_zero_transition( - builder, - GENERAL_BASE + 8 + i, - f_end.clone() * f_repeat_next.clone() * (hi_next - hi), - ); + // END followed by REPEAT: carry the block hash (h0..h3) and the is_loop_body flag + // (h4) into the next row so the loop body can be re-entered. + { + let gate = builder.is_transition() * op_flags.end() * op_flags.repeat_next(); + let builder = &mut builder.when(gate); + for i in 0..5 { + builder.assert_eq(hasher_state_next[i], hasher_state[i]); + } } - // HALT is absorbing: it can only be followed by HALT. - let f_halt = op_flags.halt(); - let f_halt_next = op_flags_next.halt(); - assert_zero_transition(builder, GENERAL_BASE + 13, f_halt * (AB::Expr::ONE - f_halt_next)); -} - -/// Enforces group count (gc) constraints. -/// -/// The group count tracks remaining operation groups in the current basic block: -/// - gc starts at the total number of groups when SPAN/RESPAN is executed -/// - gc decrements by 1 when processing SPAN, RESPAN, or completing a group -/// - gc must be 0 when END is executed -/// -/// Intuition: -/// - `delta_gc = gc - gc'` is the number of groups consumed on this row. -/// - Inside a span, delta_gc can only be 0 or 1. -/// - SPAN/RESPAN/PUSH must consume a group immediately, so delta_gc must be 1. -/// -/// Constraints: -/// 1. Inside basic block, gc can only stay same or decrement by 1: sp * delta_gc * (delta_gc - 1) = -/// 0 (where delta_gc = gc - gc') -/// 2. When END is executed, gc must be 0: end_flag * gc = 0 -/// 3. During SPAN/RESPAN, gc must decrement by 1: (span_flag + respan_flag) * (1 - delta_gc) = 0 -fn enforce_group_count_constraints( - builder: &mut AB, - cols: &DecoderColumns, - cols_next: &DecoderColumns, - local: &MainTraceRow, - op_flags: &OpFlags, - op_flags_next: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let sp = cols.in_span.clone(); - let gc = cols.group_count.clone(); - let gc_next = cols_next.group_count.clone(); - let h0: AB::Expr = local.decoder[decoder_cols::HASHER_STATE_OFFSET].clone().into(); - - // delta_gc = gc - gc' (how much gc decrements; expected to be 0 or 1) - let delta_gc = gc.clone() - gc_next; - - // is_push = push flag (PUSH is the only operation with immediate value) - let is_push = op_flags.push(); - - // Constraint 1: Inside a span, gc can only stay the same or decrement by 1. - // sp * delta_gc * (delta_gc - 1) = 0 - // This ensures: if sp=1 and delta_gc != 0, then delta_gc must equal 1 - assert_zero_transition( - builder, - GROUP_COUNT_BASE, - sp.clone() * delta_gc.clone() * (delta_gc.clone() - AB::Expr::ONE), - ); - - // Constraint 2: If gc decrements and this is not a PUSH-immediate row, - // then h0 must be zero (no immediate value packed into the group). - // sp * delta_gc * (1 - is_push) * h0 = 0 - assert_zero_transition( - builder, - GROUP_COUNT_BASE + 1, - sp.clone() * delta_gc.clone() * (AB::Expr::ONE - is_push.clone()) * h0, - ); - - // Constraint 3: SPAN/RESPAN/PUSH must consume a group immediately. - // (span_flag + respan_flag + is_push) * (delta_gc - 1) = 0 - let span_flag = op_flags.span(); - let respan_flag = op_flags.respan(); - assert_zero_transition( - builder, - GROUP_COUNT_BASE + 2, - (span_flag + respan_flag + is_push) * (delta_gc.clone() - AB::Expr::ONE), - ); - - // Constraint 4: If the next op is END or RESPAN, gc cannot decrement on this row. - // delta_gc * (end' + respan') = 0 - let end_next = op_flags_next.end(); - let respan_next = op_flags_next.respan(); - assert_zero_transition( - builder, - GROUP_COUNT_BASE + 3, - delta_gc.clone() * (end_next + respan_next), - ); - - // Constraint 5: END closes the span, so gc must be 0. - // end_flag * gc = 0 - let end_flag = op_flags.end(); - assert_zero_integrity(builder, GROUP_COUNT_BASE + 4, end_flag * gc); -} - -/// Enforces op group decoding constraints for the `h0` register. -/// -/// `h0` is a packed buffer of pending op groups. When a group is started or continued, -/// the next opcode is shifted into `h0` (base 2^7, because opcodes fit in 7 bits). -/// When the next op is END or RESPAN, the buffer must be empty (h0 = 0). -fn enforce_op_group_decoding_constraints( - builder: &mut AB, - cols: &DecoderColumns, - cols_next: &DecoderColumns, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, - op_flags_next: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let sp = cols.in_span.clone(); - let sp_next = cols_next.in_span.clone(); - - let gc = cols.group_count.clone(); - let gc_next = cols_next.group_count.clone(); - let delta_gc = gc - gc_next; - - let f_span = op_flags.span(); - let f_respan = op_flags.respan(); - let is_push = op_flags.push(); - - // f_sgc is set when gc stays the same inside a basic block. - let f_sgc = sp.clone() * sp_next * (AB::Expr::ONE - delta_gc.clone()); - - let h0: AB::Expr = local.decoder[decoder_cols::HASHER_STATE_OFFSET].clone().into(); - let h0_next: AB::Expr = next.decoder[decoder_cols::HASHER_STATE_OFFSET].clone().into(); - - // Compute op' from next-row op bits (b0' + 2*b1' + ... + 64*b6'). - let op_next = op_bits_to_value::(&cols_next.op_bits); - - // When SPAN/RESPAN/PUSH or when gc doesn't change, shift h0 by op'. - // (h0 - h0' * 2^7 - op') = 0 under the combined flag. - let op_group_base = AB::Expr::from_u16(1u16 << 7); - let h0_shift = h0.clone() - h0_next * op_group_base - op_next; - assert_zero_transition( - builder, - OP_GROUP_DECODING_BASE, - (f_span + f_respan + is_push + f_sgc) * h0_shift, - ); - - // If the next op is END or RESPAN, the current h0 must be 0 (no pending group). - let end_next = op_flags_next.end(); - let respan_next = op_flags_next.respan(); - assert_zero_transition(builder, OP_GROUP_DECODING_BASE + 1, sp * (end_next + respan_next) * h0); -} + // HALT is absorbing: once entered, the VM stays in HALT for all remaining rows. + builder.when_transition().when(op_flags.halt()).assert_one(op_flags.halt_next()); + + // ============================================= + // Group count constraints + // ============================================= + // The group_count column tracks remaining operation groups in the current basic block. + // + // ## Lifecycle + // + // 1. SPAN/RESPAN: the prover sets group_count non-deterministically to the batch's group count. + // The constraint below forces delta_group_count = 1 on these rows. + // 2. Normal execution: each time a group is fully decoded (h0 reaches 0) or a PUSH consumes an + // immediate, group_count decrements by 1 (delta_group_count = 1). + // 3. END: group_count must be 0 — all groups in the span have been consumed. + + // Inside a span, group_count changes by at most 1. When it does change and this is not a PUSH, + // h0 must already be 0 (the group was fully decoded). + { + let gate = builder.is_transition() * in_span; + let builder = &mut builder.when(gate); + builder.assert_bool(delta_group_count.clone()); + builder.when(delta_group_count.clone()).when(is_push.not()).assert_zero(h0); + } -/// Enforces op index (ox) constraints. -/// -/// The op index tracks the position of the current operation within its operation group: -/// - ox ranges from 0 to 8 (9 operations per group) -/// - ox resets to 0 when entering a new group (SPAN, RESPAN, or group boundary) -/// - ox increments by 1 for each operation within a group -/// -/// Intuition: -/// - `ng = delta_gc - is_push` is 1 when a new group starts (excluding PUSH-immediate rows). -/// - When a new group starts, ox' must be 0. -/// - Otherwise, ox increments by 1 while sp stays 1. -/// -/// Constraints: -/// 1. After SPAN/RESPAN, ox' = 0: (span_flag + respan_flag) * ox' = 0 -/// 2. When starting new group inside basic block (gc decrements), ox' = 0: sp * delta_gc * ox' = 0 -/// 3. When inside basic block and not starting new group, ox increments by 1: sp * sp' * (1 - -/// delta_gc) * (ox' - ox - 1) = 0 -/// 4. Op index must be in range [0, 8]: ox * (ox-1) * (ox-2) * (ox-3) * (ox-4) * (ox-5) * (ox-6) * -/// (ox-7) * (ox-8) = 0 -fn enforce_op_index_constraints( - builder: &mut AB, - cols: &DecoderColumns, - cols_next: &DecoderColumns, - op_flags: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let sp = cols.in_span.clone(); - let sp_next = cols_next.in_span.clone(); - let gc = cols.group_count.clone(); - let gc_next = cols_next.group_count.clone(); - let ox = cols.op_index.clone(); - let ox_next = cols_next.op_index.clone(); + // SPAN, RESPAN, and PUSH each consume exactly one group (delta_group_count = 1). + builder + .when_transition() + .when(op_flags.span() + op_flags.respan() + is_push.clone()) + .assert_one(delta_group_count.clone()); + + // If delta_group_count = 1 on this row, the next row cannot be END or RESPAN — those ops need + // a fresh batch or span closure, not a mid-batch decrement. + builder + .when_transition() + .when(delta_group_count.clone()) + .assert_zero(op_flags.end_next() + op_flags.respan_next()); + + // By the time END executes, all groups must have been consumed. + builder.when(op_flags.end()).assert_zero(group_count); + + // ============================================= + // Op group decoding (h0) constraints + // ============================================= + // Register h0 holds the current operation group as a base-128 packed integer. + // Operations are packed least-significant first (each opcode is 7 bits): + // + // h0 = op_0 + 128·op_1 + 128²·op_2 + ... + 128^(k-1)·op_(k-1) + // + // Each step, the VM peels off the lowest 7 bits of h0 — these bits equal the + // opcode that will appear in op_bits on the *next* row (op'). What remains + // after removing op' becomes h0': + // + // h0 = h0' · 128 + op' (no field division needed) + // + // ## same_group_count flag + // + // same_group_count = in_span · in_span' · (1 - delta_group_count) + // + // This is 1 when we are inside a span on BOTH this and the next row AND the group + // count did not change — meaning we are still decoding ops from the same group. + // Note: same_group_count is mutually exclusive with f_span, f_respan, and is_push + // because those three always set delta_group_count = 1. + // + // ## h0_active flag + // + // h0_active = f_span + f_respan + is_push + same_group_count + // + // The h0 shift constraint fires in exactly 4 situations: + // - f_span/f_respan: a new batch was just loaded; h0 has the first group. + // - is_push: PUSH consumed an immediate; h0 shifts to reveal the next op. + // - same_group_count: normal op execution within a group; h0 shifts by one opcode. + { + let f_span = op_flags.span(); + let f_respan = op_flags.respan(); - // delta_gc = gc - gc' (how much gc decrements; 1 when entering new group) - let delta_gc = gc.clone() - gc_next; + let same_group_count: AB::Expr = in_span * in_span_next * delta_group_count.not(); + let op_next: AB::Expr = horner_eval_bits(&op_bits_next); - // is_push = push flag (PUSH is the only operation with immediate value) - let is_push = op_flags.push(); + // When h0 is active, verify the base-128 shift. + let h0_shift = h0 - h0_next * F_128 - op_next; + let h0_active = f_span + f_respan + is_push.clone() + same_group_count; + builder.when_transition().when(h0_active).assert_zero(h0_shift); - // ng = delta_gc - is_push - // This equals 1 when we're starting a new operation group (not due to immediate op) - let ng = delta_gc - is_push; - - let span_flag = op_flags.span(); - let respan_flag = op_flags.respan(); - - // Constraint 1: SPAN/RESPAN start a fresh group, so ox' = 0. - // (span_flag + respan_flag) * ox' = 0 - assert_zero_transition(builder, OP_INDEX_BASE, (span_flag + respan_flag) * ox_next.clone()); - - // Constraint 2: When a new group starts inside a span, ox' = 0. - // sp * ng * ox' = 0 - assert_zero_transition(builder, OP_INDEX_BASE + 1, sp.clone() * ng.clone() * ox_next.clone()); - - // Constraint 3: When staying in the same group, ox increments by 1. - // sp * sp' * (1 - ng) * (ox' - ox - 1) = 0 - let delta_ox = ox_next - ox.clone() - AB::Expr::ONE; - assert_zero_transition( - builder, - OP_INDEX_BASE + 2, - sp * sp_next * (AB::Expr::ONE - ng) * delta_ox, - ); - - // Constraint 4: ox must be in range [0, 8] (9 ops per group). - // ∏_{i=0}^{8}(ox - i) = 0 - let mut range_check = ox.clone(); - for i in 1..=8u64 { - range_check *= ox.clone() - AB::Expr::from_u16(i as u16); + // Before END or RESPAN, h0 must be empty (all ops in the group consumed). + let end_or_respan_next = op_flags.end_next() + op_flags.respan_next(); + builder.when_transition().when(in_span).when(end_or_respan_next).assert_zero(h0); } - assert_zero_integrity(builder, OP_INDEX_BASE + 3, range_check); -} -/// Enforces op batch flag constraints and associated hasher-state zeroing rules. -/// -/// Batch flags encode how many groups were emitted by SPAN/RESPAN: -/// - g8, g4, g2, g1 correspond to batches of 8, 4, 2, or 1 groups. The hasher lanes h1..h7 store -/// the group values; unused lanes must be zeroed. -fn enforce_batch_flags_constraints( - builder: &mut AB, - cols: &DecoderColumns, - local: &MainTraceRow, - op_flags: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let bc0 = cols.batch_flags[0].clone(); - let bc1 = cols.batch_flags[1].clone(); - let bc2 = cols.batch_flags[2].clone(); - - // Batch flag decoding matches trace::decoder batch encodings. - let f_g8 = bc0.clone(); - let f_g4 = (AB::Expr::ONE - bc0.clone()) * bc1.clone() * (AB::Expr::ONE - bc2.clone()); - let f_g2 = (AB::Expr::ONE - bc0.clone()) * (AB::Expr::ONE - bc1.clone()) * bc2.clone(); - let f_g1 = (AB::Expr::ONE - bc0) * bc1 * bc2; - - let f_span = op_flags.span(); - let f_respan = op_flags.respan(); - let span_or_respan = f_span + f_respan; - - // When SPAN or RESPAN, exactly one batch flag must be set. - assert_zero_integrity( - builder, - BATCH_FLAGS_BASE, - span_or_respan.clone() - (f_g1.clone() + f_g2.clone() + f_g4.clone() + f_g8), - ); - - // When not SPAN/RESPAN, all batch flags must be zero. - assert_zero_integrity( - builder, - BATCH_FLAGS_BASE + 1, - (AB::Expr::ONE - span_or_respan) - * (cols.batch_flags[0].clone() - + cols.batch_flags[1].clone() - + cols.batch_flags[2].clone()), - ); - - // When batch has <=4 groups, h4..h7 must be zero (unused lanes). - let small_batch = f_g1.clone() + f_g2.clone() + f_g4.clone(); - for i in 0..4 { - let hi: AB::Expr = local.decoder[decoder_cols::HASHER_STATE_OFFSET + 4 + i].clone().into(); - assert_zero_integrity(builder, BATCH_FLAGS_BASE + 2 + i, small_batch.clone() * hi); - } - - // When batch has <=2 groups, h2..h3 must be zero (unused lanes). - let tiny_batch = f_g1.clone() + f_g2.clone(); - for i in 0..2 { - let hi: AB::Expr = local.decoder[decoder_cols::HASHER_STATE_OFFSET + 2 + i].clone().into(); - assert_zero_integrity(builder, BATCH_FLAGS_BASE + 6 + i, tiny_batch.clone() * hi); + // ============================================= + // Op index constraints + // ============================================= + // The op_index column tracks the position of the current operation within its operation + // group. op_index ranges from 0 to 8 (up to 9 operations per group), resets to 0 when + // entering a new group, and increments by 1 for each operation within a group. + // + // ## new_group flag + // + // new_group = delta_group_count - is_push + // + // When new_group = 1, a genuine new group is starting: group_count decremented and it + // was NOT because of a PUSH immediate. When new_group = 0, we are still in the same + // group (either group_count didn't change, or it changed only because of PUSH). + { + let new_group: AB::Expr = delta_group_count - is_push; + + // SPAN/RESPAN start a fresh batch, so op_index' = 0. + builder + .when_transition() + .when(op_flags.span() + op_flags.respan()) + .assert_zero(op_index_next); + + // When a new group starts inside a span, op_index' = 0. + // Gated by in_span to exclude SPAN/RESPAN rows (which are handled above). + builder + .when_transition() + .when(in_span) + .when(new_group.clone()) + .assert_zero(op_index_next); + + // When staying in the same group inside a span, op_index increments by 1. + // Gated by in_span_next to exclude the row before END/RESPAN (where in_span' = 0). + builder + .when_transition() + .when(in_span) + .when(in_span_next) + .when(new_group.not()) + .assert_eq(op_index_next, op_index + F_1); + + // op_index must be in [0, 8] — 9 ops per group max. + let mut range_check: AB::Expr = op_index.into(); + for i in 1..=8u64 { + range_check *= op_index - Felt::new(i); + } + builder.assert_zero(range_check); } - // When batch has 1 group, h1 must be zero (unused lane). - let h1: AB::Expr = local.decoder[decoder_cols::HASHER_STATE_OFFSET + 1].clone().into(); - assert_zero_integrity(builder, BATCH_FLAGS_BASE + 8, f_g1 * h1); -} - -/// Enforces block address (addr) constraints. -/// -/// The block address identifies the current code block in the hasher table: -/// - addr stays constant inside a basic block (sp = 1) -/// - addr increments by ADDR_INCREMENT_PER_HASH (= 2) after RESPAN -/// - addr must be 0 when HALT is executed -/// -/// Constraints: -/// 1. sp * (addr' - addr) = 0 -/// 2. respan_flag * (addr' - addr - ADDR_INCREMENT_PER_HASH) = 0 -/// 3. halt_flag * addr = 0 -fn enforce_block_address_constraints( - builder: &mut AB, - cols: &DecoderColumns, - cols_next: &DecoderColumns, - op_flags: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let sp = cols.in_span.clone(); - let addr = cols.addr.clone(); - let addr_next = cols_next.addr.clone(); - - // Constraint 1: Inside a span, address must stay the same. - // sp * (addr' - addr) = 0 - assert_zero_transition(builder, ADDR_BASE, sp * (addr_next.clone() - addr.clone())); - - // Constraint 2: RESPAN advances the address by one controller pair (2 rows). - // respan_flag * (addr' - addr - ADDR_INCREMENT_PER_HASH) = 0 - let addr_increment: AB::Expr = AB::Expr::from_u16(ADDR_INCREMENT_PER_HASH as u16); - let respan_flag = op_flags.respan(); - assert_zero_transition( - builder, - ADDR_BASE + 1, - respan_flag * (addr_next - addr.clone() - addr_increment), - ); - - // Constraint 3: HALT forces addr = 0. - // halt_flag * addr = 0 - let halt_flag = op_flags.halt(); - assert_zero_integrity(builder, ADDR_BASE + 2, halt_flag * addr); -} - -/// Enforces control flow constraints. -/// -/// When outside a basic block (sp = 0), only control flow operations can execute. -/// This is expressed as: fctrl = 1 - sp, or equivalently: (1 - sp) * (1 - fctrl) = 0 -/// -/// Control flow operations include: -/// - SPAN, JOIN, SPLIT, LOOP (block start operations) -/// - END, REPEAT, RESPAN, HALT (block transition operations) -/// - DYN, DYNCALL, CALL, SYSCALL (procedure invocations) -/// -/// Constraints: -/// 1. When sp = 0, control_flow must be 1: (1 - sp) * (1 - fctrl) = 0 -fn enforce_control_flow_constraints( - builder: &mut AB, - cols: &DecoderColumns, - op_flags: &OpFlags, -) where - AB: TaggingAirBuilderExt, -{ - let sp = cols.in_span.clone(); - - // Constraint: sp and control_flow must be complementary. - // 1 - sp - fctrl = 0 - let ctrl_flag = op_flags.control_flow(); - assert_zero_integrity(builder, CONTROL_FLOW_BASE, AB::Expr::ONE - sp - ctrl_flag); -} + // ============================================= + // Batch flag constraints + // ============================================= + // Batch flags (c0, c1, c2) encode the number of op groups in the current batch. + // This matters for the last batch in a basic block (or the only batch), since all + // other batches must be completely full (8 groups). + // + // The flags are mutually exclusive (exactly one is set during SPAN/RESPAN). + // Unused hasher lanes must be zero to prevent the prover from smuggling + // arbitrary values through unused group slots. The zeroed lanes cascade: + // + // Groups | Zeroed lanes + // -------+-------------- + // 8 | (none) + // 4 | h4..h7 + // 2 | h2..h7 + // 1 | h1..h7 + { + // Batch flag bits must be binary. + builder.assert_bools([bc0, bc1, bc2]); + + // 8 groups: c0 = 1 (c1, c2 don't matter). + let groups_8 = bc0; + // 4 groups: c0 = 0, c1 = 1, c2 = 0. + let not_bc0 = bc0.into().not(); + let groups_4 = not_bc0.clone() * bc1 * bc2.into().not(); + // 2 groups: c0 = 0, c1 = 0, c2 = 1. + let groups_2 = not_bc0.clone() * bc1.into().not() * bc2; + // 1 group: c0 = 0, c1 = 1, c2 = 1. + let groups_1 = not_bc0 * bc1 * bc2; + + // Combined flags for the cascading lane-zeroing constraints. + let groups_1_or_2 = groups_1.clone() + groups_2.clone(); + let groups_1_or_2_or_4 = groups_1_or_2.clone() + groups_4.clone(); + + let span_or_respan = op_flags.span() + op_flags.respan(); + + // During SPAN/RESPAN, exactly one batch flag must be set. + builder.assert_eq(span_or_respan.clone(), groups_1_or_2_or_4.clone() + groups_8); + + // Outside SPAN/RESPAN, all batch flags must be zero. + builder.when(span_or_respan.not()).assert_zero(bc0 + bc1 + bc2); + + // Fewer than 8 groups: h4..h7 are unused and must be zero. + { + let builder = &mut builder.when(groups_1_or_2_or_4); + for i in 0..4 { + builder.assert_zero(hasher_state[4 + i]); + } + } -fn assert_zero_transition(builder: &mut AB, idx: usize, expr: AB::Expr) { - let mut idx = idx; - tagged_assert_zero(builder, &DECODER_TAGS, &mut idx, expr); -} + // Fewer than 4 groups: h2..h3 are also unused. + { + let builder = &mut builder.when(groups_1_or_2); + for i in 0..2 { + builder.assert_zero(hasher_state[2 + i]); + } + } -fn assert_zero_integrity(builder: &mut AB, idx: usize, expr: AB::Expr) { - let mut idx = idx; - tagged_assert_zero_integrity(builder, &DECODER_TAGS, &mut idx, expr); -} + // Only 1 group: h1 is also unused. + builder.when(groups_1).assert_zero(hasher_state[1]); + } -fn assert_zero_first_row(builder: &mut AB, idx: usize, expr: AB::Expr) { - let id = DECODER_BASE_ID + idx; - let name = DECODER_NAMES[idx]; - builder.tagged(id, name, |builder| { - builder.when_first_row().assert_zero(expr); - }); + // ============================================= + // Block address (addr) constraints + // ============================================= + // The block address links decoder rows to the hasher table, which computes Poseidon2 + // hashes of MAST node contents. Each hash uses a controller input/output pair + // (CONTROLLER_ROWS_PER_PERMUTATION = 2 rows in the hasher table). + // + // When RESPAN starts a new batch within the same span, the hasher table needs a new + // controller pair, so addr increments by CONTROLLER_ROWS_PER_PERMUTATION. + + // Inside a basic block, addr must stay the same (all ops in one batch share the same + // hasher-table address). + builder.when_transition().when(in_span).assert_eq(addr_next, addr); + + // RESPAN moves to the next hash block (addr += CONTROLLER_ROWS_PER_PERMUTATION). + builder + .when_transition() + .when(op_flags.respan()) + .assert_eq(addr_next, addr + CONTROLLER_ROWS_PER_PERM_FELT); + + // HALT forces addr = 0 (execution ends at the root block). + builder.when(op_flags.halt()).assert_zero(addr); + + // ============================================= + // Control flow constraint + // ============================================= + // Every row is either inside a basic block (in_span = 1) or executing a control-flow + // operation (f_ctrl = 1). These two states are mutually exclusive and exhaustive. + // + // f_ctrl covers: JOIN, SPLIT, LOOP, SPAN, RESPAN, END, REPEAT, HALT, DYN, DYNCALL, + // CALL, SYSCALL. + // + // This also implies in_span = 1 - f_ctrl, so in_span is automatically 0 on + // control-flow rows and 1 otherwise (given that in_span is binary, enforced above). + builder.assert_one(in_span + op_flags.control_flow()); + + // Last-row boundary: the final row must be HALT. The processor pads the trace with + // HALT rows and the absorbing transition constraint keeps them there; this constraint + // makes it explicit in the AIR. + // + // TODO: with HALT guaranteed on the last row, some `when_transition()` guards in this + // module may be redundant (HALT is absorbing and addr = 0). Audit which can be removed. + builder.when_last_row().assert_one(op_flags.halt()); } diff --git a/air/src/constraints/decoder/tests.rs b/air/src/constraints/decoder/tests.rs index 8d31c70abd..e69de29bb2 100644 --- a/air/src/constraints/decoder/tests.rs +++ b/air/src/constraints/decoder/tests.rs @@ -1,18 +0,0 @@ -//! Tests for decoder constraints. - -use super::{CONSTRAINT_DEGREES, NUM_CONSTRAINTS}; - -// CONSTRAINT COUNT TEST -// ================================================================================================ - -#[test] -fn test_array_sizes() { - // 7 op bits binary + 2 extra columns + 3 op-bit group constraints + 3 batch flags - // + 14 general constraints - // + 1 sp binary + 2 sp transitions + 5 group count constraints - // + 2 op group decoding + 4 op index constraints + 9 batch flag constraints - // + 3 block address constraints + 1 control flow constraint - // + 1 additional decoder constraint (see DECODER_NAMES) - assert_eq!(NUM_CONSTRAINTS, 57); - assert_eq!(CONSTRAINT_DEGREES.len(), NUM_CONSTRAINTS); -} diff --git a/air/src/constraints/ext_field.rs b/air/src/constraints/ext_field.rs index f1398cb97d..2e100bef23 100644 --- a/air/src/constraints/ext_field.rs +++ b/air/src/constraints/ext_field.rs @@ -1,42 +1,59 @@ //! Quadratic extension expression helpers (F_p[u] / u^2 - 7). //! //! This keeps constraint code readable when manipulating extension elements in terms of -//! base-field expressions. +//! base-field expressions. All arithmetic requires `E: PrimeCharacteristicRing`. use core::ops::{Add, Mul, Sub}; use miden_core::field::PrimeCharacteristicRing; +use miden_crypto::stark::air::AirBuilder; // Quadratic non-residue for the extension: u^2 = 7. const W: u16 = 7; /// Quadratic extension element represented as (c0 + c1 * u). -#[derive(Clone, Debug)] +/// +/// `#[repr(C)]` guarantees layout-compatible with `[E; 2]`, so this can be used +/// inside `#[repr(C)]` column structs in place of `[T; 2]`. +#[derive(Clone, Copy, Debug)] +#[repr(C)] pub struct QuadFeltExpr(pub E, pub E); +// CONSTRUCTORS AND CONVERSIONS +// ================================================================================================ + impl QuadFeltExpr { - /// Constructs a new extension element from two base-field values. - pub fn new>(c0: &V, c1: &V) -> Self { - Self(c0.clone().into(), c1.clone().into()) + /// Constructs a new extension element from two base-field components. + /// + /// Accepts any type convertible to `E`, e.g. `Var` when `E = Expr`. + pub fn new(c0: impl Into, c1: impl Into) -> Self { + Self(c0.into(), c1.into()) } /// Returns the base-field components `[c0, c1]`. pub fn into_parts(self) -> [E; 2] { [self.0, self.1] } + + /// Converts `QuadFeltExpr` into `QuadFeltExpr` (e.g. Var -> Expr). + /// + /// A blanket `From` impl is not possible because `From> for QuadFeltExpr` + /// conflicts with std's `impl From for T` when `V == E`. + pub fn into_expr(self) -> QuadFeltExpr + where + E: Into, + { + QuadFeltExpr(self.0.into(), self.1.into()) + } } -impl QuadFeltExpr -where - E: Clone + Add + Mul + PrimeCharacteristicRing, -{ - /// Returns `self * other`. - pub fn mul(self, rhs: Self) -> Self { - let w = E::from_u16(W); - // (a0 + a1·u)(b0 + b1·u) = (a0·b0 + 7·a1·b1) + (a0·b1 + a1·b0)·u - let c0 = self.0.clone() * rhs.0.clone() + w * (self.1.clone() * rhs.1.clone()); - let c1 = self.0 * rhs.1 + self.1 * rhs.0; - Self(c0, c1) +// EXTENSION FIELD ARITHMETIC +// ================================================================================================ + +impl QuadFeltExpr { + /// Returns `self + self`. + pub fn double(self) -> Self { + Self(self.0.double(), self.1.double()) } /// Returns `self * self`. @@ -47,14 +64,25 @@ where let a1_sq = self.1.clone() * self.1.clone(); let a0_a1 = self.0 * self.1; let c0 = a0_sq + w * a1_sq; - let c1 = a0_a1.clone() + a0_a1; + let c1 = a0_a1.double(); + Self(c0, c1) + } + + /// Extension multiplication: (a0 + a1·u)(b0 + b1·u) in F_p[u]/(u² - 7). + fn ext_mul(self, rhs: Self) -> Self { + let w = E::from_u16(W); + let c0 = self.0.clone() * rhs.0.clone() + w * (self.1.clone() * rhs.1.clone()); + let c1 = self.0 * rhs.1 + self.1 * rhs.0; Self(c0, c1) } } +// QFE-QFE ARITHMETIC TRAIT IMPLS +// ================================================================================================ + impl Add for QuadFeltExpr where - E: Add, + E: PrimeCharacteristicRing, { type Output = Self; @@ -65,7 +93,7 @@ where impl Sub for QuadFeltExpr where - E: Sub, + E: PrimeCharacteristicRing, { type Output = Self; @@ -74,42 +102,45 @@ where } } -impl Add for QuadFeltExpr +impl Mul for QuadFeltExpr where - E: Add, + E: PrimeCharacteristicRing, { type Output = Self; - fn add(self, rhs: E) -> Self { - Self(self.0 + rhs, self.1) + fn mul(self, rhs: Self) -> Self { + self.ext_mul(rhs) } } -impl Sub for QuadFeltExpr +// SCALAR ARITHMETIC +// ================================================================================================ + +impl Add for QuadFeltExpr where - E: Sub, + E: PrimeCharacteristicRing, { type Output = Self; - fn sub(self, rhs: E) -> Self { - Self(self.0 - rhs, self.1) + fn add(self, rhs: E) -> Self { + Self(self.0 + rhs, self.1) } } -impl Mul for QuadFeltExpr +impl Sub for QuadFeltExpr where - E: Clone + Add + Mul + PrimeCharacteristicRing, + E: PrimeCharacteristicRing, { type Output = Self; - fn mul(self, rhs: Self) -> Self { - QuadFeltExpr::mul(self, rhs) + fn sub(self, rhs: E) -> Self { + Self(self.0 - rhs, self.1) } } impl Mul for QuadFeltExpr where - E: Clone + Mul, + E: PrimeCharacteristicRing, { type Output = Self; @@ -117,3 +148,17 @@ where Self(self.0 * rhs.clone(), self.1 * rhs) } } + +// QUAD FELT AIR BUILDER EXTENSION +// ================================================================================================ + +/// Extension trait for asserting equality of quadratic extension field expressions. +pub trait QuadFeltAirBuilder: AirBuilder { + /// Asserts `lhs == rhs` component-wise for quadratic extension field elements. + fn assert_eq_quad(&mut self, lhs: QuadFeltExpr, rhs: QuadFeltExpr) { + self.assert_eq(lhs.0, rhs.0); + self.assert_eq(lhs.1, rhs.1); + } +} + +impl QuadFeltAirBuilder for AB {} diff --git a/air/src/constraints/mod.rs b/air/src/constraints/mod.rs index 5e34cd4327..c46e5b7452 100644 --- a/air/src/constraints/mod.rs +++ b/air/src/constraints/mod.rs @@ -1,6 +1,3 @@ -// `AB::Var: Copy` but clippy flags `.clone()` on it -#![allow(clippy::clone_on_copy)] - //! Miden VM Constraints //! //! This module contains the constraint functions for the Miden VM processor. @@ -22,20 +19,23 @@ //! //! Additional components (decoder, chiplets) are introduced in later constraint chunks. -use miden_crypto::stark::air::{ExtensionBuilder, LiftedAirBuilder, WindowAccess}; +use chiplets::selectors::ChipletSelectors; +use miden_crypto::stark::air::{ExtensionBuilder, WindowAccess}; -use crate::{Felt, MainTraceRow, trace::Challenges}; +use crate::{MainCols, MidenAirBuilder, trace::Challenges}; pub mod bus; pub mod chiplets; +pub mod columns; +pub mod constants; pub mod decoder; pub mod ext_field; -mod op_flags; +pub(crate) mod op_flags; pub mod public_inputs; pub mod range; pub mod stack; pub mod system; -pub mod tagging; +pub mod utils; // ENTRY POINTS // ================================================================================================ @@ -43,18 +43,18 @@ pub mod tagging; /// Enforces all main trace constraints. pub fn enforce_main( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, + selectors: &ChipletSelectors, + op_flags: &op_flags::OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - system::enforce_main(builder, local, next); + system::enforce_main(builder, local, next, op_flags); range::enforce_main(builder, local, next); - - let op_flags = op_flags::OpFlags::new(op_flags::ExprDecoderAccess::<_, AB::Expr>::new(local)); - stack::enforce_main(builder, local, next, &op_flags); - decoder::enforce_main(builder, local, next, &op_flags); - chiplets::enforce_main(builder, local, next); + stack::enforce_main(builder, local, next, op_flags); + decoder::enforce_main(builder, local, next, op_flags); + chiplets::enforce_main(builder, local, next, selectors); } /// Enforces all auxiliary (bus) constraints: boundary + transition. @@ -65,51 +65,34 @@ pub fn enforce_main( /// 3. **`reduced_aux_values`** -- final values satisfy bus identities pub fn enforce_bus( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, + selectors: &ChipletSelectors, + op_flags: &op_flags::OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { let r = builder.permutation_randomness(); let challenges = Challenges::::new(r[0].into(), r[1].into()); - let op_flags = op_flags::OpFlags::new(op_flags::ExprDecoderAccess::<_, AB::Expr>::new(local)); - enforce_bus_boundary(builder); - - range::bus::enforce_bus(builder, local); - stack::bus::enforce_bus(builder, local, next, &op_flags, &challenges); - decoder::bus::enforce_bus(builder, local, next, &op_flags, &challenges); - chiplets::bus::enforce_bus(builder, local, next, &op_flags, &challenges); -} - -/// Enforces boundary constraints on all auxiliary columns. -/// -/// **First row:** running-product columns start at 1, LogUp sums start at 0. -/// -/// **Last row:** each aux column must equal its committed final value (from -/// `permutation_values`). This binds the aux trace polynomial to the values checked -/// by `reduced_aux_values`, preventing a malicious prover from committing arbitrary -/// finals that satisfy the bus identity without matching the actual trace. -fn enforce_bus_boundary(builder: &mut AB) -where - AB: LiftedAirBuilder, -{ // First row: running products = 1, LogUp sums = 0. enforce_bus_first_row(builder); - // Last row: bind aux trace to committed finals checked by `reduced_aux_values`. + // Last row: bind aux trace to committed finals checked by `reduced_aux_values`, + // preventing a malicious prover from committing arbitrary finals. enforce_bus_last_row(builder); + + range::bus::enforce_bus(builder, local, op_flags, &challenges, selectors); + stack::bus::enforce_bus(builder, local, next, op_flags, &challenges); + decoder::bus::enforce_bus(builder, local, next, op_flags, &challenges); + chiplets::bus::enforce_bus(builder, local, next, op_flags, &challenges, selectors); } fn enforce_bus_first_row(builder: &mut AB) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { use bus::indices::*; - use tagging::{TaggingAirBuilderExt, ids::TAG_BUS_BOUNDARY_BASE}; - - const N: usize = 8; - let ids: [usize; N] = core::array::from_fn(|i| TAG_BUS_BOUNDARY_BASE + i); let aux = builder.permutation(); let aux_local = aux.current_slice(); @@ -123,33 +106,24 @@ where let b_rng = aux_local[B_RANGE]; let v_wir = aux_local[V_WIRING]; - builder.tagged_list(ids, "bus.boundary.first_row", |builder| { - let mut first = builder.when_first_row(); - first.assert_one_ext(p1); - first.assert_one_ext(p2); - first.assert_one_ext(p3); - first.assert_one_ext(s_aux); - first.assert_one_ext(b_hk); - first.assert_one_ext(b_ch); - first.assert_zero_ext(b_rng); - first.assert_zero_ext(v_wir); - }); + let mut first = builder.when_first_row(); + first.assert_one_ext(p1); + first.assert_one_ext(p2); + first.assert_one_ext(p3); + first.assert_one_ext(s_aux); + first.assert_one_ext(b_hk); + first.assert_one_ext(b_ch); + first.assert_zero_ext(b_rng); + first.assert_zero_ext(v_wir); } fn enforce_bus_last_row(builder: &mut AB) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - use tagging::{ - TaggingAirBuilderExt, - ids::{TAG_BUS_BOUNDARY_BASE, TAG_BUS_BOUNDARY_FIRST_ROW_COUNT}, - }; - use crate::trace::AUX_TRACE_WIDTH; const N: usize = AUX_TRACE_WIDTH; - let ids: [usize; N] = - core::array::from_fn(|i| TAG_BUS_BOUNDARY_BASE + TAG_BUS_BOUNDARY_FIRST_ROW_COUNT + i); let cols: [AB::VarEF; N] = { let aux = builder.permutation(); @@ -161,10 +135,8 @@ where core::array::from_fn(|i| f[i].clone().into()) }; - builder.tagged_list(ids, "bus.boundary.last_row", |builder| { - let mut last = builder.when_last_row(); - for (col, expected) in cols.into_iter().zip(finals) { - last.assert_eq_ext(col, expected); - } - }); + let mut last = builder.when_last_row(); + for (col, expected) in cols.into_iter().zip(finals) { + last.assert_eq_ext(col, expected); + } } diff --git a/air/src/constraints/op_flags/mod.rs b/air/src/constraints/op_flags/mod.rs index ccc875ba2b..3e1d0d970a 100644 --- a/air/src/constraints/op_flags/mod.rs +++ b/air/src/constraints/op_flags/mod.rs @@ -4,13 +4,18 @@ //! throughout stack constraints to gate constraint enforcement based on which operation //! is currently being executed. //! -//! ## Operation Degree Categories +//! ## Opcode Bit Layout //! -//! Operations are grouped by their flag computation degree: -//! - **Degree 7**: 64 operations (opcodes 0-63) - use all 7 op bits -//! - **Degree 6**: 8 operations (opcodes 64-79) - u32 operations -//! - **Degree 5**: 16 operations (opcodes 80-95) - use op_bit_extra[0] -//! - **Degree 4**: 8 operations (opcodes 96-127) - use op_bit_extra[1] +//! Each opcode is 7 bits `[b0, b1, b2, b3, b4, b5, b6]` (b0 = LSB): +//! +//! ```text +//! b6 b5 b4 | Degree | Opcodes | Description +//! ---------+--------+----------+--------------------------- +//! 0 * * | 7 | 0 - 63 | All 7 bits discriminate +//! 1 0 0 | 6 | 64 - 79 | u32 ops (b0 unused) +//! 1 0 1 | 5 | 80 - 95 | Uses extra[0] column +//! 1 1 * | 4 | 96 - 127 | Uses extra[1] column +//! ``` //! //! ## Composite Flags //! @@ -19,16 +24,16 @@ //! - `left_shift_at(i)`: stack shifts left at position i //! - `right_shift_at(i)`: stack shifts right at position i -use core::marker::PhantomData; +use core::array; -use miden_core::{field::PrimeCharacteristicRing, operations::opcodes}; +use miden_core::{ + field::{Algebra, PrimeCharacteristicRing}, + operations::opcodes, +}; +use crate::constraints::{decoder::columns::DecoderCols, stack::columns::StackCols}; #[cfg(test)] -use crate::trace::decoder::NUM_OP_BITS; -use crate::trace::{ - decoder::{IS_LOOP_FLAG_COL_IDX, OP_BITS_EXTRA_COLS_RANGE, OP_BITS_RANGE}, - stack::{B0_COL_IDX, H0_COL_IDX}, -}; +use crate::trace::decoder::{NUM_OP_BITS, OP_BITS_RANGE}; // CONSTANTS // ================================================================================================ @@ -70,10 +75,13 @@ const DEGREE_5_OPCODE_ENDS: usize = DEGREE_5_OPCODE_STARTS + 15; const DEGREE_4_OPCODE_STARTS: usize = DEGREE_5_OPCODE_ENDS + 1; /// Opcode at which degree 4 operations end. -#[allow(dead_code)] +#[cfg(test)] const DEGREE_4_OPCODE_ENDS: usize = DEGREE_4_OPCODE_STARTS + 31; -// INTERNAL HELPERS +/// Op bit selectors: `bits[k][0]` = 1 - b_k (negation), `bits[k][1]` = b_k (value). +type OpBits = [[E; 2]; 7]; + +// OP FLAGS // ================================================================================================ /// Operation flags for all stack operations. @@ -85,7 +93,6 @@ const DEGREE_4_OPCODE_ENDS: usize = DEGREE_4_OPCODE_STARTS + 31; /// This struct is parameterized by the expression type `E` which allows it to work /// with both concrete field elements (for testing) and symbolic expressions (for /// constraint generation). -#[allow(dead_code)] pub struct OpFlags { degree7_op_flags: [E; NUM_DEGREE_7_OPS], degree6_op_flags: [E; NUM_DEGREE_6_OPS], @@ -100,127 +107,651 @@ pub struct OpFlags { control_flow: E, overflow: E, u32_rc_op: E, + + // Next-row control flow flags (degree 4) + end_next: E, + repeat_next: E, + respan_next: E, + halt_next: E, } -/// Helper trait for accessing decoder columns from a trace row. -pub trait DecoderAccess { - /// Returns the value of op_bit[index] from the decoder. - fn op_bit(&self, index: usize) -> E; +impl OpFlags +where + E: PrimeCharacteristicRing, +{ + /// Creates a new OpFlags instance by computing all flags from the decoder columns. + /// + /// Builds flags for the current row from `decoder`/`stack`, and also computes + /// degree-4 next-row control flow flags (END, REPEAT, RESPAN, HALT) from + /// `decoder_next`, so that callers never need to construct a second `OpFlags`. + /// + /// The computation uses intermediate values to minimize multiplications: + /// - Degree 7 flags: computed hierarchically from op bits + /// - Degree 6 flags: u32 operations, share common prefix `100` + /// - Degree 5 flags: use op_bit_extra[0] for degree reduction + /// - Degree 4 flags: use op_bit_extra[1] for degree reduction + pub fn new( + decoder: &DecoderCols, + stack: &StackCols, + decoder_next: &DecoderCols, + ) -> Self + where + V: Copy, + E: Algebra, + { + // Op bit selectors: bits[k][v] returns bit k with value v (0=negated, 1=value). + let bits: OpBits = array::from_fn(|k| { + let val = decoder.op_bits[k]; + [E::ONE - val, val.into()] + }); + // --- Precomputed multi-bit selector products --- + // Each array is built iteratively: prev[i>>1] * bits[next_bit][i&1]. + // MSB expanded first so index = MSB*2^(n-1) + ... + LSB. + + // b32: index = b3*2 + b2. Shared by degree-6, degree-5, and degree-7. + let b32: [E; 4] = array::from_fn(|i| bits[3][i >> 1].clone() * bits[2][i & 1].clone()); + // b321: index = b3*4 + b2*2 + b1. Used by degree-6 and degree-7 (with nb6 prefix). + let b321: [E; 8] = array::from_fn(|i| b32[i >> 1].clone() * bits[1][i & 1].clone()); + // b3210: index = b3*8 + b2*4 + b1*2 + b0. Used by degree-5. + let b3210: [E; 16] = array::from_fn(|i| b321[i >> 1].clone() * bits[0][i & 1].clone()); + // b432: index = b4*4 + b3*2 + b2. Used by degree-4. Reuses b32. + let b432: [E; 8] = array::from_fn(|i| bits[4][i >> 2].clone() * b32[i & 3].clone()); + // b654: index = b5*2 + b4 (b6 always negated). Used by degree-7. + let b654: [E; 4] = array::from_fn(|i| { + bits[5][i >> 1].clone() * bits[4][i & 1].clone() * bits[6][0].clone() + }); + // b654321: all bits except b0. index = b5*16 + b4*8 + b3*4 + b2*2 + b1. Reuses b321. + let b654321: [E; 32] = array::from_fn(|i| b654[i >> 3].clone() * b321[i & 7].clone()); + + // --- Degree-7 flags (opcodes 0-63) --- + // 64 flags, one per opcode. Each is a degree-7 product of all 7 bit selectors. + // b654321 holds the pre-b0 intermediates (degree 6) that pair adjacent opcodes + // differing only in the LSB (e.g., MOVUP2 and MOVDN2). + let pre_b0 = PreB0Flags { + movup_or_movdn: [ + b654321[opcodes::MOVUP2 as usize >> 1].clone(), // MOVUP2 | MOVDN2 + b654321[opcodes::MOVUP3 as usize >> 1].clone(), // MOVUP3 | MOVDN3 + b654321[opcodes::MOVUP4 as usize >> 1].clone(), // MOVUP4 | MOVDN4 + b654321[opcodes::MOVUP5 as usize >> 1].clone(), // MOVUP5 | MOVDN5 + b654321[opcodes::MOVUP6 as usize >> 1].clone(), // MOVUP6 | MOVDN6 + b654321[opcodes::MOVUP7 as usize >> 1].clone(), // MOVUP7 | MOVDN7 + b654321[opcodes::MOVUP8 as usize >> 1].clone(), // MOVUP8 | MOVDN8 + ], + swapw2_or_swapw3: b654321[opcodes::SWAPW2 as usize >> 1].clone(), + advpopw_or_expacc: b654321[opcodes::ADVPOPW as usize >> 1].clone(), + }; + let degree7_op_flags: [E; NUM_DEGREE_7_OPS] = + array::from_fn(|i| b654321[i >> 1].clone() * bits[0][i & 1].clone()); + + // --- Degree-6 flags (opcodes 64-79, u32 operations) --- + // Prefix `100` (b6=1, b5=0, b4=0), discriminated by [b1, b2, b3]. + // Index = b3*4 + b2*2 + b1: + // - 0: U32ADD - 1: U32SUB + // - 2: U32MUL - 3: U32DIV + // - 4: U32SPLIT - 5: U32ASSERT2 + // - 6: U32ADD3 - 7: U32MADD + let degree6_prefix = bits[6][1].clone() * bits[5][0].clone() * bits[4][0].clone(); + let degree6_op_flags: [E; NUM_DEGREE_6_OPS] = + array::from_fn(|i| degree6_prefix.clone() * b321[i].clone()); + + // --- Degree-5 flags (opcodes 80-95) --- + // Uses extra[0] = b6*(1-b5)*b4 (degree 3), discriminated by [b0, b1, b2, b3]. + // Index = b3*8 + b2*4 + b1*2 + b0: + // - 0: HPERM - 1: MPVERIFY + // - 2: PIPE - 3: MSTREAM + // - 4: SPLIT - 5: LOOP + // - 6: SPAN - 7: JOIN + // - 8: DYN - 9: HORNERBASE + // - 10: HORNEREXT - 11: PUSH + // - 12: DYNCALL - 13: EVALCIRCUIT + // - 14: LOGPRECOMPILE - 15: (unused) + let degree5_extra: E = decoder.extra[0].into(); + let degree5_op_flags: [E; NUM_DEGREE_5_OPS] = + array::from_fn(|i| degree5_extra.clone() * b3210[i].clone()); + + // --- Degree-4 flags (opcodes 96-127) --- + // Uses extra[1] = b6*b5 (degree 2), discriminated by [b2, b3, b4]. + // Index = b4*4 + b3*2 + b2: + // - 0: MRUPDATE - 1: CRYPTOSTREAM + // - 2: SYSCALL - 3: CALL + // - 4: END - 5: REPEAT + // - 6: RESPAN - 7: HALT + let degree4_extra = decoder.extra[1]; + let degree4_op_flags: [E; NUM_DEGREE_4_OPS] = + array::from_fn(|i| b432[i].clone() * degree4_extra); + + // --- Composite flags --- + let composite = Self::compute_composite_flags::( + &bits, + °ree7_op_flags, + pre_b0, + °ree6_op_flags, + °ree5_op_flags, + °ree4_op_flags, + decoder, + stack, + ); + + // --- Next-row control flow flags (degree 4) --- + // Detect END, REPEAT, RESPAN, HALT on the *next* row. + // Prefix = extra[1]' * b4' = b6'*b5'*b4'. + // - END = 0b0111_0000 → prefix * (1-b3') * (1-b2') + // - REPEAT = 0b0111_0100 → prefix * (1-b3') * b2' + // - RESPAN = 0b0111_1000 → prefix * b3' * (1-b2') + // - HALT = 0b0111_1100 → prefix * b3' * b2' + let (end_next, repeat_next, respan_next, halt_next) = { + let prefix: E = decoder_next.extra[1].into(); + let prefix = prefix * decoder_next.op_bits[4]; + // b32_next[i] = b3'[i>>1] * b2'[i&1], same pattern as b32 above. + let b32_next: [E; 4] = { + let b3 = decoder_next.op_bits[3]; + let b2 = decoder_next.op_bits[2]; + let bits_next: [[E; 2]; 2] = [[E::ONE - b2, b2.into()], [E::ONE - b3, b3.into()]]; + array::from_fn(|i| bits_next[1][i >> 1].clone() * bits_next[0][i & 1].clone()) + }; + ( + prefix.clone() * b32_next[0].clone(), // END: (1-b3') * (1-b2') + prefix.clone() * b32_next[1].clone(), // REPEAT: (1-b3') * b2' + prefix.clone() * b32_next[2].clone(), // RESPAN: b3' * (1-b2') + prefix * b32_next[3].clone(), // HALT: b3' * b2' + ) + }; - /// Returns the value of op_bit_extra[index] from the decoder. - fn op_bit_extra(&self, index: usize) -> E; + Self { + degree7_op_flags, + degree6_op_flags, + degree5_op_flags, + degree4_op_flags, + no_shift_flags: composite.no_shift, + left_shift_flags: composite.left_shift, + right_shift_flags: composite.right_shift, + left_shift: composite.left_shift_scalar, + right_shift: composite.right_shift_scalar, + control_flow: composite.control_flow, + overflow: composite.overflow, + u32_rc_op: composite.u32_rc_op, + end_next, + repeat_next, + respan_next, + halt_next, + } + } - /// Returns the h0 helper register (overflow indicator). - fn overflow_register(&self) -> E; + // COMPOSITE FLAGS + // ============================================================================================ - /// Returns the stack depth (b0 column). - fn stack_depth(&self) -> E; + /// Computes composite stack-shift flags, control flow flag, and overflow flag. + /// + /// Each `no_shift[d]` / `left_shift[d]` / `right_shift[d]` is the sum of all + /// operation flags whose stack impact matches that shift at depth `d`. These are + /// built incrementally: each depth adds or removes operations relative to the + /// previous depth. + #[allow(clippy::too_many_arguments)] + fn compute_composite_flags( + bits: &OpBits, + deg7: &[E; NUM_DEGREE_7_OPS], + pre_b0: PreB0Flags, + deg6: &[E; NUM_DEGREE_6_OPS], + deg5: &[E; NUM_DEGREE_5_OPS], + deg4: &[E; NUM_DEGREE_4_OPS], + decoder: &DecoderCols, + stack: &StackCols, + ) -> CompositeFlags + where + V: Copy, + E: Algebra, + { + let PreB0Flags { + movup_or_movdn, + swapw2_or_swapw3, + advpopw_or_expacc, + } = pre_b0; + + // --- Op flag accessors --- + let op7 = |op: u8| deg7[op as usize].clone(); + let op6 = |op: u8| deg6[get_op_index(op)].clone(); + let op5 = |op: u8| deg5[get_op_index(op)].clone(); + let op4 = |op: u8| deg4[get_op_index(op)].clone(); + + // --- Shared bit-prefix selectors --- + + // prefix_01: (1-b6)*b5 — degree 2, shared by prefix_010 and prefix_011 + let prefix_01 = bits[6][0].clone() * bits[5][1].clone(); + + // prefix_100: b6*(1-b5)*(1-b4) — degree 3, all u32 operations (opcodes 64-79) + let prefix_100 = bits[6][1].clone() * bits[5][0].clone() * bits[4][0].clone(); + + // --- END operation with loop flag --- + let is_loop_end = decoder.end_block_flags().is_loop; + let end_loop_flag = op4(opcodes::END) * is_loop_end; + + // ── No-shift flags ────────────────────────────────────────── + // no_shift[d] = sum of op flags whose stack position d is unchanged. + // Built incrementally via accumulate_depth_deltas. + + let no_shift_depth0 = E::sum_array::<10>(&[ + // +NOOP — no-op + op7(opcodes::NOOP), + // +U32ASSERT2 — checks s0,s1 are u32, no change + op6(opcodes::U32ASSERT2), + // +MPVERIFY — verifies Merkle path in place + op5(opcodes::MPVERIFY), + // +SPAN — control flow: begins basic block + op5(opcodes::SPAN), + // +JOIN — control flow: begins join block + op5(opcodes::JOIN), + // +EMIT — emits event, no stack change + op7(opcodes::EMIT), + // +RESPAN — control flow: next batch in basic block + op4(opcodes::RESPAN), + // +HALT — control flow: ends program + op4(opcodes::HALT), + // +CALL — control flow: enters procedure + op4(opcodes::CALL), + // +END*(1-loop) — no-shift only when NOT ending a loop body + op4(opcodes::END) * (E::ONE - is_loop_end), + ]); + + // +opcodes[0..8] –NOOP — unary ops that modify only s0 (EQZ, NEG, INV, INCR, NOT, MLOAD) + let no_shift_depth1 = deg7[0..8].iter().cloned().sum::() - op7(opcodes::NOOP); + + // +U32ADD +U32SUB +U32MUL +U32DIV — consume s0,s1, produce 2 results + let u32_arith_group = prefix_100.clone() * bits[3][0].clone(); + + let no_shift_depth4 = E::sum_array::<5>(&[ + // +MOVUP3|MOVDN3 — permute s0..s3 + movup_or_movdn[1].clone(), + // +ADVPOPW|EXPACC — overwrite s0..s3 in place + advpopw_or_expacc.clone(), + // +SWAPW2|SWAPW3 — swap s0..s3 with s8+ (leaves at depth 8) + swapw2_or_swapw3.clone(), + // +EXT2MUL — ext field multiply on s0..s3 + op7(opcodes::EXT2MUL), + // +MRUPDATE — Merkle root update on s0..s3 + op4(opcodes::MRUPDATE), + ]); + + // SWAPW2/SWAPW3 depth lifecycle: + // Op Swaps No-shift depths + // SWAPW2 s[0..4] ↔ s[8..12] 0-7, 12-15 + // SWAPW3 s[0..4] ↔ s[12..16] 0-7, 8-11 + // Combined pair: enters at 4, leaves at 8, re-enters at 12 (minus SWAPW3) + + let no_shift_depth8 + // +MOVUP7|MOVDN7 — permute s0..s7 + = movup_or_movdn[5].clone() + // +SWAPW — swap s0..s3 with s4..s7, only affects depths 0-7 + + op7(opcodes::SWAPW) + // –SWAPW2|SWAPW3 — target range s8+ now affected at this depth + - swapw2_or_swapw3.clone(); + + let no_shift_depth12 + // +SWAPW2|SWAPW3 — pair re-enters (both leave depths 12+ untouched) + = swapw2_or_swapw3.clone() + // +HPERM — Poseidon2 permutation on s0..s11 + + op5(opcodes::HPERM) + // –SWAPW3 — SWAPW3 swaps s0..s3 with s12..s15, so s12+ still changes + - op7(opcodes::SWAPW3); + + let no_shift = accumulate_depth_deltas([ + // d=0 + no_shift_depth0, + // d=1 + no_shift_depth1, + // +SWAP — swap s0,s1 + // +u32_arith_group — U32ADD..U32DIV: consume s0,s1, produce 2 results + op7(opcodes::SWAP) + u32_arith_group, + // +MOVUP2|MOVDN2 — permute s0..s2 + movup_or_movdn[0].clone(), + // d=4 + no_shift_depth4, + // +MOVUP4|MOVDN4 — permute s0..s4 + movup_or_movdn[2].clone(), + // +MOVUP5|MOVDN5 — permute s0..s5 + movup_or_movdn[3].clone(), + // +MOVUP6|MOVDN6 — permute s0..s6 + movup_or_movdn[4].clone(), + // d=8 + no_shift_depth8, + // +MOVUP8|MOVDN8 — permute s0..s8 + movup_or_movdn[6].clone(), + // d=10 (unchanged) + E::ZERO, + // d=11 (unchanged) + E::ZERO, + // d=12 + no_shift_depth12, + // d=13 (unchanged) + E::ZERO, + // d=14 (unchanged) + E::ZERO, + // d=15 (unchanged) + E::ZERO, + ]); + + // ── Left-shift flags ──────────────────────────────────────── + // left_shift[d] = sum of op flags causing a left shift at depth d. + // Built incrementally via accumulate_depth_deltas. + + // All MOVUP/MOVDN pairs share bits [1..6] and differ only in b0: + // b0 = 0 → MOVUP{w}, b0 = 1 → MOVDN{w} (for all widths 2..8) + let all_mov_pairs = E::sum_array::<7>(&movup_or_movdn); + let all_movdn = all_mov_pairs.clone() * bits[0][1].clone(); + + let left_shift_depth1 = E::sum_array::<11>(&[ + // +ASSERT — consumes s0 (must be 1) + op7(opcodes::ASSERT), + // +MOVDN{2..8} — move s0 down, shifts left above + all_movdn, + // +DROP — discards s0 + op7(opcodes::DROP), + // +MSTORE — pops address s0, stores s1 to memory + op7(opcodes::MSTORE), + // +MSTOREW — pops address s0, stores word to memory + op7(opcodes::MSTOREW), + // +(opcode 47) — unused opcode slot + deg7[47].clone(), + // +SPLIT — control flow: pops condition from s0 + op5(opcodes::SPLIT), + // +LOOP — control flow: pops condition from s0 + op5(opcodes::LOOP), + // +END*loop — END when ending a loop: pops the loop flag + end_loop_flag.clone(), + // +DYN — control flow: consumes s0..s3 (target hash) + op5(opcodes::DYN), + // +DYNCALL — control flow: consumes s0..s3 (target hash) + op5(opcodes::DYNCALL), + ]); + + // +opcodes[32..40] –ASSERT — binary ops (EQ, ADD, MUL, AND, OR, U32AND, U32XOR) + // that consume s0,s1 and produce 1 result; ASSERT already counted at depth 1 + let left_shift_depth2 = deg7[32..40].iter().cloned().sum::() - op7(opcodes::ASSERT); + + let left_shift_depth3 + // +CSWAP — pops condition s0, conditionally swaps s1,s2; net -1 at depth 3 + = op7(opcodes::CSWAP) + // +U32ADD3 — pops s0,s1,s2, pushes 2 results; net -1 at depth 3 + + op6(opcodes::U32ADD3) + // +U32MADD — pops s0,s1,s2, pushes s0*s1+s2 as 2 results; net -1 at depth 3 + + op6(opcodes::U32MADD) + // –MOVDN2 — only shifts left at depths 1..2 + - op7(opcodes::MOVDN2); + + let left_shift = accumulate_depth_deltas([ + // d=0 (left shift undefined at depth 0) + E::ZERO, + // d=1 + left_shift_depth1, + // d=2 + left_shift_depth2, + // d=3 + left_shift_depth3, + // –MOVDN3 — only shifts left at depths 1..3 + -op7(opcodes::MOVDN3), + // +MLOADW — pops address, loads 4 values; net -1 at depth 5 + // –MOVDN4 — only shifts left at depths 1..4 + op7(opcodes::MLOADW) - op7(opcodes::MOVDN4), + // –MOVDN5 — only shifts left at depths 1..5 + -op7(opcodes::MOVDN5), + // –MOVDN6 — only shifts left at depths 1..6 + -op7(opcodes::MOVDN6), + // –MOVDN7 — only shifts left at depths 1..7 + -op7(opcodes::MOVDN7), + // +CSWAPW — pops condition, swaps words s1..s4 with s5..s8; net -1 from depth 9 + // –MOVDN8 — only shifts left at depths 1..8 + op7(opcodes::CSWAPW) - op7(opcodes::MOVDN8), + // d=10 (unchanged) + E::ZERO, + // d=11 (unchanged) + E::ZERO, + // d=12 (unchanged) + E::ZERO, + // d=13 (unchanged) + E::ZERO, + // d=14 (unchanged) + E::ZERO, + // d=15 (unchanged) + E::ZERO, + ]); + + // ── Right-shift flags ─────────────────────────────────────── + // right_shift[d] = sum of op flags causing a right shift at depth d. + // Built incrementally via accumulate_depth_deltas. + + let all_movup = all_mov_pairs * bits[0][0].clone(); + let right_shift_depth0 + // +deg7[48..64] — PAD, DUP0..DUP15, ADVPOP, SDEPTH, CLK: push one element + = deg7[48..64].iter().cloned().sum::() + // +PUSH — push immediate value + + op5(opcodes::PUSH) + // +MOVUP{2..8} — move element from below to top, shifting s0..s{w-1} right + + all_movup; + + let right_shift = accumulate_depth_deltas([ + // d=0 + right_shift_depth0, + // +U32SPLIT — pops one u32, pushes high and low halves; net +1 from depth 1 + op6(opcodes::U32SPLIT), + // –MOVUP2 — only shifts right at depths 0..1 + -op7(opcodes::MOVUP2), + // –MOVUP3 — only shifts right at depths 0..2 + -op7(opcodes::MOVUP3), + // –MOVUP4 — only shifts right at depths 0..3 + -op7(opcodes::MOVUP4), + // –MOVUP5 — only shifts right at depths 0..4 + -op7(opcodes::MOVUP5), + // –MOVUP6 — only shifts right at depths 0..5 + -op7(opcodes::MOVUP6), + // –MOVUP7 — only shifts right at depths 0..6 + -op7(opcodes::MOVUP7), + // –MOVUP8 — only shifts right at depths 0..7 + -op7(opcodes::MOVUP8), + // d=9 (unchanged) + E::ZERO, + // d=10 (unchanged) + E::ZERO, + // d=11 (unchanged) + E::ZERO, + // d=12 (unchanged) + E::ZERO, + // d=13 (unchanged) + E::ZERO, + // d=14 (unchanged) + E::ZERO, + // d=15 (unchanged) + E::ZERO, + ]); + + // ── Scalar shift flags ────────────────────────────────────── + // These are NOT the same expressions as right_shift[15] / left_shift[15]. + // They use low-degree bit prefixes that are algebraically equivalent on + // valid traces (exactly one opcode active), but produce lower-degree + // expressions for use in constraints that multiply these with other terms. + + // right_shift_scalar (degree 6): + // Uses prefix_011 (degree 3) instead of summing all 16 push-like degree-7 flags. + let prefix_011 = prefix_01.clone() * bits[4][1].clone(); + let right_shift_scalar + // +prefix_011 — PAD, DUP0..DUP15, ADVPOP, SDEPTH, CLK (opcodes 48-63) + = prefix_011 + // +PUSH — push immediate value + + op5(opcodes::PUSH) + // +U32SPLIT — pops one u32, pushes high and low halves + + op6(opcodes::U32SPLIT); + + // left_shift_scalar (degree 5): + // Uses prefix_010 (degree 3) instead of summing all left-shifting degree-7 flags. + // DYNCALL is intentionally excluded — it left-shifts the stack but uses + // decoder hasher state (h5) for overflow constraints, not the generic path. + let prefix_010 = prefix_01 * bits[4][0].clone(); + let u32_add3_madd_group = prefix_100.clone() * bits[3][1].clone() * bits[2][1].clone(); + let left_shift_scalar = E::sum_array::<7>(&[ + // +prefix_010 — ASSERT, EQ, ADD, MUL, AND, OR, U32AND, U32XOR, DROP, + // CSWAP, CSWAPW, MLOADW, MSTORE, MSTOREW, (op46), (op47) + prefix_010, + // +u32_add3_madd_group — U32ADD3, U32MADD: consume 3, produce 2 + u32_add3_madd_group, + // +SPLIT — control flow: pops condition + op5(opcodes::SPLIT), + // +LOOP — control flow: pops condition + op5(opcodes::LOOP), + // +REPEAT — control flow: pops condition for next iteration + op4(opcodes::REPEAT), + // +END*loop — END when ending a loop: pops loop flag + end_loop_flag, + // +DYN — control flow: consumes target hash + op5(opcodes::DYN), + ]); + + // --- Control flow flag --- + // + // Control flow operations are the only operations that can execute when outside a basic + // block (i.e., when in_span = 0). This is enforced by the decoder constraint: + // (1 - in_span) * (1 - control_flow) = 0 + // + // Control flow operations (must include ALL of these): + // - Block starters: SPAN, JOIN, SPLIT, LOOP + // - Block transitions: END, REPEAT, RESPAN, HALT + // - Dynamic execution: DYN, DYNCALL + // - Procedure calls: CALL, SYSCALL + // + // IMPORTANT: If a new control flow operation is added, it MUST be included here, + // otherwise the decoder constraint will fail when executing that operation. + let control_flow = E::sum_array::<6>(&[ + // +SPAN, JOIN, SPLIT, LOOP — block starters + bits[3][0].clone() * bits[2][1].clone() * decoder.extra[0], + // +END, REPEAT, RESPAN, HALT — block transitions + bits[4][1].clone() * decoder.extra[1], + // +DYNCALL — dynamic execution + op5(opcodes::DYNCALL), + // +DYN — dynamic execution + op5(opcodes::DYN), + // +SYSCALL — procedure call + op4(opcodes::SYSCALL), + // +CALL — procedure call + op4(opcodes::CALL), + ]); + + // Flag if current operation is a degree-6 u32 operation + let u32_rc_op = prefix_100; - /// Returns the is_loop flag from the decoder. - fn is_loop_end(&self) -> E; -} + // Flag if overflow table contains values + let overflow: E = stack.b0.into(); + let overflow = (overflow - E::from_u64(16)) * stack.h0; -/// Implement DecoderAccess for MainTraceRow references. -impl DecoderAccess for &crate::MainTraceRow -where - T: Clone, -{ - #[inline] - fn op_bit(&self, index: usize) -> T { - self.decoder[OP_BITS_RANGE.start + index].clone() + CompositeFlags { + no_shift, + left_shift, + right_shift, + left_shift_scalar, + right_shift_scalar, + control_flow, + u32_rc_op, + overflow, + } } - #[inline] - fn op_bit_extra(&self, index: usize) -> T { - self.decoder[OP_BITS_EXTRA_COLS_RANGE.start + index].clone() - } + // ------ Composite Flags --------------------------------------------------------------------- - #[inline] - fn overflow_register(&self) -> T { - self.stack[H0_COL_IDX].clone() + /// Returns the flag for when the stack item at the specified depth remains unchanged. + #[inline(always)] + pub fn no_shift_at(&self, index: usize) -> E { + self.no_shift_flags[index].clone() } - #[inline] - fn stack_depth(&self) -> T { - self.stack[B0_COL_IDX].clone() + /// Returns the flag for when the stack item at the specified depth shifts left. + /// Left shift is not defined on position 0, so returns default for index 0. + #[inline(always)] + pub fn left_shift_at(&self, index: usize) -> E { + self.left_shift_flags[index].clone() } - #[inline] - fn is_loop_end(&self) -> T { - self.decoder[IS_LOOP_FLAG_COL_IDX].clone() + /// Returns the flag for when the stack item at the specified depth shifts right. + #[inline(always)] + pub fn right_shift_at(&self, index: usize) -> E { + self.right_shift_flags[index].clone() } -} -/// Wrapper that converts trace row variables to expressions during decoder access. -/// -/// This is used when building constraints to convert `AB::Var` to `AB::Expr` so that -/// `OpFlags` can be created for use in constraint expressions. -pub struct ExprDecoderAccess<'a, V, E> { - row: &'a crate::MainTraceRow, - _phantom: PhantomData, -} - -impl<'a, V, E> ExprDecoderAccess<'a, V, E> { - /// Creates a new expression decoder access wrapper. - pub fn new(row: &'a crate::MainTraceRow) -> Self { - Self { row, _phantom: PhantomData } + /// Returns the scalar flag when the stack operation shifts the stack to the right. + /// + /// This is NOT the same expression as `right_shift_at(15)`. It uses low-degree + /// bit prefixes (degree 6) that are algebraically equivalent on valid traces, + /// producing a lower-degree expression for use in constraints that multiply + /// this flag with other terms. + #[inline(always)] + pub fn right_shift(&self) -> E { + self.right_shift.clone() } -} -impl<'a, V, E> DecoderAccess for ExprDecoderAccess<'a, V, E> -where - V: Clone + Into, -{ - #[inline] - fn op_bit(&self, index: usize) -> E { - self.row.decoder[OP_BITS_RANGE.start + index].clone().into() + /// Returns the scalar flag when the stack operation shifts the stack to the left. + /// + /// This is NOT the same expression as `left_shift_at(15)`. It uses low-degree + /// bit prefixes (degree 5) that are algebraically equivalent on valid traces. + /// + /// Excludes `DYNCALL` — it left-shifts the stack but is handled via the + /// per-position `left_shift_at` flags. The aggregate `left_shift` flag only + /// gates generic helper/overflow constraints, which don't apply to `DYNCALL` + /// because those helper columns are reused for the context switch and the + /// overflow pointer is stored in decoder hasher state (h5). + #[inline(always)] + pub fn left_shift(&self) -> E { + self.left_shift.clone() } - #[inline] - fn op_bit_extra(&self, index: usize) -> E { - self.row.decoder[OP_BITS_EXTRA_COLS_RANGE.start + index].clone().into() + /// Returns the flag when the current operation is a control flow operation. + /// + /// Control flow operations are the only operations allowed to execute when outside a basic + /// block (i.e., when in_span = 0). This includes: + /// - Block starters: SPAN, JOIN, SPLIT, LOOP + /// - Block transitions: END, REPEAT, RESPAN, HALT + /// - Dynamic execution: DYN, DYNCALL + /// - Procedure calls: CALL, SYSCALL + /// + /// Used by the decoder constraint: `(1 - in_span) * (1 - control_flow) = 0` + /// + /// Degree: 3 + #[inline(always)] + pub fn control_flow(&self) -> E { + self.control_flow.clone() } - #[inline] - fn overflow_register(&self) -> E { - self.row.stack[H0_COL_IDX].clone().into() + /// Returns the flag indicating whether the overflow stack contains values. + /// Degree: 2 + #[inline(always)] + pub fn overflow(&self) -> E { + self.overflow.clone() } - #[inline] - fn stack_depth(&self) -> E { - self.row.stack[B0_COL_IDX].clone().into() - } + // ------ Next-row flags ------------------------------------------------------------------- - #[inline] - fn is_loop_end(&self) -> E { - self.row.decoder[IS_LOOP_FLAG_COL_IDX].clone().into() + /// Returns the flag for END on the next row. Degree: 4 + #[inline(always)] + pub fn end_next(&self) -> E { + self.end_next.clone() } -} -/// Helper function to compute binary NOT: 1 - x -#[inline] -fn binary_not(x: E) -> E -where - E: Clone + core::ops::Sub + PrimeCharacteristicRing, -{ - E::ONE - x -} + /// Returns the flag for REPEAT on the next row. Degree: 4 + #[inline(always)] + pub fn repeat_next(&self) -> E { + self.repeat_next.clone() + } -#[derive(Clone)] -struct Op { - bit: E, - not: E, -} + /// Returns the flag for RESPAN on the next row. Degree: 4 + #[inline(always)] + pub fn respan_next(&self) -> E { + self.respan_next.clone() + } -impl Op { - #[inline] - fn is(&self) -> E { - self.bit.clone() + /// Returns the flag for HALT on the next row. Degree: 4 + #[inline(always)] + pub fn halt_next(&self) -> E { + self.halt_next.clone() } - #[inline] - fn not(&self) -> E { - self.not.clone() + /// Returns the flag when the current operation is a u32 operation requiring range checks. + #[inline(always)] + pub fn u32_rc_op(&self) -> E { + self.u32_rc_op.clone() } } @@ -236,397 +767,7 @@ macro_rules! op_flag_getters { }; } -#[allow(dead_code)] -impl OpFlags -where - E: Clone - + Default - + core::ops::Add - + core::ops::Sub - + core::ops::Mul - + PrimeCharacteristicRing, -{ - /// Creates a new OpFlags instance by computing all flags from the decoder columns. - /// - /// The computation uses intermediate values to minimize multiplications: - /// - Degree 7 flags: computed hierarchically from op bits - /// - Degree 6 flags: u32 operations, share common prefix `100` - /// - Degree 5 flags: use op_bit_extra[0] for degree reduction - /// - Degree 4 flags: use op_bit_extra[1] for degree reduction - pub fn new>(frame: D) -> Self { - // Initialize arrays with default values - let mut degree7_op_flags: [E; NUM_DEGREE_7_OPS] = core::array::from_fn(|_| E::default()); - let mut degree6_op_flags: [E; NUM_DEGREE_6_OPS] = core::array::from_fn(|_| E::default()); - let mut degree5_op_flags: [E; NUM_DEGREE_5_OPS] = core::array::from_fn(|_| E::default()); - let mut degree4_op_flags: [E; NUM_DEGREE_4_OPS] = core::array::from_fn(|_| E::default()); - let mut no_shift_flags: [E; NUM_STACK_IMPACT_FLAGS] = - core::array::from_fn(|_| E::default()); - let mut left_shift_flags: [E; NUM_STACK_IMPACT_FLAGS] = - core::array::from_fn(|_| E::default()); - let mut right_shift_flags: [E; NUM_STACK_IMPACT_FLAGS] = - core::array::from_fn(|_| E::default()); - - // Get op bits and their binary negations. - let op: [Op; 7] = core::array::from_fn(|i| { - let bit = frame.op_bit(i); - let not = binary_not(bit.clone()); - Op { bit, not } - }); - - // --- Low-degree prefix selectors for composite flags --- - // These produce degree-5 left_shift and right_shift composite flags. - // per spec: https://0xmiden.github.io/miden-vm/design/stack/op_constraints.html#shift-left-flag - - // Prefix `010` selector: (1-b6)*b5*(1-b4) - degree 3 - // Covers all degree-7 operations with this prefix (left shift ops) - let prefix_010 = op[6].not() * op[5].is() * op[4].not(); - - // Prefix `011` selector: (1-b6)*b5*b4 - degree 3 - // Covers all degree-7 operations with this prefix (right shift ops) - let prefix_011 = op[6].not() * op[5].is() * op[4].is(); - - // Prefix `10011` selector: b6*(1-b5)*(1-b4)*b3*b2 - degree 5 - // Covers U32ADD3 and U32MADD (both cause left shift by 2) - let add3_madd_prefix = op[6].is() * op[5].not() * op[4].not() * op[3].is() * op[2].is(); - - // --- Computation of degree 7 operation flags --- - - // Intermediate values computed from most significant bits - degree7_op_flags[0] = op[5].not() * op[4].not(); - degree7_op_flags[16] = op[5].not() * op[4].is(); - degree7_op_flags[32] = op[5].is() * op[4].not(); - // Prefix `11` in bits [5..4] (binary 110000 = 48). - degree7_op_flags[0b110000] = op[5].is() * op[4].is(); - - // Flag of prefix `100` - all degree 6 u32 operations - let f100 = degree7_op_flags[0].clone() * op[6].is(); - // Flag of prefix `1000` - u32 arithmetic operations - let f1000 = f100.clone() * op[3].not(); - - let not_6_not_3 = op[6].not() * op[3].not(); - let not_6_yes_3 = op[6].not() * op[3].is(); - - // Add fourth most significant bit along with most significant bit - for i in (0..64).step_by(16) { - let base = degree7_op_flags[i].clone(); - degree7_op_flags[i + 8] = base.clone() * not_6_yes_3.clone(); - degree7_op_flags[i] = base * not_6_not_3.clone(); - } - - // Flag of prefix `011` - degree 7 right shift operations - let f011 = degree7_op_flags[48].clone() + degree7_op_flags[56].clone(); - // Flag of prefix `010` - degree 7 left shift operations (reserved for future use) - let _f010 = degree7_op_flags[32].clone() + degree7_op_flags[40].clone(); - // Flag of prefix `0000` - no shift from position 1 onwards - let f0000 = degree7_op_flags[0].clone(); - // Flag of prefix `0100` - left shift from position 2 onwards - let f0100 = degree7_op_flags[32].clone(); - - // Add fifth most significant bit - for i in (0..64).step_by(8) { - let base = degree7_op_flags[i].clone(); - degree7_op_flags[i + 4] = base.clone() * op[2].is(); - degree7_op_flags[i] = base * op[2].not(); - } - - // Add sixth most significant bit - for i in (0..64).step_by(4) { - let base = degree7_op_flags[i].clone(); - degree7_op_flags[i + 2] = base.clone() * op[1].is(); - degree7_op_flags[i] = base * op[1].not(); - } - - // Cache flags for mov{up/dn}{2-8}, swapw{2-3} operations - let mov2_flag = degree7_op_flags[10].clone(); - let mov3_flag = degree7_op_flags[12].clone(); - let mov4_flag = degree7_op_flags[16].clone(); - let mov5_flag = degree7_op_flags[18].clone(); - let mov6_flag = degree7_op_flags[20].clone(); - let mov7_flag = degree7_op_flags[22].clone(); - let mov8_flag = degree7_op_flags[26].clone(); - let swapwx_flag = degree7_op_flags[28].clone(); - let adv_popw_expacc = degree7_op_flags[14].clone(); - - // Add least significant bit - for i in (0..64).step_by(2) { - let base = degree7_op_flags[i].clone(); - degree7_op_flags[i + 1] = base.clone() * op[0].is(); - degree7_op_flags[i] = base * op[0].not(); - } - - let ext2mul_flag = degree7_op_flags[25].clone(); - - // Flag when items from first position onwards are copied over (excludes NOOP) - let no_change_1_flag = f0000.clone() - degree7_op_flags[0].clone(); - // Flag when items from second position onwards shift left (excludes ASSERT) - let left_change_1_flag = f0100 - degree7_op_flags[32].clone(); - - // --- Computation of degree 6 operation flags --- - - // Degree 6 flag prefix is `100` - let degree_6_flag = op[6].is() * op[5].not() * op[4].not(); - - // Degree 6 flags do not use the first bit (op_bits[0]) - let not_2_not_3 = op[2].not() * op[3].not(); - let yes_2_not_3 = op[2].is() * op[3].not(); - let not_2_yes_3 = op[2].not() * op[3].is(); - let yes_2_yes_3 = op[2].is() * op[3].is(); - - degree6_op_flags[0] = op[1].not() * not_2_not_3.clone(); // U32ADD - degree6_op_flags[1] = op[1].is() * not_2_not_3.clone(); // U32SUB - degree6_op_flags[2] = op[1].not() * yes_2_not_3.clone(); // U32MUL - degree6_op_flags[3] = op[1].is() * yes_2_not_3.clone(); // U32DIV - degree6_op_flags[4] = op[1].not() * not_2_yes_3.clone(); // U32SPLIT - degree6_op_flags[5] = op[1].is() * not_2_yes_3.clone(); // U32ASSERT2 - degree6_op_flags[6] = op[1].not() * yes_2_yes_3.clone(); // U32ADD3 - degree6_op_flags[7] = op[1].is() * yes_2_yes_3.clone(); // U32MADD - - // Multiply by degree 6 flag - for flag in degree6_op_flags.iter_mut() { - *flag = flag.clone() * degree_6_flag.clone(); - } - - // --- Computation of degree 5 operation flags --- - - // Degree 5 flag uses the first degree reduction column - let degree_5_flag = frame.op_bit_extra(0); - - let not_0_not_1 = op[0].not() * op[1].not(); - let yes_0_not_1 = op[0].is() * op[1].not(); - let not_0_yes_1 = op[0].not() * op[1].is(); - let yes_0_yes_1 = op[0].is() * op[1].is(); - - degree5_op_flags[0] = not_0_not_1.clone() * op[2].not(); // HPERM - degree5_op_flags[1] = yes_0_not_1.clone() * op[2].not(); // MPVERIFY - degree5_op_flags[2] = not_0_yes_1.clone() * op[2].not(); // PIPE - degree5_op_flags[3] = yes_0_yes_1.clone() * op[2].not(); // MSTREAM - degree5_op_flags[4] = not_0_not_1.clone() * op[2].is(); // SPLIT - degree5_op_flags[5] = yes_0_not_1.clone() * op[2].is(); // LOOP - degree5_op_flags[6] = not_0_yes_1.clone() * op[2].is(); // SPAN - degree5_op_flags[7] = yes_0_yes_1.clone() * op[2].is(); // JOIN - - // Second half shares same lower 3 bits - for i in 0..8 { - degree5_op_flags[i + 8] = degree5_op_flags[i].clone(); - } - - // Update with op_bit[3] and degree 5 flag - let deg_5_not_3 = op[3].not() * degree_5_flag.clone(); - for flag in degree5_op_flags.iter_mut().take(8) { - *flag = flag.clone() * deg_5_not_3.clone(); - } - let deg_5_yes_3 = op[3].is() * degree_5_flag.clone(); - for flag in degree5_op_flags.iter_mut().skip(8) { - *flag = flag.clone() * deg_5_yes_3.clone(); - } - - // --- Computation of degree 4 operation flags --- - - // Degree 4 flag uses the second degree reduction column - let degree_4_flag = frame.op_bit_extra(1); - - // Degree 4 flags do not use the first two bits - degree4_op_flags[0] = not_2_not_3.clone(); // MRUPDATE - degree4_op_flags[1] = yes_2_not_3; // (unused) - degree4_op_flags[2] = not_2_yes_3; // SYSCALL - degree4_op_flags[3] = yes_2_yes_3; // CALL - - // Second half shares same lower 4 bits - for i in 0..4 { - degree4_op_flags[i + 4] = degree4_op_flags[i].clone(); - } - - // Update with op_bit[4] and degree 4 flag - let deg_4_not_4 = op[4].not() * degree_4_flag.clone(); - for flag in degree4_op_flags.iter_mut().take(4) { - *flag = flag.clone() * deg_4_not_4.clone(); - } - let deg_4_yes_4 = op[4].is() * degree_4_flag.clone(); - for flag in degree4_op_flags.iter_mut().skip(4) { - *flag = flag.clone() * deg_4_yes_4.clone(); - } - - // --- No shift composite flags computation --- - - // Flag for END operation causing stack to shift left (depends on whether in loop) - let shift_left_on_end = degree4_op_flags[4].clone() * frame.is_loop_end(); - - no_shift_flags[0] = degree7_op_flags[0].clone() // NOOP - + degree6_op_flags[5].clone() // U32ASSERT2 - + degree5_op_flags[1].clone() // MPVERIFY - + degree5_op_flags[6].clone() // SPAN - + degree5_op_flags[7].clone() // JOIN - + degree7_op_flags[31].clone() // EMIT - + degree4_op_flags[6].clone() // RESPAN - + degree4_op_flags[7].clone() // HALT - + degree4_op_flags[3].clone() // CALL - + degree4_op_flags[4].clone() * binary_not(frame.is_loop_end()); // END (non-loop) - - no_shift_flags[1] = no_shift_flags[0].clone() + no_change_1_flag; - no_shift_flags[2] = no_shift_flags[1].clone() - + degree7_op_flags[8].clone() // SWAP - + f1000.clone(); // u32 arithmetic - no_shift_flags[3] = no_shift_flags[2].clone() + mov2_flag.clone(); - no_shift_flags[4] = no_shift_flags[3].clone() - + mov3_flag.clone() - + adv_popw_expacc.clone() - + swapwx_flag.clone() - + ext2mul_flag.clone() - + degree4_op_flags[0].clone(); // MRUPDATE - - no_shift_flags[5] = no_shift_flags[4].clone() + mov4_flag.clone(); - no_shift_flags[6] = no_shift_flags[5].clone() + mov5_flag.clone(); - no_shift_flags[7] = no_shift_flags[6].clone() + mov6_flag.clone(); - no_shift_flags[8] = - no_shift_flags[7].clone() + mov7_flag.clone() + degree7_op_flags[24].clone() - - degree7_op_flags[28].clone(); - - no_shift_flags[9] = no_shift_flags[8].clone() + mov8_flag.clone(); - no_shift_flags[10] = no_shift_flags[9].clone(); - no_shift_flags[11] = no_shift_flags[9].clone(); - // SWAPW3; SWAPW2; HPERM - no_shift_flags[12] = no_shift_flags[9].clone() - degree7_op_flags[29].clone() - + degree7_op_flags[28].clone() - + degree5_op_flags[0].clone(); - no_shift_flags[13] = no_shift_flags[12].clone(); - no_shift_flags[14] = no_shift_flags[12].clone(); - no_shift_flags[15] = no_shift_flags[12].clone(); - - // --- Left shift composite flags computation --- - - let movdnn_flag = degree7_op_flags[11].clone() - + degree7_op_flags[13].clone() - + degree7_op_flags[17].clone() - + degree7_op_flags[19].clone() - + degree7_op_flags[21].clone() - + degree7_op_flags[23].clone() - + degree7_op_flags[27].clone(); - - let split_loop_flag = degree5_op_flags[4].clone() + degree5_op_flags[5].clone(); - let add3_madd_flag = degree6_op_flags[6].clone() + degree6_op_flags[7].clone(); - - left_shift_flags[1] = degree7_op_flags[32].clone() - + movdnn_flag.clone() - + degree7_op_flags[41].clone() - + degree7_op_flags[45].clone() - + degree7_op_flags[47].clone() - + degree7_op_flags[46].clone() - + split_loop_flag.clone() - + shift_left_on_end.clone() - + degree5_op_flags[8].clone() // DYN - + degree5_op_flags[12].clone(); // DYNCALL - - left_shift_flags[2] = left_shift_flags[1].clone() + left_change_1_flag; - left_shift_flags[3] = - left_shift_flags[2].clone() + add3_madd_flag.clone() + degree7_op_flags[42].clone() - - degree7_op_flags[11].clone(); - left_shift_flags[4] = left_shift_flags[3].clone() - degree7_op_flags[13].clone(); - left_shift_flags[5] = left_shift_flags[4].clone() + degree7_op_flags[44].clone() - - degree7_op_flags[17].clone(); - left_shift_flags[6] = left_shift_flags[5].clone() - degree7_op_flags[19].clone(); - left_shift_flags[7] = left_shift_flags[6].clone() - degree7_op_flags[21].clone(); - left_shift_flags[8] = left_shift_flags[7].clone() - degree7_op_flags[23].clone(); - left_shift_flags[9] = left_shift_flags[8].clone() + degree7_op_flags[43].clone() - - degree7_op_flags[27].clone(); - left_shift_flags[10] = left_shift_flags[9].clone(); - left_shift_flags[11] = left_shift_flags[9].clone(); - left_shift_flags[12] = left_shift_flags[9].clone(); - left_shift_flags[13] = left_shift_flags[9].clone(); - left_shift_flags[14] = left_shift_flags[9].clone(); - left_shift_flags[15] = left_shift_flags[9].clone(); - - // --- Right shift composite flags computation --- - - let movupn_flag = degree7_op_flags[10].clone() - + degree7_op_flags[12].clone() - + degree7_op_flags[16].clone() - + degree7_op_flags[18].clone() - + degree7_op_flags[20].clone() - + degree7_op_flags[22].clone() - + degree7_op_flags[26].clone(); - - right_shift_flags[0] = f011.clone() - + degree5_op_flags[11].clone() // PUSH - + movupn_flag.clone(); - - right_shift_flags[1] = right_shift_flags[0].clone() + degree6_op_flags[4].clone(); // U32SPLIT - - right_shift_flags[2] = right_shift_flags[1].clone() - degree7_op_flags[10].clone(); - right_shift_flags[3] = right_shift_flags[2].clone() - degree7_op_flags[12].clone(); - right_shift_flags[4] = right_shift_flags[3].clone() - degree7_op_flags[16].clone(); - right_shift_flags[5] = right_shift_flags[4].clone() - degree7_op_flags[18].clone(); - right_shift_flags[6] = right_shift_flags[5].clone() - degree7_op_flags[20].clone(); - right_shift_flags[7] = right_shift_flags[6].clone() - degree7_op_flags[22].clone(); - right_shift_flags[8] = right_shift_flags[7].clone() - degree7_op_flags[26].clone(); - right_shift_flags[9] = right_shift_flags[8].clone(); - right_shift_flags[10] = right_shift_flags[8].clone(); - right_shift_flags[11] = right_shift_flags[8].clone(); - right_shift_flags[12] = right_shift_flags[8].clone(); - right_shift_flags[13] = right_shift_flags[8].clone(); - right_shift_flags[14] = right_shift_flags[8].clone(); - right_shift_flags[15] = right_shift_flags[8].clone(); - - // --- Other composite flags --- - - // Flag if stack shifted right (degree 6, dominated by U32SPLIT) - // Uses prefix_011 (degree 3) instead of f011 (degree 4) for lower base degree - let right_shift = prefix_011.clone() - + degree5_op_flags[11].clone() // PUSH - + degree6_op_flags[4].clone(); // U32SPLIT - - // Flag if stack shifted left (degree 5). - // Uses low-degree prefixes to keep left_shift at degree 5 (avoids degree growth). - // Note: DYNCALL is intentionally excluded; see stack overflow depth constraints. - let left_shift = prefix_010.clone() - + add3_madd_prefix.clone() - + split_loop_flag - + degree4_op_flags[5].clone() // REPEAT - + shift_left_on_end - + degree5_op_flags[8].clone(); // DYN - - // Flag if current operation is a control flow operation. - // - // Control flow operations are the only operations that can execute when outside a basic - // block (i.e., when in_span = 0). This is enforced by the decoder constraint: - // (1 - in_span) * (1 - control_flow) = 0 - // - // Control flow operations (must include ALL of these): - // - Block starters: SPAN, JOIN, SPLIT, LOOP - // - Block transitions: END, REPEAT, RESPAN, HALT - // - Dynamic execution: DYN, DYNCALL - // - Procedure calls: CALL, SYSCALL - // - // IMPORTANT: If a new control flow operation is added, it MUST be included here, - // otherwise the decoder constraint will fail when executing that operation. - let control_flow = degree_5_flag * op[3].not() * op[2].is() // SPAN, JOIN, SPLIT, LOOP - + degree_4_flag * op[4].is() // END, REPEAT, RESPAN, HALT - + degree5_op_flags[8].clone() // DYN - + degree5_op_flags[12].clone() // DYNCALL - + degree4_op_flags[2].clone() // SYSCALL - + degree4_op_flags[3].clone(); // CALL - - // Flag if current operation is a degree 6 u32 operation - let u32_rc_op = f100; - - // Flag if overflow table contains values - let overflow = (frame.stack_depth() - E::from_u64(16)) * frame.overflow_register(); - - Self { - degree7_op_flags, - degree6_op_flags, - degree5_op_flags, - degree4_op_flags, - no_shift_flags, - left_shift_flags, - right_shift_flags, - left_shift, - right_shift, - control_flow, - overflow, - u32_rc_op, - } - } - +impl OpFlags { // STATE ACCESSORS // ============================================================================================ @@ -634,7 +775,7 @@ where op_flag_getters!(degree7_op_flags, /// Operation Flag of NOOP operation. - #[allow(dead_code)] + #[expect(dead_code)] noop => opcodes::NOOP, /// Operation Flag of EQZ operation. eqz => opcodes::EQZ, @@ -664,7 +805,7 @@ where /// Operation Flag of MOVDN3 operation. movdn3 => opcodes::MOVDN3, /// Operation Flag of ADVPOPW operation. - #[allow(dead_code)] + #[expect(dead_code)] advpopw => opcodes::ADVPOPW, /// Operation Flag of EXPACC operation. expacc => opcodes::EXPACC, @@ -717,7 +858,7 @@ where /// Operation Flag of FRIE2F4 operation. frie2f4 => opcodes::FRIE2F4, /// Operation Flag of DROP operation. - #[allow(dead_code)] + #[expect(dead_code)] drop => opcodes::DROP, /// Operation Flag of CSWAP operation. cswap => opcodes::CSWAP, @@ -756,7 +897,7 @@ where /// Operation Flag of DUP15 operation. dup15 => opcodes::DUP15, /// Operation Flag of ADVPOP operation. - #[allow(dead_code)] + #[expect(dead_code)] advpop => opcodes::ADVPOP, /// Operation Flag of SDEPTH operation. sdepth => opcodes::SDEPTH, @@ -840,110 +981,36 @@ where /// Operation Flag of CRYPTOSTREAM operation. cryptostream => opcodes::CRYPTOSTREAM, ); - - // ------ Composite Flags --------------------------------------------------------------------- - - /// Returns the flag for when the stack item at the specified depth remains unchanged. - #[inline(always)] - pub fn no_shift_at(&self, index: usize) -> E { - self.no_shift_flags[index].clone() - } - - /// Returns the flag for when the stack item at the specified depth shifts left. - /// Left shift is not defined on position 0, so returns default for index 0. - #[inline(always)] - pub fn left_shift_at(&self, index: usize) -> E { - self.left_shift_flags[index].clone() - } - - /// Returns the flag for when the stack item at the specified depth shifts right. - #[inline(always)] - pub fn right_shift_at(&self, index: usize) -> E { - self.right_shift_flags[index].clone() - } - - /// Returns the flag when the stack operation shifts the stack to the right. - /// Degree: 6 - #[inline(always)] - pub fn right_shift(&self) -> E { - self.right_shift.clone() - } - - /// Returns the flag when the stack operation shifts the stack to the left. - /// - /// Note: `DYNCALL` still shifts the stack, but it is handled via the per-position - /// `left_shift_at` flags. The aggregate `left_shift` flag only gates the generic - /// helper/overflow constraints, which do not apply to `DYNCALL` because those - /// helper columns are reused for the context switch and the overflow pointer is - /// stored in decoder hasher state (h5), not in the usual helper/stack columns. - /// Degree: 5 - #[inline(always)] - pub fn left_shift(&self) -> E { - self.left_shift.clone() - } - - /// Returns the flag when the current operation is a control flow operation. - /// - /// Control flow operations are the only operations allowed to execute when outside a basic - /// block (i.e., when in_span = 0). This includes: - /// - Block starters: SPAN, JOIN, SPLIT, LOOP - /// - Block transitions: END, REPEAT, RESPAN, HALT - /// - Dynamic execution: DYN, DYNCALL - /// - Procedure calls: CALL, SYSCALL - /// - /// Used by the decoder constraint: `(1 - in_span) * (1 - control_flow) = 0` - /// - /// Degree: 3 - #[inline(always)] - pub fn control_flow(&self) -> E { - self.control_flow.clone() - } - - /// Returns the flag when the current operation is a u32 operation requiring range checks. - #[inline(always)] - #[allow(dead_code)] - pub fn u32_rc_op(&self) -> E { - self.u32_rc_op.clone() - } - - /// Returns the flag indicating whether the overflow stack contains values. - /// Degree: 2 - #[inline(always)] - pub fn overflow(&self) -> E { - self.overflow.clone() - } - - // TEST ACCESSORS - // ============================================================================================ - - /// Returns reference to degree 7 operation flags array (for testing). - #[cfg(test)] - pub fn degree7_op_flags(&self) -> &[E; NUM_DEGREE_7_OPS] { - &self.degree7_op_flags - } - - /// Returns reference to degree 6 operation flags array (for testing). - #[cfg(test)] - pub fn degree6_op_flags(&self) -> &[E; NUM_DEGREE_6_OPS] { - &self.degree6_op_flags - } - - /// Returns reference to degree 5 operation flags array (for testing). - #[cfg(test)] - pub fn degree5_op_flags(&self) -> &[E; NUM_DEGREE_5_OPS] { - &self.degree5_op_flags - } - - /// Returns reference to degree 4 operation flags array (for testing). - #[cfg(test)] - pub fn degree4_op_flags(&self) -> &[E; NUM_DEGREE_4_OPS] { - &self.degree4_op_flags - } } // INTERNAL HELPERS // ================================================================================================ +/// Pre-b0 intermediate flags captured before the final bit split. +/// +/// These are degree-6 products (all bits except b0) that pair adjacent opcodes +/// sharing all bits except the LSB. Used by composite shift flag computation. +struct PreB0Flags { + /// MOVUP{2..8} | MOVDN{2..8} paired flags, indexed 0..7 for widths 2..8. + movup_or_movdn: [E; 7], + /// SWAPW2 | SWAPW3 paired flag. + swapw2_or_swapw3: E, + /// ADVPOPW | EXPACC paired flag. + advpopw_or_expacc: E, +} + +/// Composite flag results: shift arrays, scalar flags, and control flow. +struct CompositeFlags { + no_shift: [E; NUM_STACK_IMPACT_FLAGS], + left_shift: [E; NUM_STACK_IMPACT_FLAGS], + right_shift: [E; NUM_STACK_IMPACT_FLAGS], + left_shift_scalar: E, + right_shift_scalar: E, + control_flow: E, + u32_rc_op: E, + overflow: E, +} + /// Maps opcode of an operation to the index in its respective degree flag array. pub const fn get_op_index(opcode: u8) -> usize { let opcode = opcode as usize; @@ -963,6 +1030,18 @@ pub const fn get_op_index(opcode: u8) -> usize { } } +/// Prefix-sums an array of per-depth deltas in place. +/// +/// `result[d] = deltas[0] + deltas[1] + ... + deltas[d]` +fn accumulate_depth_deltas( + mut deltas: [E; N], +) -> [E; N] { + for i in 1..N { + deltas[i] = deltas[i - 1].clone() + deltas[i].clone(); + } + deltas +} + // TEST HELPERS // ================================================================================================ @@ -973,45 +1052,29 @@ pub const fn get_op_index(opcode: u8) -> usize { /// - Op bits extra columns are computed for degree reduction /// - All other columns are zero #[cfg(test)] -pub fn generate_test_row(opcode: usize) -> crate::MainTraceRow { - use miden_core::{ONE, ZERO}; +pub fn generate_test_row(opcode: usize) -> crate::MainCols { + use miden_core::{Felt, ZERO}; - use crate::trace::{ - CHIPLETS_WIDTH, DECODER_TRACE_WIDTH, RANGE_CHECK_TRACE_WIDTH, STACK_TRACE_WIDTH, - decoder::OP_BITS_EXTRA_COLS_RANGE, - }; + use crate::trace::{TRACE_WIDTH, decoder::OP_BITS_EXTRA_COLS_RANGE}; - // Get op bits for this opcode let op_bits = get_op_bits(opcode); - // Initialize decoder array with zeros - let mut decoder = [ZERO; DECODER_TRACE_WIDTH]; - - // Set op bits (indices 1-7 in decoder, after addr column at index 0) + // Build a flat zeroed row, then set the decoder op bits via the col map. + let mut row = [ZERO; TRACE_WIDTH]; for (i, &bit) in op_bits.iter().enumerate() { - decoder[OP_BITS_RANGE.start + i] = bit; + row[OP_BITS_RANGE.start + crate::trace::DECODER_TRACE_OFFSET + i] = bit; } - // Compute and set op bits extra columns for degree reduction + // Compute and set op bits extra columns for degree reduction. let bit_6 = op_bits[6]; let bit_5 = op_bits[5]; let bit_4 = op_bits[4]; + row[OP_BITS_EXTRA_COLS_RANGE.start + crate::trace::DECODER_TRACE_OFFSET] = + bit_6 * (Felt::ONE - bit_5) * bit_4; + row[OP_BITS_EXTRA_COLS_RANGE.start + 1 + crate::trace::DECODER_TRACE_OFFSET] = bit_6 * bit_5; - // op_bit_extra[0] = bit_6 * (1 - bit_5) * bit_4 (degree 5 flag) - decoder[OP_BITS_EXTRA_COLS_RANGE.start] = bit_6 * (ONE - bit_5) * bit_4; - - // op_bit_extra[1] = bit_6 * bit_5 (degree 4 flag) - decoder[OP_BITS_EXTRA_COLS_RANGE.start + 1] = bit_6 * bit_5; - - crate::MainTraceRow { - clk: ZERO, - ctx: ZERO, - fn_hash: [ZERO; 4], - decoder, - stack: [ZERO; STACK_TRACE_WIDTH], - range: [ZERO; RANGE_CHECK_TRACE_WIDTH], - chiplets: [ZERO; CHIPLETS_WIDTH], - } + // Safety: MainCols is #[repr(C)] with the same layout as [Felt; TRACE_WIDTH]. + unsafe { core::mem::transmute::<[Felt; TRACE_WIDTH], crate::MainCols>(row) } } /// Returns a 7-bit array representation of an opcode. diff --git a/air/src/constraints/op_flags/tests.rs b/air/src/constraints/op_flags/tests.rs index 9261f244b3..b4a1e310d6 100644 --- a/air/src/constraints/op_flags/tests.rs +++ b/air/src/constraints/op_flags/tests.rs @@ -14,15 +14,14 @@ use super::{ NUM_DEGREE_4_OPS, NUM_DEGREE_5_OPS, NUM_DEGREE_6_OPS, NUM_DEGREE_7_OPS, OpFlags, generate_test_row, get_op_bits, get_op_index, }; -use crate::trace::decoder::IS_LOOP_FLAG_COL_IDX; - // HELPER // ================================================================================================ /// Creates OpFlags from an opcode using a generated test row. fn op_flags_for_opcode(opcode: usize) -> OpFlags { let row = generate_test_row(opcode); - OpFlags::new(&row) + let row_next = generate_test_row(0); // next row defaults to NOOP + OpFlags::new(&row.decoder, &row.stack, &row_next.decoder) } fn naive_flag(bits: &[Felt; 7], opcode: u8) -> Felt { @@ -186,7 +185,7 @@ fn degree_7_op_flags() { let expected_idx = get_op_index(opcode as u8); // Check degree 7 flags: exactly one should be ONE - for (i, &flag) in op_flags.degree7_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree7_op_flags.iter().enumerate() { if i == expected_idx { assert_eq!(flag, ONE, "Degree 7 flag {} should be ONE for opcode {}", i, opcode); } else { @@ -195,21 +194,21 @@ fn degree_7_op_flags() { } // All other degree flags should be ZERO - for (i, &flag) in op_flags.degree6_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree6_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 6 flag {} should be ZERO for degree 7 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree5_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree5_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 5 flag {} should be ZERO for degree 7 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree4_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree4_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 4 flag {} should be ZERO for degree 7 opcode {}", @@ -232,7 +231,7 @@ fn degree_6_op_flags() { let expected_idx = get_op_index(opcode as u8); // Check degree 6 flags - for (i, &flag) in op_flags.degree6_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree6_op_flags.iter().enumerate() { if i == expected_idx { assert_eq!(flag, ONE, "Degree 6 flag {} should be ONE for opcode {}", i, opcode); } else { @@ -241,21 +240,21 @@ fn degree_6_op_flags() { } // All other degree flags should be ZERO - for (i, &flag) in op_flags.degree7_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree7_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 7 flag {} should be ZERO for degree 6 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree5_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree5_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 5 flag {} should be ZERO for degree 6 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree4_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree4_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 4 flag {} should be ZERO for degree 6 opcode {}", @@ -277,7 +276,7 @@ fn degree_5_op_flags() { let expected_idx = get_op_index(opcode as u8); // Check degree 5 flags - for (i, &flag) in op_flags.degree5_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree5_op_flags.iter().enumerate() { if i == expected_idx { assert_eq!(flag, ONE, "Degree 5 flag {} should be ONE for opcode {}", i, opcode); } else { @@ -286,21 +285,21 @@ fn degree_5_op_flags() { } // All other degree flags should be ZERO - for (i, &flag) in op_flags.degree7_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree7_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 7 flag {} should be ZERO for degree 5 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree6_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree6_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 6 flag {} should be ZERO for degree 5 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree4_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree4_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 4 flag {} should be ZERO for degree 5 opcode {}", @@ -321,16 +320,16 @@ fn optimized_flags_match_naive() { let (deg7, deg6, deg5, deg4) = naive_op_flags(bits); let op_flags = op_flags_for_opcode(opcode); - for (i, &flag) in op_flags.degree7_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree7_op_flags.iter().enumerate() { assert_eq!(flag, deg7[i], "degree7 flag mismatch at index {}", i); } - for (i, &flag) in op_flags.degree6_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree6_op_flags.iter().enumerate() { assert_eq!(flag, deg6[i], "degree6 flag mismatch at index {}", i); } - for (i, &flag) in op_flags.degree5_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree5_op_flags.iter().enumerate() { assert_eq!(flag, deg5[i], "degree5 flag mismatch at index {}", i); } - for (i, &flag) in op_flags.degree4_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree4_op_flags.iter().enumerate() { assert_eq!(flag, deg4[i], "degree4 flag mismatch at index {}", i); } @@ -356,7 +355,7 @@ fn degree_4_op_flags() { let expected_idx = get_op_index(opcode as u8); // Check degree 4 flags - for (i, &flag) in op_flags.degree4_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree4_op_flags.iter().enumerate() { if i == expected_idx { assert_eq!(flag, ONE, "Degree 4 flag {} should be ONE for opcode {}", i, opcode); } else { @@ -365,21 +364,21 @@ fn degree_4_op_flags() { } // All other degree flags should be ZERO - for (i, &flag) in op_flags.degree7_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree7_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 7 flag {} should be ZERO for degree 4 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree6_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree6_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 6 flag {} should be ZERO for degree 4 opcode {}", i, opcode ); } - for (i, &flag) in op_flags.degree5_op_flags().iter().enumerate() { + for (i, &flag) in op_flags.degree5_op_flags.iter().enumerate() { assert_eq!( flag, ZERO, "Degree 5 flag {} should be ZERO for degree 4 opcode {}", @@ -550,8 +549,9 @@ fn composite_end_flags() { // END with loop flag: left shift (need to modify the row) let mut row = generate_test_row(opcodes::END.into()); - row.decoder[IS_LOOP_FLAG_COL_IDX] = ONE; - let op_flags_loop = OpFlags::new(&row); + row.decoder.hasher_state[5] = ONE; // is_loop flag + let row_next = generate_test_row(0); + let op_flags_loop: OpFlags = OpFlags::new(&row.decoder, &row.stack, &row_next.decoder); for i in 0..16 { assert_eq!( @@ -669,7 +669,7 @@ fn u32_rc_op_flag() { for op in u32_ops { let op_flags = op_flags_for_opcode(op.op_code().into()); - assert_eq!(op_flags.u32_rc_op(), ONE, "u32_rc_op should be ONE for {:?}", op); + assert_eq!(op_flags.u32_rc_op, ONE, "u32_rc_op should be ONE for {:?}", op); } // Non-u32 operations @@ -681,6 +681,6 @@ fn u32_rc_op_flag() { for op in non_u32_ops { let op_flags = op_flags_for_opcode(op.op_code().into()); - assert_eq!(op_flags.u32_rc_op(), ZERO, "u32_rc_op should be ZERO for {:?}", op); + assert_eq!(op_flags.u32_rc_op, ZERO, "u32_rc_op should be ZERO for {:?}", op); } } diff --git a/air/src/constraints/public_inputs.rs b/air/src/constraints/public_inputs.rs index 47f21c9beb..ebc2ffc2c8 100644 --- a/air/src/constraints/public_inputs.rs +++ b/air/src/constraints/public_inputs.rs @@ -4,12 +4,9 @@ //! - First row: stack[0..16] == stack_inputs[0..16] //! - Last row: stack[0..16] == stack_outputs[0..16] -use miden_crypto::stark::air::{AirBuilder, LiftedAirBuilder}; +use miden_crypto::stark::air::AirBuilder; -use crate::{ - MainTraceRow, - constraints::tagging::{TaggingAirBuilderExt, ids::TAG_PUBLIC_INPUTS_BASE}, -}; +use crate::{MainCols, MidenAirBuilder}; // CONSTANTS // ================================================================================================ @@ -20,12 +17,6 @@ const STACK_DEPTH: usize = 16; /// (stack_inputs + stack_outputs + pc_transcript_state). const TAIL_LEN: usize = STACK_DEPTH + STACK_DEPTH + 4; -// TAGGING CONSTANTS -// ================================================================================================ - -const STACK_INPUT_NAMESPACE: &str = "public_inputs.stack_input"; -const STACK_OUTPUT_NAMESPACE: &str = "public_inputs.stack_output"; - // ENTRY POINTS // ================================================================================================ @@ -33,9 +24,9 @@ const STACK_OUTPUT_NAMESPACE: &str = "public_inputs.stack_output"; /// /// - First row: `stack[i] == stack_inputs[i]` for i in 0..16 /// - Last row: `stack[i] == stack_outputs[i]` for i in 0..16 -pub fn enforce_main(builder: &mut AB, local: &MainTraceRow) +pub fn enforce_main(builder: &mut AB, local: &MainCols) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { // Copy public values into local arrays to release the immutable borrow on builder. let pv = builder.public_values(); @@ -46,27 +37,20 @@ where core::array::from_fn(|i| pv[n - TAIL_LEN + STACK_DEPTH + i]); // First row: stack[i] == stack_inputs[i] - let input_ids: [usize; STACK_DEPTH] = core::array::from_fn(|i| TAG_PUBLIC_INPUTS_BASE + i); - builder.tagged_list(input_ids, STACK_INPUT_NAMESPACE, |builder| { - builder - .when_first_row() - .assert_zeros(core::array::from_fn::<_, STACK_DEPTH, _>(|i| { - let stack_i: AB::Expr = local.stack[i].clone().into(); - let pv_i: AB::Expr = si[i].into(); - stack_i - pv_i - })); - }); + { + let builder = &mut builder.when_first_row(); + #[allow(clippy::needless_range_loop)] + for i in 0..STACK_DEPTH { + builder.assert_eq(local.stack.get(i), si[i]); + } + } // Last row: stack[i] == stack_outputs[i] - let output_ids: [usize; STACK_DEPTH] = - core::array::from_fn(|i| TAG_PUBLIC_INPUTS_BASE + STACK_DEPTH + i); - builder.tagged_list(output_ids, STACK_OUTPUT_NAMESPACE, |builder| { - builder - .when_last_row() - .assert_zeros(core::array::from_fn::<_, STACK_DEPTH, _>(|i| { - let stack_i: AB::Expr = local.stack[i].clone().into(); - let pv_i: AB::Expr = so[i].into(); - stack_i - pv_i - })); - }); + { + let builder = &mut builder.when_last_row(); + #[allow(clippy::needless_range_loop)] + for i in 0..STACK_DEPTH { + builder.assert_eq(local.stack.get(i), so[i]); + } + } } diff --git a/air/src/constraints/range/bus.rs b/air/src/constraints/range/bus.rs index 07f4e6dcb6..88b625f2db 100644 --- a/air/src/constraints/range/bus.rs +++ b/air/src/constraints/range/bus.rs @@ -13,39 +13,14 @@ //! Where requests come from stack (4 lookups) and memory (2 lookups), and //! responses come from the range table (V column with multiplicity). -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{ExtensionBuilder, LiftedAirBuilder, WindowAccess}; +use miden_crypto::stark::air::{ExtensionBuilder, WindowAccess}; use crate::{ - MainTraceRow, - constraints::tagging::{TaggingAirBuilderExt, ids::TAG_RANGE_BUS_BASE}, - trace::{ - CHIPLET_S0_COL_IDX, CHIPLET_S1_COL_IDX, CHIPLET_S2_COL_IDX, CHIPLETS_OFFSET, - RANGE_CHECK_TRACE_OFFSET, chiplets, decoder, range, - }, + MainCols, MidenAirBuilder, + constraints::{chiplets::selectors::ChipletSelectors, op_flags::OpFlags}, + trace::{Challenges, bus_types::RANGE_CHECK_BUS, range}, }; -// CONSTANTS -// ================================================================================================ - -// --- SLICE-RELATIVE INDICES --------------------------------------------------------------------- -const STACK_LOOKUP_BASE: usize = decoder::USER_OP_HELPERS_OFFSET; -const OP_BIT_4_COL_IDX: usize = decoder::OP_BITS_RANGE.start + 4; -const OP_BIT_5_COL_IDX: usize = decoder::OP_BITS_RANGE.start + 5; -const OP_BIT_6_COL_IDX: usize = decoder::OP_BITS_RANGE.start + 6; -const CHIPLET_S0_IDX: usize = CHIPLET_S0_COL_IDX - CHIPLETS_OFFSET; -const CHIPLET_S1_IDX: usize = CHIPLET_S1_COL_IDX - CHIPLETS_OFFSET; -const CHIPLET_S2_IDX: usize = CHIPLET_S2_COL_IDX - CHIPLETS_OFFSET; -const MEMORY_D0_IDX: usize = chiplets::MEMORY_D0_COL_IDX - CHIPLETS_OFFSET; -const MEMORY_D1_IDX: usize = chiplets::MEMORY_D1_COL_IDX - CHIPLETS_OFFSET; -const RANGE_M_COL_IDX: usize = range::M_COL_IDX - RANGE_CHECK_TRACE_OFFSET; -const RANGE_V_COL_IDX: usize = range::V_COL_IDX - RANGE_CHECK_TRACE_OFFSET; - -// TAGGING CONSTANTS -// ================================================================================================ - -const RANGE_BUS_NAME: &str = "range.bus.transition"; - // ENTRY POINTS // ================================================================================================ @@ -64,9 +39,14 @@ const RANGE_BUS_NAME: &str = "range.bus.transition"; /// - Stack lookups (4): decoder helper columns (USER_OP_HELPERS_OFFSET..+4) /// - Memory lookups (2): memory delta limbs (MEMORY_D0, MEMORY_D1) /// - Range response: range V column with multiplicity range M column -pub fn enforce_bus(builder: &mut AB, local: &MainTraceRow) -where - AB: LiftedAirBuilder, +pub fn enforce_bus( + builder: &mut AB, + local: &MainCols, + op_flags: &OpFlags, + challenges: &Challenges, + selectors: &ChipletSelectors, +) where + AB: MidenAirBuilder, { // In Miden VM, auxiliary trace is always present @@ -77,22 +57,22 @@ where let b_local = aux_local[range::B_RANGE_COL_IDX]; let b_next = aux_next[range::B_RANGE_COL_IDX]; - let challenges = builder.permutation_randomness(); - let alpha = challenges[0]; + let alpha = &challenges.bus_prefix[RANGE_CHECK_BUS]; // Denominators for LogUp - // Memory lookups: mv0 = alpha + chiplets[MEMORY_D0], mv1 = alpha + chiplets[MEMORY_D1] - let mv0: AB::ExprEF = alpha.into() + local.chiplets[MEMORY_D0_IDX].clone().into(); - let mv1: AB::ExprEF = alpha.into() + local.chiplets[MEMORY_D1_IDX].clone().into(); + let mem = local.memory(); + let mv0: AB::ExprEF = alpha.clone() + mem.d0.into(); + let mv1: AB::ExprEF = alpha.clone() + mem.d1.into(); // Stack lookups: sv0-sv3 = alpha + decoder helper columns - let sv0: AB::ExprEF = alpha.into() + local.decoder[STACK_LOOKUP_BASE].clone().into(); - let sv1: AB::ExprEF = alpha.into() + local.decoder[STACK_LOOKUP_BASE + 1].clone().into(); - let sv2: AB::ExprEF = alpha.into() + local.decoder[STACK_LOOKUP_BASE + 2].clone().into(); - let sv3: AB::ExprEF = alpha.into() + local.decoder[STACK_LOOKUP_BASE + 3].clone().into(); + let helpers = local.decoder.user_op_helpers(); + let sv0: AB::ExprEF = alpha.clone() + helpers[0].into(); + let sv1: AB::ExprEF = alpha.clone() + helpers[1].into(); + let sv2: AB::ExprEF = alpha.clone() + helpers[2].into(); + let sv3: AB::ExprEF = alpha.clone() + helpers[3].into(); // Range check value: alpha + range V column - let range_check: AB::ExprEF = alpha.into() + local.range[RANGE_V_COL_IDX].clone().into(); + let range_check: AB::ExprEF = alpha.clone() + local.range.value.into(); // Combined lookup denominators let memory_lookups = mv0.clone() * mv1.clone(); @@ -100,23 +80,17 @@ where let lookups = range_check.clone() * stack_lookups.clone() * memory_lookups.clone(); // Flags for conditional inclusion - // u32_rc_op = op_bit[6] * (1 - op_bit[5]) * (1 - op_bit[4]) - let not_4: AB::Expr = AB::Expr::ONE - local.decoder[OP_BIT_4_COL_IDX].clone().into(); - let not_5: AB::Expr = AB::Expr::ONE - local.decoder[OP_BIT_5_COL_IDX].clone().into(); - let u32_rc_op: AB::Expr = local.decoder[OP_BIT_6_COL_IDX].clone().into() * not_5 * not_4; + let u32_rc_op = op_flags.u32_rc_op(); let sflag_rc_mem = range_check.clone() * memory_lookups.clone() * u32_rc_op; - // chiplets_memory_flag = s0 * s1 * (1 - s2) - let s_0: AB::Expr = local.chiplets[CHIPLET_S0_IDX].clone().into(); - let s_1: AB::Expr = local.chiplets[CHIPLET_S1_IDX].clone().into(); - let s_2: AB::Expr = local.chiplets[CHIPLET_S2_IDX].clone().into(); - let chiplets_memory_flag: AB::Expr = s_0 * s_1 * (AB::Expr::ONE - s_2); + // chiplets_memory_flag = s0 * s1 * (1 - s2), i.e. memory is active + let chiplets_memory_flag = selectors.memory.is_active.clone(); let mflag_rc_stack = range_check * stack_lookups.clone() * chiplets_memory_flag; // LogUp transition constraint terms let b_next_term = b_next.into() * lookups.clone(); let b_term = b_local.into() * lookups; - let rc_term = stack_lookups * memory_lookups * local.range[RANGE_M_COL_IDX].clone().into(); + let rc_term = stack_lookups * memory_lookups * local.range.multiplicity.into(); // Stack lookup removal terms let s0_term = sflag_rc_mem.clone() * sv1.clone() * sv2.clone() * sv3.clone(); @@ -125,20 +99,12 @@ where let s3_term = sflag_rc_mem * sv0 * sv1 * sv2; // Memory lookup removal terms - let m0_term: AB::ExprEF = mflag_rc_stack.clone() * mv1; + let m0_term = mflag_rc_stack.clone() * mv1; let m1_term = mflag_rc_stack * mv0; // Main constraint: b_next * lookups = b * lookups + rc_term - s0_term - s1_term - s2_term - // s3_term - m0_term - m1_term - builder.tagged(TAG_RANGE_BUS_BASE, RANGE_BUS_NAME, |builder| { - builder.when_transition().assert_zero_ext( - b_next_term - b_term - rc_term - + s0_term - + s1_term - + s2_term - + s3_term - + m0_term - + m1_term, - ); - }); + builder.when_transition().assert_zero_ext( + b_next_term - b_term - rc_term + s0_term + s1_term + s2_term + s3_term + m0_term + m1_term, + ); } diff --git a/air/src/constraints/range/columns.rs b/air/src/constraints/range/columns.rs new file mode 100644 index 0000000000..57b6116194 --- /dev/null +++ b/air/src/constraints/range/columns.rs @@ -0,0 +1,8 @@ +/// Range check columns in the main execution trace (2 columns). +#[repr(C)] +pub struct RangeCols { + /// Multiplicity: how many times this value is range-checked. + pub multiplicity: T, + /// The value being range-checked. + pub value: T, +} diff --git a/air/src/constraints/range/mod.rs b/air/src/constraints/range/mod.rs index 3d8a684455..e490e71fd6 100644 --- a/air/src/constraints/range/mod.rs +++ b/air/src/constraints/range/mod.rs @@ -6,109 +6,47 @@ //! //! Bus constraints for the range checker are in `bus`. -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{AirBuilder, LiftedAirBuilder}; +pub mod columns; -use crate::{ - MainTraceRow, - constraints::tagging::{ - TaggingAirBuilderExt, - ids::{TAG_RANGE_MAIN_BASE, TAG_RANGE_MAIN_COUNT}, - }, - trace::{RANGE_CHECK_TRACE_OFFSET, range}, -}; +use miden_crypto::stark::air::AirBuilder; -pub mod bus; - -// CONSTANTS -// ================================================================================================ +use crate::{MainCols, MidenAirBuilder, constraints::constants::*}; -// --- SLICE-RELATIVE INDICES --------------------------------------------------------------------- -const RANGE_V_COL_IDX: usize = range::V_COL_IDX - RANGE_CHECK_TRACE_OFFSET; - -// TAGGING CONSTANTS -// ================================================================================================ - -const RANGE_MAIN_NAMES: [&str; TAG_RANGE_MAIN_COUNT] = - ["range.main.v.first_row", "range.main.v.last_row", "range.main.v.transition"]; +pub mod bus; // ENTRY POINTS // ================================================================================================ /// Enforces range checker main-trace constraints. -pub fn enforce_main( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: LiftedAirBuilder, -{ - enforce_range_boundary_constraints(builder, local); - enforce_range_transition_constraint(builder, local, next); -} - -/// Enforces boundary constraints for the range checker. -/// -/// - First row: V[0] = 0 (range checker starts at 0) -/// - Last row: V[last] = 65535 (range checker ends at 2^16 - 1) -pub fn enforce_range_boundary_constraints(builder: &mut AB, local: &MainTraceRow) +pub fn enforce_main(builder: &mut AB, local: &MainCols, next: &MainCols) where - AB: LiftedAirBuilder, -{ - let v = local.range[RANGE_V_COL_IDX].clone(); - - // First row: V[0] = 0 - builder.tagged(TAG_RANGE_MAIN_BASE, RANGE_MAIN_NAMES[0], |builder| { - builder.when_first_row().assert_zero(v.clone()); - }); - - // Last row: V[last] = 65535 (2^16 - 1) - let sixty_five_k = AB::Expr::from_u32(65535); - builder.tagged(TAG_RANGE_MAIN_BASE + 1, RANGE_MAIN_NAMES[1], |builder| { - builder.when_last_row().assert_eq(v, sixty_five_k); - }); -} - -/// Enforces the transition constraint for the range checker V column. -/// -/// The V column must change by one of: {0, 1, 3, 9, 27, 81, 243, 729, 2187} -/// - 0 allows V to stay constant during padding rows -/// - Others are powers of 3: {3^0, 3^1, 3^2, 3^3, 3^4, 3^5, 3^6, 3^7} -/// -/// This is a degree-9 constraint. -pub fn enforce_range_transition_constraint( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - let v = local.range[RANGE_V_COL_IDX].clone(); - let v_next = next.range[RANGE_V_COL_IDX].clone(); - let change_v = v_next - v; - - // Powers of 3: {1, 3, 9, 27, 81, 243, 729, 2187} - let one_expr = AB::Expr::ONE; - let three = AB::Expr::from_u16(3); - let nine = AB::Expr::from_u16(9); - let twenty_seven = AB::Expr::from_u16(27); - let eighty_one = AB::Expr::from_u16(81); - let two_forty_three = AB::Expr::from_u16(243); - let seven_twenty_nine = AB::Expr::from_u16(729); - let two_one_eight_seven = AB::Expr::from_u16(2187); - - // Note: Extra factor of change_v allows V to stay constant (change_v = 0) during padding - builder.tagged(TAG_RANGE_MAIN_BASE + 2, RANGE_MAIN_NAMES[2], |builder| { + let v = local.range.value; + let v_next = next.range.value; + + // Range checker boundaries: V[0] = 0, V[last] = 2^16 - 1 + { + builder.when_first_row().assert_zero(v); + builder.when_last_row().assert_eq(v, TWO_POW_16_MINUS_1); + } + + // Transition constraint for the V column (degree 9). + // V must change by one of: {0, 1, 3, 9, 27, 81, 243, 729, 2187} + // - 0 allows V to stay constant during padding rows + // - Others are powers of 3: {3^0, 3^1, 3^2, 3^3, 3^4, 3^5, 3^6, 3^7} + { + let change_v = v_next - v; builder.when_transition().assert_zero( change_v.clone() - * (change_v.clone() - one_expr) - * (change_v.clone() - three) - * (change_v.clone() - nine) - * (change_v.clone() - twenty_seven) - * (change_v.clone() - eighty_one) - * (change_v.clone() - two_forty_three) - * (change_v.clone() - seven_twenty_nine) - * (change_v - two_one_eight_seven), + * (change_v.clone() - F_1) + * (change_v.clone() - F_3) + * (change_v.clone() - F_9) + * (change_v.clone() - F_27) + * (change_v.clone() - F_81) + * (change_v.clone() - F_243) + * (change_v.clone() - F_729) + * (change_v - F_2187), ); - }); + } } diff --git a/air/src/constraints/stack/bus.rs b/air/src/constraints/stack/bus.rs index f22d8ddb44..6d4bb34da8 100644 --- a/air/src/constraints/stack/bus.rs +++ b/air/src/constraints/stack/bus.rs @@ -17,27 +17,14 @@ //! Each row in the overflow table is encoded as: //! `alpha + beta^0 * clk + beta^1 * val + beta^2 * prev` -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{ExtensionBuilder, LiftedAirBuilder, WindowAccess}; +use miden_crypto::stark::air::{ExtensionBuilder, WindowAccess}; use crate::{ - MainTraceRow, - constraints::{ - bus::indices::P1_STACK, - op_flags::OpFlags, - tagging::{TaggingAirBuilderExt, ids::TAG_STACK_OVERFLOW_BUS_BASE}, - }, - trace::{ - Challenges, - decoder::HASHER_STATE_RANGE, - stack::{B0_COL_IDX, B1_COL_IDX, H0_COL_IDX}, - }, + MainCols, MidenAirBuilder, + constraints::{bus::indices::P1_STACK, constants::F_16, op_flags::OpFlags, utils::BoolNot}, + trace::{Challenges, bus_types::STACK_OVERFLOW_TABLE}, }; -/// Tag ID and namespace for the stack overflow bus transition constraint. -const STACK_OVERFLOW_BUS_ID: usize = TAG_STACK_OVERFLOW_BUS_BASE; -const STACK_OVERFLOW_BUS_NAME: &str = "stack.overflow.bus.transition"; - // ENTRY POINTS // ================================================================================================ @@ -48,12 +35,12 @@ const STACK_OVERFLOW_BUS_NAME: &str = "stack.overflow.bus.transition"; /// - Removing rows when (left_shift OR dyncall) AND overflow is non-empty pub fn enforce_bus( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, challenges: &Challenges, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { // Auxiliary trace must be present. @@ -65,8 +52,6 @@ pub fn enforce_bus( (aux_local[P1_STACK], aux_next[P1_STACK]) }; - let one_ef = AB::ExprEF::ONE; - // ============================================================================================ // TRANSITION CONSTRAINT // ============================================================================================ @@ -76,25 +61,24 @@ pub fn enforce_bus( // ------------------------------------------------------------------------- // Current row values - let clk: AB::Expr = local.clk.clone().into(); - let s15: AB::Expr = local.stack[15].clone().into(); - let b0: AB::Expr = local.stack[B0_COL_IDX].clone().into(); - let b1: AB::Expr = local.stack[B1_COL_IDX].clone().into(); - let h0: AB::Expr = local.stack[H0_COL_IDX].clone().into(); + let clk = local.system.clk; + let s15 = local.stack.get(15); + let b0 = local.stack.b0; + let b1 = local.stack.b1; + let h0 = local.stack.h0; // Next row values (needed for removal) - let s15_next: AB::Expr = next.stack[15].clone().into(); - let b1_next: AB::Expr = next.stack[B1_COL_IDX].clone().into(); + let s15_next = next.stack.get(15); + let b1_next = next.stack.b1; // Hasher state element 5, used by DYNCALL to store the new overflow table pointer. - let hasher_state_5: AB::Expr = local.decoder[HASHER_STATE_RANGE.start + 5].clone().into(); + let hasher_state_5 = local.decoder.hasher_state[5]; // ------------------------------------------------------------------------- // Overflow condition: (b0 - 16) * h0 = 1 when overflow is non-empty // ------------------------------------------------------------------------- - let sixteen = AB::Expr::from_u16(16); - let is_non_empty_overflow: AB::Expr = (b0 - sixteen) * h0; + let is_non_empty_overflow: AB::Expr = (b0 - F_16) * h0; // ------------------------------------------------------------------------- // Operation flags @@ -109,21 +93,22 @@ pub fn enforce_bus( // ------------------------------------------------------------------------- // Response row value (adding to table during right_shift): - let response_row = challenges.encode([clk.clone(), s15.clone(), b1.clone()]); + let response_row = challenges.encode(STACK_OVERFLOW_TABLE, [clk.into(), s15.into(), b1.into()]); // Request row value for left_shift (removing from table): - let request_row_left = challenges.encode([b1.clone(), s15_next.clone(), b1_next.clone()]); + let request_row_left = + challenges.encode(STACK_OVERFLOW_TABLE, [b1.into(), s15_next.into(), b1_next.into()]); // Request row value for dyncall (removing from table): - let request_row_dyncall = - challenges.encode([b1.clone(), s15_next.clone(), hasher_state_5.clone()]); + let request_row_dyncall = challenges + .encode(STACK_OVERFLOW_TABLE, [b1.into(), s15_next.into(), hasher_state_5.into()]); // ------------------------------------------------------------------------- // Compute response and request terms // ------------------------------------------------------------------------- // Response: right_shift * response_row + (1 - right_shift) - let response: AB::ExprEF = response_row * right_shift.clone() + (one_ef.clone() - right_shift); + let response: AB::ExprEF = response_row * right_shift.clone() + right_shift.not(); // Request flags let left_flag: AB::Expr = left_shift * is_non_empty_overflow.clone(); @@ -133,7 +118,7 @@ pub fn enforce_bus( // Request: left_flag * left_value + dyncall_flag * dyncall_value + (1 - sum(flags)) let request: AB::ExprEF = request_row_left * left_flag.clone() + request_row_dyncall * dyncall_flag.clone() - + (one_ef.clone() - request_flag_sum); + + request_flag_sum.not(); // ------------------------------------------------------------------------- // Main running product constraint @@ -142,7 +127,5 @@ pub fn enforce_bus( let lhs = p1_next.into() * request; let rhs = p1_local.into() * response; - builder.tagged(STACK_OVERFLOW_BUS_ID, STACK_OVERFLOW_BUS_NAME, |builder| { - builder.when_transition().assert_zero_ext(lhs - rhs); - }); + builder.when_transition().assert_eq_ext(lhs, rhs); } diff --git a/air/src/constraints/stack/columns.rs b/air/src/constraints/stack/columns.rs new file mode 100644 index 0000000000..2a9678541d --- /dev/null +++ b/air/src/constraints/stack/columns.rs @@ -0,0 +1,28 @@ +use miden_core::program::MIN_STACK_DEPTH; + +/// Stack columns in the main execution trace (19 columns). +#[repr(C)] +pub struct StackCols { + /// Top 16 stack elements s0-s15. + pub(crate) top: [T; MIN_STACK_DEPTH], + /// Stack depth. + pub b0: T, + /// Overflow table parent address. + pub b1: T, + /// Helper: 1/(b0 - 16) when b0 != 16, else 0. + pub h0: T, +} + +impl StackCols { + /// Returns the stack element at position `idx` (0 = top of stack). + pub fn get(&self, idx: usize) -> T { + self.top[idx] + } +} + +impl StackCols { + /// Returns a slice of stack elements for the given range. + pub fn elements(&self, range: impl core::slice::SliceIndex<[T], Output = [T]>) -> &[T] { + &self.top[range] + } +} diff --git a/air/src/constraints/stack/crypto.rs b/air/src/constraints/stack/crypto.rs new file mode 100644 index 0000000000..a7c517b06f --- /dev/null +++ b/air/src/constraints/stack/crypto.rs @@ -0,0 +1,466 @@ +//! Crypto operation constraints. +//! +//! This module enforces the non-bus stack constraints for four crypto-related operations: +//! +//! - **CRYPTOSTREAM**: Encrypts memory words via XOR (i.e. addition in the prime field) with the +//! Poseidon2 sponge rate. Constraints here enforce pointer advancement and state stability; the +//! actual memory I/O and XOR happen via the chiplet bus (constrained elsewhere). +//! +//! - **HORNERBASE**: Evaluates a polynomial with base-field coefficients at an extension-field +//! point, processing 8 coefficients per row via Horner's method. Used during STARK verification +//! for polynomial commitment checks. +//! +//! - **HORNEREXT**: Same as HORNERBASE but for polynomials with extension-field coefficients, +//! processing 4 coefficient pairs per row. +//! +//! - **FRIE2F4**: Performs FRI layer folding, combining 4 extension-field query evaluations into 1, +//! and verifying the previous layer's folding was correct. + +use miden_core::{Felt, field::PrimeCharacteristicRing}; +use miden_crypto::stark::air::AirBuilder; + +use crate::{ + MainCols, MidenAirBuilder, + constraints::{ + constants::{F_3, F_4, F_8}, + ext_field::{QuadFeltAirBuilder, QuadFeltExpr}, + op_flags::OpFlags, + }, +}; + +// Fourth root of unity inverses (for FRI ext2fold4). +// tau = g^((p-1)/4) where p is the Goldilocks prime. +const TAU_INV: Felt = Felt::new(18446462594437873665); +const TAU2_INV: Felt = Felt::new(18446744069414584320); +const TAU3_INV: Felt = Felt::new(281474976710656); + +// ENTRY POINTS +// ================================================================================================ + +/// Enforces crypto operation constraints. +pub fn enforce_main( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, +) where + AB: MidenAirBuilder, +{ + enforce_cryptostream_constraints(builder, local, next, op_flags); + enforce_hornerbase_constraints(builder, local, next, op_flags); + enforce_hornerext_constraints(builder, local, next, op_flags); + enforce_frie2f4_constraints(builder, local, next, op_flags); +} + +// CONSTRAINT HELPERS +// ================================================================================================ + +/// CRYPTOSTREAM: encrypts two memory words via XOR with the Poseidon2 sponge rate. +/// +/// The top 8 stack elements (rate/ciphertext) are updated by the chiplet bus, not +/// constrained here. These constraints enforce only: +/// - Capacity elements (s[8..12]) are preserved. +/// - Source and destination pointers (s[12], s[13]) advance by 8 (two words). +/// - Padding elements (s[14..16]) are preserved. +/// +/// Stack layout: +/// s[0..8] rate / ciphertext (updated via bus, unconstrained here) +/// s[8..12] capacity (preserved) +/// s[12] source pointer (incremented by 8) +/// s[13] destination pointer (incremented by 8) +/// s[14..16] padding (preserved) +fn enforce_cryptostream_constraints( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, +) where + AB: MidenAirBuilder, +{ + let gate = builder.is_transition() * op_flags.cryptostream(); + let builder = &mut builder.when(gate); + + let s = &local.stack.top; + let s_next = &next.stack.top; + + // Capacity preserved. + builder.assert_eq(s_next[8], s[8]); + builder.assert_eq(s_next[9], s[9]); + builder.assert_eq(s_next[10], s[10]); + builder.assert_eq(s_next[11], s[11]); + + // Pointers advance by 8 (one memory word = 4 elements, two words per step). + builder.assert_eq(s_next[12], s[12].into() + F_8); + builder.assert_eq(s_next[13], s[13].into() + F_8); + + // Padding preserved. + builder.assert_eq(s_next[14], s[14]); + builder.assert_eq(s_next[15], s[15]); +} + +/// HORNERBASE: degree-7 polynomial evaluation over the quadratic extension field. +/// +/// Evaluates 8 base-field coefficients at an extension-field point α using Horner's +/// method, split into three stages for constraint degree reduction. The coefficients +/// are at s[0..8] with c0 being the highest-degree term (α⁷) and c7 the constant term. +/// +/// The prover supplies α and intermediate results (tmp0, tmp1) via helper registers. +/// Constraining the polynomial relations on these values forces correctness — no +/// separate validation of the helpers is needed. +/// +/// Stack layout: +/// s[0..8] c0..c7 base-field coefficients (c0 = α⁷ term, c7 = constant) +/// s[8..13] (unused) not affected by this operation +/// s[13] alpha_ptr memory address of α +/// s[14..16] (acc₀, acc₁) accumulator (quadratic extension element) +/// +/// Helper registers: +/// h[0..2] (α₀, α₁) evaluation point (read from alpha_ptr) +/// h[4..6] (tmp0₀, tmp0₁) first intermediate result +/// h[2..4] (tmp1₀, tmp1₁) second intermediate result +/// +/// Horner steps (expanded form; equivalent to (acc·α + c0)·α + c1, etc.): +/// tmp0 = acc · α² + (c0·α + c1) +/// tmp1 = tmp0 · α³ + (c2·α² + c3·α + c4) +/// acc' = tmp1 · α³ + (c5·α² + c6·α + c7) +fn enforce_hornerbase_constraints( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, +) where + AB: MidenAirBuilder, +{ + let horner_builder = &mut builder.when(op_flags.hornerbase()); + + let s = &local.stack.top; + let s_next = &next.stack.top; + let helpers = local.decoder.user_op_helpers(); + + // Stack registers preserved during transition. + { + let builder = &mut horner_builder.when_transition(); + for i in 0..14 { + builder.assert_eq(s_next[i], s[i]); + } + } + + // Extension element alpha and its powers. + let alpha: QuadFeltExpr = QuadFeltExpr::new(helpers[0], helpers[1]); + let alpha_sq = alpha.clone().square(); + let alpha_cubed = alpha_sq.clone() * alpha.clone(); + + // Nondeterministic intermediates from decoder helpers. + let tmp0 = QuadFeltExpr::new(helpers[4], helpers[5]); + let tmp1 = QuadFeltExpr::new(helpers[2], helpers[3]); + + // Accumulator. + let acc = QuadFeltExpr::new(s[14], s[15]); + let acc_next = QuadFeltExpr::new(s_next[14], s_next[15]); + + // Base-field coefficient accessor. + let c = |i: usize| -> AB::Expr { s[i].into() }; + + // tmp0 = acc · α² + (c0·α + c1) + let tmp0_expected = acc * alpha_sq.clone() + alpha.clone() * c(0) + c(1); + // tmp1 = tmp0 · α³ + (c2·α² + c3·α + c4) + let tmp1_expected = + tmp0.clone() * alpha_cubed.clone() + alpha_sq.clone() * c(2) + alpha.clone() * c(3) + c(4); + // acc' = tmp1 · α³ + (c5·α² + c6·α + c7) + let acc_expected = tmp1.clone() * alpha_cubed + alpha_sq * c(5) + alpha * c(6) + c(7); + + // Intermediate temporaries match expected polynomial evaluations. + horner_builder.assert_eq_quad(tmp0, tmp0_expected); + horner_builder.assert_eq_quad(tmp1, tmp1_expected); + // Accumulator updated to next Horner step during transition. + horner_builder.when_transition().assert_eq_quad(acc_next, acc_expected); +} + +/// HORNEREXT: degree-3 polynomial evaluation over the quadratic extension field. +/// +/// Same Horner structure as HORNERBASE but with extension-field coefficients: each +/// coefficient is a quadratic extension element (a pair of base-field elements on +/// the stack). Processes 4 extension coefficients per row instead of 8 base ones, +/// so only α² is needed (not α³). +/// +/// Stack layout: +/// s[0..2] (c₀,₀, c₀,₁) highest-degree coefficient (α³ term) +/// s[2..4] (c₁,₀, c₁,₁) α² term +/// s[4..6] (c₂,₀, c₂,₁) α¹ term +/// s[6..8] (c₃,₀, c₃,₁) constant term +/// s[8..13] (unused) not affected by this operation +/// s[13] alpha_ptr memory address of α (word: [α₀, α₁, k0, k1]) +/// s[14..16] (acc₀, acc₁) accumulator (quadratic extension element) +/// +/// Helper registers: +/// h[0..2] (α₀, α₁) evaluation point +/// h[2..4] k0, k1 padding from the α memory word (unused by constraints) +/// h[4..6] (tmp₀, tmp₁) intermediate result +/// +/// Horner steps: +/// tmp = acc · α² + (c0·α + c1) +/// acc' = tmp · α² + (c2·α + c3) +fn enforce_hornerext_constraints( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, +) where + AB: MidenAirBuilder, +{ + let horner_builder = &mut builder.when(op_flags.hornerext()); + + let s = &local.stack.top; + let s_next = &next.stack.top; + let helpers = local.decoder.user_op_helpers(); + + // Stack registers preserved during transition. + { + let builder = &mut horner_builder.when_transition(); + for i in 0..14 { + builder.assert_eq(s_next[i], s[i]); + } + } + + // Extension element alpha and its square. + let alpha: QuadFeltExpr = QuadFeltExpr::new(helpers[0], helpers[1]); + let alpha_sq = alpha.clone().square(); + + // Nondeterministic intermediate from decoder helpers. + let tmp = QuadFeltExpr::new(helpers[4], helpers[5]); + + // Accumulator. + let acc = QuadFeltExpr::new(s[14], s[15]); + let acc_next = QuadFeltExpr::new(s_next[14], s_next[15]); + + // Extension-field coefficient pairs from the stack. + let c0 = QuadFeltExpr::new(s[0], s[1]); + let c1 = QuadFeltExpr::new(s[2], s[3]); + let c2 = QuadFeltExpr::new(s[4], s[5]); + let c3 = QuadFeltExpr::new(s[6], s[7]); + + // tmp = acc · α² + (c0·α + c1) + let tmp_expected = acc * alpha_sq.clone() + alpha.clone() * c0 + c1; + // acc' = tmp · α² + (c2·α + c3) + let acc_expected = tmp.clone() * alpha_sq + alpha * c2 + c3; + + // Intermediate temporary matches expected polynomial evaluation. + horner_builder.assert_eq_quad(tmp, tmp_expected); + // Accumulator updated to next Horner step during transition. + horner_builder.when_transition().assert_eq_quad(acc_next, acc_expected); +} + +/// FRIE2F4: FRI layer folding — folds 4 extension-field query evaluations into 1. +/// +/// During FRI (Fast Reed-Solomon IOP) verification, the verifier reduces polynomial +/// degree by folding evaluations at related domain points. This operation folds 4 +/// query evaluations from a source domain of size 4N into 1 evaluation in the folded +/// domain of size N, using the verifier's random challenge α. +/// +/// The fold4 algorithm applies fold2 three times: +/// fold_mid0 = fold2(q0, q2, eval_point) — first conjugate pair +/// fold_mid1 = fold2(q1, q3, eval_point · τ⁻¹) — second pair (coset-shifted) +/// fold_result = fold2(fold_mid0, fold_mid1, eval_point_sq) +/// +/// where eval_point = α / domain_point, and domain_point = poe · tau_factor. +/// +/// The operation also verifies that the previous layer's folding was correct +/// (prev_eval must match the query value selected by the domain segment) and +/// advances state for the next layer (poe → poe⁴, layer pointer += 8). +/// +/// ## Register map +/// +/// Input stack (current row): +/// s[0..2] (q₀,₀, q₀,₁) query eval 0 ─┐ 4 extension-field evaluations +/// s[2..4] (q₂,₀, q₂,₁) query eval 2 │ (bit-reversed stack order; +/// s[4..6] (q₁,₀, q₁,₁) query eval 1 │ see "Bit-reversal" below) +/// s[6..8] (q₃,₀, q₃,₁) query eval 3 ─┘ +/// s[8] folded_pos query position in the folded domain +/// s[9] tree_index bit-reversed index: tree_index = 4·folded_pos + segment +/// s[10] poe power of initial domain generator +/// s[11..13] prev_eval previous layer's folded value (for consistency check) +/// s[13..15] (α₀, α₁) verifier challenge for this FRI layer +/// s[15] layer_ptr memory address of current FRI layer data +/// +/// Output stack (next row — first 10 positions are degree-reduction intermediates): +/// s'[0..2] fold_mid0 first fold2 intermediate result +/// s'[2..4] fold_mid1 second fold2 intermediate result +/// s'[4..8] seg_flag[0..3] domain segment flags (one-hot) +/// s'[8] poe_sq poe² +/// s'[9] tau_factor τ^(-segment) for this coset +/// s'[10] layer_ptr + 8 advanced layer pointer +/// s'[11] poe_fourth poe⁴ (for next FRI layer) +/// s'[12] folded_pos copied from input +/// s'[13..15] fold_result final fold4 output +/// +/// Helper registers (nondeterministic, provided by prover): +/// h[0..2] eval_point folding parameter = α / domain_point +/// h[2..4] eval_point_sq eval_point² (for the final fold2 round) +/// h[4] domain_point x = poe · tau_factor +/// h[5] domain_point_inv 1/x +/// +/// ## Bit-reversal +/// +/// Query values are stored on the stack in bit-reversed order (matching NTT +/// evaluation layout). The constraint names use natural order for fold4: +/// +/// stack position: [0,1] [2,3] [4,5] [6,7] +/// bit-reversed: qv0 qv1 qv2 qv3 +/// natural (fold4): q0 q2 q1 q3 +/// +/// fold4 pairs conjugate points: (q0, q2) and (q1, q3). +fn enforce_frie2f4_constraints( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, +) where + AB: MidenAirBuilder, +{ + let builder = &mut builder.when(op_flags.frie2f4()); + + let s = &local.stack.top; + let s_next = &next.stack.top; + let helpers = local.decoder.user_op_helpers(); + + // ========================================================================== + // Inputs (current row) + // ========================================================================== + // Query values in natural order for fold4 (see "Bit-reversal" in docstring). + let q0 = QuadFeltExpr::new(s[0], s[1]); + let q2 = QuadFeltExpr::new(s[2], s[3]); + let q1 = QuadFeltExpr::new(s[4], s[5]); + let q3 = QuadFeltExpr::new(s[6], s[7]); + + let folded_pos = s[8]; + let tree_index = s[9]; + let poe = s[10]; + let prev_eval = QuadFeltExpr::new(s[11], s[12]); + let alpha = QuadFeltExpr::new(s[13], s[14]); + let layer_ptr = s[15]; + + // ========================================================================== + // Phase 1: Domain segment identification + // ========================================================================== + // Determine which coset of the 4-element multiplicative subgroup this query + // belongs to. The segment flags are one-hot: exactly one is 1. From them we + // derive the segment index (for position decomposition) and the tau factor + // (the twiddle factor τ^(-segment) for computing the domain point). + + let seg_flag_0 = s_next[4]; + let seg_flag_1 = s_next[5]; + let seg_flag_2 = s_next[6]; + let seg_flag_3 = s_next[7]; + + // Segment flags must be binary and exactly one must be active. + builder.assert_bools([seg_flag_0, seg_flag_1, seg_flag_2, seg_flag_3]); + builder.assert_one(seg_flag_0 + seg_flag_1 + seg_flag_2 + seg_flag_3); + + // The tree_index encodes both the folded position and the domain segment: + // tree_index = 4 · folded_pos + segment_index + // Bit-reversal mapping from flags to segment index: + // flag0 → 0, flag1 → 2, flag2 → 1, flag3 → 3 + // so segment_index = 2·flag1 + flag2 + 3·flag3. + let folded_pos_next = s_next[12]; + let segment_index = seg_flag_1.into().double() + seg_flag_2 + seg_flag_3 * F_3; + builder.assert_eq(tree_index, folded_pos_next * F_4 + segment_index); + + // Each segment corresponds to a power of τ⁻¹ (the inverse 4th root of unity). + // The one-hot flags select the appropriate power. + let tau_factor = s_next[9]; + let expected_tau = + seg_flag_0 + seg_flag_1 * TAU_INV + seg_flag_2 * TAU2_INV + seg_flag_3 * TAU3_INV; + builder.assert_eq(tau_factor, expected_tau); + + // ========================================================================== + // Phase 2: Folding parameters + // ========================================================================== + // Compute the domain point and evaluation parameters needed for fold2. + // + // The domain point is x = poe · tau_factor, the evaluation point in the source + // domain. The fold2 function needs eval_point = α/x and eval_point_sq = (α/x)². + // + // The prover supplies these nondeterministically via helper registers. + // Constraining the relations here forces the prover to provide correct values. + + // domain_point = poe · tau_factor, with a verified inverse. + let domain_point = helpers[4]; + let domain_point_inv = helpers[5]; + builder.assert_eq(domain_point, poe * tau_factor); + builder.assert_one(domain_point * domain_point_inv); + + // eval_point = α / domain_point = α · domain_point_inv (in Fp2). + let eval_point: QuadFeltExpr = QuadFeltExpr::new(helpers[0], helpers[1]); + builder.assert_eq_quad(eval_point.clone(), alpha * domain_point_inv.into()); + + // eval_point_sq = eval_point² (needed for the final fold2 round). + let eval_point_sq: QuadFeltExpr = QuadFeltExpr::new(helpers[2], helpers[3]); + builder.assert_eq_quad(eval_point_sq.clone(), eval_point.clone().square()); + + // ========================================================================== + // Phase 3: Fold4 — core FRI folding + // ========================================================================== + // fold2 recovers the degree-halved polynomial from evaluations at conjugate + // domain points. If f(z) = g(z²) + z·h(z²), then: + // f(x) + f(-x) = 2·g(x²) (even part) + // f(x) - f(-x) = 2x·h(x²) (odd part) + // Combining: fold2(f(x), f(-x), α/x) = g(x²) + (α/x)·h(x²) + // + // Formula: fold2(a, b, ep) = ((a + b) + (a - b) · ep) / 2 + // Constraint form: 2 · result = (a + b) + (a - b) · ep (avoids division). + + // Returns 2 · fold2(a, b, ep) as a constraint expression. + let fold2_doubled = |a: QuadFeltExpr, + b: QuadFeltExpr, + ep: QuadFeltExpr| + -> QuadFeltExpr { (a.clone() + b.clone()) + (a - b) * ep }; + + // Intermediate fold results stored in the next row for degree reduction. + let fold_mid0 = QuadFeltExpr::new(s_next[0], s_next[1]); + let fold_mid1 = QuadFeltExpr::new(s_next[2], s_next[3]); + let fold_result = QuadFeltExpr::new(s_next[13], s_next[14]); + + // Three fold2 applications compose into fold4: + // fold_mid0 = fold2(q0, q2, eval_point) + // fold_mid1 = fold2(q1, q3, eval_point · τ⁻¹) + // fold_result = fold2(fold_mid0, fold_mid1, eval_point_sq) + + builder.assert_eq_quad(fold_mid0.clone().double(), fold2_doubled(q0, q2, eval_point.clone())); + + // The second conjugate pair lives on a coset shifted by τ, so the evaluation + // parameter is adjusted by τ⁻¹ to account for the coset offset. + let eval_point_coset = eval_point * AB::Expr::from(TAU_INV); + builder.assert_eq_quad(fold_mid1.clone().double(), fold2_doubled(q1, q3, eval_point_coset)); + + builder + .assert_eq_quad(fold_result.double(), fold2_doubled(fold_mid0, fold_mid1, eval_point_sq)); + + // ========================================================================== + // Phase 4: Cross-layer consistency and state updates + // ========================================================================== + + // The folded output from the previous FRI layer (prev_eval) must equal the + // query value at the position indicated by the domain segment. This links + // adjacent FRI layers: layer k's fold_result appears as one of layer k+1's + // four query inputs. + // + // The segment flags select which query value to compare. Uses raw stack + // positions because the query QuadFeltExprs were consumed by fold2 above. + // Mapping: seg_flag_0 → s[0,1]=q0, seg_flag_1 → s[4,5]=q1, + // seg_flag_2 → s[2,3]=q2, seg_flag_3 → s[6,7]=q3. + let selected_re = s[0] * seg_flag_0 + s[4] * seg_flag_1 + s[2] * seg_flag_2 + s[6] * seg_flag_3; + let selected_im = s[1] * seg_flag_0 + s[5] * seg_flag_1 + s[3] * seg_flag_2 + s[7] * seg_flag_3; + builder.assert_eq_quad(prev_eval, QuadFeltExpr::new(selected_re, selected_im)); + + // Domain generator powers for the next layer: poe → poe² → poe⁴. + // Split into two squarings to keep constraint degree low. + let poe_sq = s_next[8]; + let poe_fourth = s_next[11]; + builder.assert_eq(poe_sq, poe * poe); + builder.assert_eq(poe_fourth, poe_sq * poe_sq); + + // Advance the layer pointer and preserve the folded position. + let layer_ptr_next = s_next[10]; + builder.assert_eq(layer_ptr_next, layer_ptr + F_8); + builder.assert_eq(folded_pos_next, folded_pos); +} diff --git a/air/src/constraints/stack/crypto/mod.rs b/air/src/constraints/stack/crypto/mod.rs deleted file mode 100644 index 27a82fdbae..0000000000 --- a/air/src/constraints/stack/crypto/mod.rs +++ /dev/null @@ -1,577 +0,0 @@ -//! Crypto operation constraints. -//! -//! This module enforces crypto-related stack ops: -//! CRYPTOSTREAM, HORNERBASE, and HORNEREXT. - -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::LiftedAirBuilder; - -use crate::{ - MainTraceRow, - constraints::{ - ext_field::QuadFeltExpr, - op_flags::OpFlags, - tagging::{ - TagGroup, TaggingAirBuilderExt, ids::TAG_STACK_CRYPTO_BASE, - tagged_assert_zero_integrity, - }, - }, - trace::decoder::USER_OP_HELPERS_OFFSET, -}; - -// CONSTANTS -// ================================================================================================ - -/// Number of crypto op constraints. -#[allow(dead_code)] -pub const NUM_CONSTRAINTS: usize = 71; - -/// Base tag ID for crypto op constraints. -const STACK_CRYPTO_BASE_ID: usize = TAG_STACK_CRYPTO_BASE; - -/// Tag namespaces for crypto op constraints. -const STACK_CRYPTO_NAMES: [&str; NUM_CONSTRAINTS] = [ - // CRYPTOSTREAM (8) - "stack.crypto.cryptostream", - "stack.crypto.cryptostream", - "stack.crypto.cryptostream", - "stack.crypto.cryptostream", - "stack.crypto.cryptostream", - "stack.crypto.cryptostream", - "stack.crypto.cryptostream", - "stack.crypto.cryptostream", - // HORNERBASE (20) - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - "stack.crypto.hornerbase", - // HORNEREXT (18) - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - "stack.crypto.hornerext", - // FRIE2F4 (25) - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", - "stack.crypto.frie2f4", -]; - -/// Tag metadata for this constraint group. -const STACK_CRYPTO_TAGS: TagGroup = TagGroup { - base: STACK_CRYPTO_BASE_ID, - names: &STACK_CRYPTO_NAMES, -}; - -// ENTRY POINTS -// ================================================================================================ - -/// Enforces crypto operation constraints. -pub fn enforce_main( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, -) where - AB: LiftedAirBuilder, -{ - let mut idx = 0usize; - enforce_cryptostream_constraints(builder, local, next, op_flags, &mut idx); - enforce_hornerbase_constraints(builder, local, next, op_flags, &mut idx); - enforce_hornerext_constraints(builder, local, next, op_flags, &mut idx); - enforce_frie2f4_constraints(builder, local, next, op_flags, &mut idx); -} - -// CONSTRAINT HELPERS -// ================================================================================================ - -fn enforce_cryptostream_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, - idx: &mut usize, -) where - AB: LiftedAirBuilder, -{ - // CRYPTOSTREAM keeps the top of the stack stable except for the two counters - // that track the stream offset. Those counters advance by 8 (one word) per row. - // Everything is gated by the op flag, so the constraints are active only when - // CRYPTOSTREAM is executed. - let eight: AB::Expr = AB::Expr::from_u16(8); - let gate = op_flags.cryptostream(); - - assert_zero( - builder, - idx, - gate.clone() * (next.stack[8].clone().into() - local.stack[8].clone().into()), - ); - assert_zero( - builder, - idx, - gate.clone() * (next.stack[9].clone().into() - local.stack[9].clone().into()), - ); - assert_zero( - builder, - idx, - gate.clone() * (next.stack[10].clone().into() - local.stack[10].clone().into()), - ); - assert_zero( - builder, - idx, - gate.clone() * (next.stack[11].clone().into() - local.stack[11].clone().into()), - ); - assert_zero( - builder, - idx, - gate.clone() - * (next.stack[12].clone().into() - (local.stack[12].clone().into() + eight.clone())), - ); - assert_zero( - builder, - idx, - gate.clone() * (next.stack[13].clone().into() - (local.stack[13].clone().into() + eight)), - ); - assert_zero( - builder, - idx, - gate.clone() * (next.stack[14].clone().into() - local.stack[14].clone().into()), - ); - assert_zero( - builder, - idx, - gate * (next.stack[15].clone().into() - local.stack[15].clone().into()), - ); -} - -fn enforce_hornerbase_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, - idx: &mut usize, -) where - AB: LiftedAirBuilder, -{ - // HORNERBASE evaluates a degree-7 polynomial over the quadratic extension. - // The accumulator lives in stack[14..16] and is updated using helper values - // supplied (nondeterministically) through the decoder helper registers. We - // enforce the algebraic relationships that must hold between the helpers, the - // coefficients on the stack, and the accumulator update. These constraints - // also implicitly bind the helper values to the required power relations. - let gate = op_flags.hornerbase(); - - // The lower 14 stack registers remain unchanged during HORNERBASE. - for i in 0..14 { - assert_zero( - builder, - idx, - gate.clone() * (next.stack[i].clone().into() - local.stack[i].clone().into()), - ); - } - - // Decoder helper columns contain alpha components and intermediate temporaries. - // We read them starting at USER_OP_HELPERS_OFFSET to avoid hardcoding column indices. - let base = USER_OP_HELPERS_OFFSET; - let a0: AB::Expr = local.decoder[base].clone().into(); - let a1: AB::Expr = local.decoder[base + 1].clone().into(); - let tmp1_0: AB::Expr = local.decoder[base + 2].clone().into(); - let tmp1_1: AB::Expr = local.decoder[base + 3].clone().into(); - let tmp0_0: AB::Expr = local.decoder[base + 4].clone().into(); - let tmp0_1: AB::Expr = local.decoder[base + 5].clone().into(); - - let acc0: AB::Expr = local.stack[14].clone().into(); - let acc1: AB::Expr = local.stack[15].clone().into(); - let acc0_next: AB::Expr = next.stack[14].clone().into(); - let acc1_next: AB::Expr = next.stack[15].clone().into(); - - // Coefficients are read from the bottom of the stack. - let c: [AB::Expr; 8] = core::array::from_fn(|i| local.stack[i].clone().into()); - - // Quadratic extension view (Fp2 with u^2 = 7): - // - alpha = (a0, a1), acc = (acc0, acc1) - // - tmp0 = (tmp0_0, tmp0_1), tmp1 = (tmp1_0, tmp1_1) - // - c[0..7] are base-field scalars - // - // Horner form: - // tmp0 = acc * alpha^2 + (c0 * alpha + c1) - // tmp1 = tmp0 * alpha^3 + (c2 * alpha^2 + c3 * alpha + c4) - // acc' = tmp1 * alpha^3 + (c5 * alpha^2 + c6 * alpha + c7) - let alpha: QuadFeltExpr = QuadFeltExpr::new(&a0, &a1); - let alpha2 = alpha.clone().square(); - let alpha3 = alpha2.clone() * alpha.clone(); - let acc: QuadFeltExpr = QuadFeltExpr::new(&acc0, &acc1); - let acc_alpha2: QuadFeltExpr = acc * alpha2.clone(); - let tmp0: QuadFeltExpr = QuadFeltExpr::new(&tmp0_0, &tmp0_1); - let tmp0_alpha3: QuadFeltExpr = tmp0.clone() * alpha3.clone(); - let tmp1: QuadFeltExpr = QuadFeltExpr::new(&tmp1_0, &tmp1_1); - - // tmp0 = acc * alpha^2 + (c0 * alpha + c1) - let tmp0_expected: QuadFeltExpr = - acc_alpha2 + alpha.clone() * c[0].clone() + c[1].clone(); - let [tmp0_exp_0, tmp0_exp_1] = tmp0_expected.into_parts(); - - // tmp1 = tmp0 * alpha^3 + (c2 * alpha^2 + c3 * alpha + c4) - let tmp1_expected: QuadFeltExpr = - tmp0_alpha3 + alpha2.clone() * c[2].clone() + alpha.clone() * c[3].clone() + c[4].clone(); - let [tmp1_exp_0, tmp1_exp_1] = tmp1_expected.into_parts(); - - // acc' = tmp1 * alpha^3 + (alpha^2 * c5 + alpha * c6 + c7) - let acc_expected: QuadFeltExpr = - tmp1 * alpha3 + alpha2.clone() * c[5].clone() + alpha.clone() * c[6].clone() + c[7].clone(); - let [acc_exp_0, acc_exp_1] = acc_expected.into_parts(); - - assert_zero(builder, idx, gate.clone() * (tmp0_0 - tmp0_exp_0)); - assert_zero(builder, idx, gate.clone() * (tmp0_1 - tmp0_exp_1)); - assert_zero(builder, idx, gate.clone() * (tmp1_0 - tmp1_exp_0)); - assert_zero(builder, idx, gate.clone() * (tmp1_1 - tmp1_exp_1)); - assert_zero(builder, idx, gate.clone() * (acc0_next - acc_exp_0)); - assert_zero(builder, idx, gate * (acc1_next - acc_exp_1)); -} - -fn enforce_hornerext_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, - idx: &mut usize, -) where - AB: LiftedAirBuilder, -{ - // HORNEREXT evaluates a degree-3 polynomial over the quadratic extension with - // a smaller helper set. As with HORNERBASE, helper values are supplied via - // decoder columns, and the constraints below bind them to the required - // power relations and accumulator update. - let gate = op_flags.hornerext(); - - // The lower 14 stack registers are unchanged by HORNEREXT. - for i in 0..14 { - assert_zero( - builder, - idx, - gate.clone() * (next.stack[i].clone().into() - local.stack[i].clone().into()), - ); - } - - // Helper columns and accumulator values. - let base = USER_OP_HELPERS_OFFSET; - let a0: AB::Expr = local.decoder[base].clone().into(); - let a1: AB::Expr = local.decoder[base + 1].clone().into(); - let tmp0: AB::Expr = local.decoder[base + 4].clone().into(); - let tmp1: AB::Expr = local.decoder[base + 5].clone().into(); - - let acc0: AB::Expr = local.stack[14].clone().into(); - let acc1: AB::Expr = local.stack[15].clone().into(); - let acc0_next: AB::Expr = next.stack[14].clone().into(); - let acc1_next: AB::Expr = next.stack[15].clone().into(); - - // Coefficients live at the bottom of the stack. - let s: [AB::Expr; 8] = core::array::from_fn(|i| local.stack[i].clone().into()); - - // Quadratic extension view (Fp2 with u^2 = 7): - // - alpha = (a0, a1), acc = (acc0, acc1), tmp = (tmp0, tmp1) - // - extension coefficients use the stack pairs: c0 = (s0, s1), c1 = (s2, s3), c2 = (s4, s5), c3 - // = (s6, s7) - // - // Horner form: - // tmp = acc * alpha^2 + (c0 * alpha + c1) - // acc' = tmp * alpha^2 + (c2 * alpha + c3) - let alpha: QuadFeltExpr = QuadFeltExpr::new(&a0, &a1); - let alpha2 = alpha.clone().square(); - let acc: QuadFeltExpr = QuadFeltExpr::new(&acc0, &acc1); - let acc_alpha2: QuadFeltExpr = acc * alpha2.clone(); - let tmp: QuadFeltExpr = QuadFeltExpr::new(&tmp0, &tmp1); - let tmp_alpha2: QuadFeltExpr = tmp * alpha2; - - let c0 = QuadFeltExpr::new(&s[0], &s[1]); - let c1 = QuadFeltExpr::new(&s[2], &s[3]); - let c2 = QuadFeltExpr::new(&s[4], &s[5]); - let c3 = QuadFeltExpr::new(&s[6], &s[7]); - - // tmp = acc * alpha^2 + (c0 * alpha + c1) - let tmp_expected: QuadFeltExpr = acc_alpha2 + alpha.clone() * c0 + c1; - let [tmp_exp_0, tmp_exp_1] = tmp_expected.into_parts(); - - // acc' = tmp * alpha^2 + (c2 * alpha + c3) - let acc_expected: QuadFeltExpr = tmp_alpha2 + alpha * c2 + c3; - let [acc_exp_0, acc_exp_1] = acc_expected.into_parts(); - - assert_zero(builder, idx, gate.clone() * (tmp0 - tmp_exp_0)); - assert_zero(builder, idx, gate.clone() * (tmp1 - tmp_exp_1)); - assert_zero(builder, idx, gate.clone() * (acc0_next - acc_exp_0)); - assert_zero(builder, idx, gate * (acc1_next - acc_exp_1)); -} - -/// Enforces constraints for the FRI ext2fold4 operation. -/// -/// This operation folds 4 query values into a single value for the FRI protocol. -/// -/// Input stack: -/// [v0, v1, v2, v3, v4, v5, v6, v7, f_pos, p, poe, pe0, pe1, a0, a1, cptr] -/// -/// Output stack: -/// [t0_0, t0_1, t1_0, t1_1, f0, f1, f2, f3, poe^2, f_tau, cptr+8, poe^4, f_pos, ne0, ne1, eptr] -/// -/// Helper registers: [ev0, ev1, es0, es1, x, x_inv] -fn enforce_frie2f4_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, - idx: &mut usize, -) where - AB: LiftedAirBuilder, -{ - let gate = op_flags.frie2f4(); - - // --- read current state --- - let v0: AB::Expr = local.stack[0].clone().into(); - let v1: AB::Expr = local.stack[1].clone().into(); - let v2: AB::Expr = local.stack[2].clone().into(); - let v3: AB::Expr = local.stack[3].clone().into(); - let v4: AB::Expr = local.stack[4].clone().into(); - let v5: AB::Expr = local.stack[5].clone().into(); - let v6: AB::Expr = local.stack[6].clone().into(); - let v7: AB::Expr = local.stack[7].clone().into(); - let f_pos: AB::Expr = local.stack[8].clone().into(); - let p: AB::Expr = local.stack[9].clone().into(); - let poe: AB::Expr = local.stack[10].clone().into(); - let pe0: AB::Expr = local.stack[11].clone().into(); - let pe1: AB::Expr = local.stack[12].clone().into(); - let a0: AB::Expr = local.stack[13].clone().into(); - let a1: AB::Expr = local.stack[14].clone().into(); - let cptr: AB::Expr = local.stack[15].clone().into(); - - // --- read helper registers --- - let base = USER_OP_HELPERS_OFFSET; - let ev0: AB::Expr = local.decoder[base].clone().into(); - let ev1: AB::Expr = local.decoder[base + 1].clone().into(); - let es0: AB::Expr = local.decoder[base + 2].clone().into(); - let es1: AB::Expr = local.decoder[base + 3].clone().into(); - let x: AB::Expr = local.decoder[base + 4].clone().into(); - let x_inv: AB::Expr = local.decoder[base + 5].clone().into(); - - // --- read next state --- - let t0_0: AB::Expr = next.stack[0].clone().into(); - let t0_1: AB::Expr = next.stack[1].clone().into(); - let t1_0: AB::Expr = next.stack[2].clone().into(); - let t1_1: AB::Expr = next.stack[3].clone().into(); - let f0: AB::Expr = next.stack[4].clone().into(); - let f1: AB::Expr = next.stack[5].clone().into(); - let f2: AB::Expr = next.stack[6].clone().into(); - let f3: AB::Expr = next.stack[7].clone().into(); - let poe2: AB::Expr = next.stack[8].clone().into(); - let f_tau: AB::Expr = next.stack[9].clone().into(); - let cptr_next: AB::Expr = next.stack[10].clone().into(); - let poe4: AB::Expr = next.stack[11].clone().into(); - let f_pos_next: AB::Expr = next.stack[12].clone().into(); - let ne0: AB::Expr = next.stack[13].clone().into(); - let ne1: AB::Expr = next.stack[14].clone().into(); - - // --- constants --- - let two: AB::Expr = AB::Expr::from_u16(2); - let three: AB::Expr = AB::Expr::from_u16(3); - let eight: AB::Expr = AB::Expr::from_u16(8); - // tau^{-1}, tau^{-2}, tau^{-3} where tau is the 4th root of unity - let tau_inv: AB::Expr = AB::Expr::from_u64(18446462594437873665); - let tau2_inv: AB::Expr = AB::Expr::from_u64(18446744069414584320); - let tau3_inv: AB::Expr = AB::Expr::from_u64(281474976710656); - - // ======================================================================== - // Group 1: Domain flags are binary and exactly one is set (5 constraints) - // ======================================================================== - - // f0^2 = f0 - assert_zero(builder, idx, gate.clone() * (f0.clone() * f0.clone() - f0.clone())); - // f1^2 = f1 - assert_zero(builder, idx, gate.clone() * (f1.clone() * f1.clone() - f1.clone())); - // f2^2 = f2 - assert_zero(builder, idx, gate.clone() * (f2.clone() * f2.clone() - f2.clone())); - // f3^2 = f3 - assert_zero(builder, idx, gate.clone() * (f3.clone() * f3.clone() - f3.clone())); - // f0 + f1 + f2 + f3 = 1 - assert_zero( - builder, - idx, - gate.clone() * (f0.clone() + f1.clone() + f2.clone() + f3.clone() - AB::Expr::ONE), - ); - - // ======================================================================== - // Group 2: p = 4 * f_pos_next + d_seg_from_flags (1 constraint) - // ======================================================================== - // This single constraint binds p to both f_pos (output at next.stack[12]) and the - // domain segment flags. d_seg_from_flags uses the bit-reversal mapping: - // f0=1 (seg 0) -> d_seg=0, f1=1 (seg 1) -> d_seg=2, - // f2=1 (seg 2) -> d_seg=1, f3=1 (seg 3) -> d_seg=3 - // So: d_seg = 2*f1 + f2 + 3*f3, and p = 4*f_pos + d_seg. - let four: AB::Expr = AB::Expr::from_u16(4); - assert_zero( - builder, - idx, - gate.clone() - * (p - (four * f_pos_next.clone() - + two.clone() * f1.clone() - + f2.clone() - + three * f3.clone())), - ); - - // ======================================================================== - // Group 3: Tau factor from domain flags (1 constraint) - // ======================================================================== - // f_tau = f0*1 + f1*TAU_INV + f2*TAU2_INV + f3*TAU3_INV - assert_zero( - builder, - idx, - gate.clone() - * (f_tau.clone() - - (f0.clone() - + tau_inv.clone() * f1.clone() - + tau2_inv * f2.clone() - + tau3_inv * f3.clone())), - ); - - // ======================================================================== - // Group 4: x = poe * f_tau, x * x_inv = 1 (2 constraints) - // ======================================================================== - assert_zero(builder, idx, gate.clone() * (x.clone() - poe.clone() * f_tau)); - assert_zero(builder, idx, gate.clone() * (x * x_inv.clone() - AB::Expr::ONE)); - - // ======================================================================== - // Group 5: ev = alpha * x_inv (2 constraints) - // ======================================================================== - let alpha = QuadFeltExpr(a0, a1); - let ev = QuadFeltExpr(ev0, ev1); - let [c0, c1] = (ev.clone() - alpha * x_inv.clone()).into_parts(); - assert_zero(builder, idx, gate.clone() * c0); - assert_zero(builder, idx, gate.clone() * c1); - - // ======================================================================== - // Group 6: es = ev^2 in Fp2 (2 constraints) - // ======================================================================== - let es = QuadFeltExpr(es0, es1); - let [c0, c1] = (es.clone() - ev.clone().square()).into_parts(); - assert_zero(builder, idx, gate.clone() * c0); - assert_zero(builder, idx, gate.clone() * c1); - - // ======================================================================== - // Group 7: tmp0 = fold2(q0, q2, ev) (2 constraints) - // ======================================================================== - // fold2(a, b, ep) = ((a+b) + (a-b)*ep) / 2 - let q0 = QuadFeltExpr(v0.clone(), v1.clone()); - let q2 = QuadFeltExpr(v2.clone(), v3.clone()); - let tmp0 = QuadFeltExpr(t0_0.clone(), t0_1.clone()); - let [c0, c1] = - (tmp0.clone() * two.clone() - (q0.clone() + q2.clone()) - (q0 - q2) * ev.clone()) - .into_parts(); - assert_zero(builder, idx, gate.clone() * c0); - assert_zero(builder, idx, gate.clone() * c1); - - // ======================================================================== - // Group 8: tmp1 = fold2(q1, q3, ev * TAU_INV) (2 constraints) - // ======================================================================== - let q1 = QuadFeltExpr(v4.clone(), v5.clone()); - let q3 = QuadFeltExpr(v6.clone(), v7.clone()); - let tmp1 = QuadFeltExpr(t1_0.clone(), t1_1.clone()); - let ev_tau = ev * tau_inv.clone(); - let [c0, c1] = - (tmp1.clone() * two.clone() - (q1.clone() + q3.clone()) - (q1 - q3) * ev_tau).into_parts(); - assert_zero(builder, idx, gate.clone() * c0); - assert_zero(builder, idx, gate.clone() * c1); - - // ======================================================================== - // Group 9: folded = fold2(tmp0, tmp1, es) (2 constraints) - // ======================================================================== - let ne = QuadFeltExpr(ne0, ne1); - let [c0, c1] = - (ne * two.clone() - (tmp0.clone() + tmp1.clone()) - (tmp0 - tmp1) * es).into_parts(); - assert_zero(builder, idx, gate.clone() * c0); - assert_zero(builder, idx, gate.clone() * c1); - - // ======================================================================== - // Group 10: Consistency check -- pe = query_values[d_seg] (2 constraints) - // ======================================================================== - // d_seg is the bit-reversed coset index. The query_values are also in bit-reversed - // order, so indexing by d_seg directly gives the correct value. - // d_seg=0 -> f0=1 -> q[0]=(v0,v1) - // d_seg=1 -> f2=1 -> q[1]=(v2,v3) - // d_seg=2 -> f1=1 -> q[2]=(v4,v5) - // d_seg=3 -> f3=1 -> q[3]=(v6,v7) - assert_zero( - builder, - idx, - gate.clone() - * (pe0 - (v0 * f0.clone() + v4 * f1.clone() + v2 * f2.clone() + v6 * f3.clone())), - ); - assert_zero(builder, idx, gate.clone() * (pe1 - (v1 * f0 + v5 * f1 + v3 * f2 + v7 * f3))); - - // ======================================================================== - // Group 11: poe powers (2 constraints) - // ======================================================================== - // poe^2 = poe * poe - assert_zero(builder, idx, gate.clone() * (poe2.clone() - poe.clone() * poe)); - // poe^4 = poe^2 * poe^2 - assert_zero(builder, idx, gate.clone() * (poe4 - poe2.clone() * poe2)); - - // ======================================================================== - // Group 12: Pointer increment and position transfer (2 constraints) - // ======================================================================== - // cptr' = cptr + 8 - assert_zero(builder, idx, gate.clone() * (cptr_next - cptr - eight)); - // f_pos' = f_pos - assert_zero(builder, idx, gate * (f_pos_next - f_pos)); -} - -fn assert_zero(builder: &mut AB, idx: &mut usize, expr: AB::Expr) { - tagged_assert_zero_integrity(builder, &STACK_CRYPTO_TAGS, idx, expr); -} diff --git a/air/src/constraints/stack/general.rs b/air/src/constraints/stack/general.rs new file mode 100644 index 0000000000..408f426b82 --- /dev/null +++ b/air/src/constraints/stack/general.rs @@ -0,0 +1,89 @@ +//! General stack transition constraints. +//! +//! This module contains the general constraints that enforce how stack items transition +//! based on the operation type (no shift, left shift, right shift). +//! +//! ## Stack Transition Model +//! +//! The stack has 16 visible positions (0-15). For each operation, stack items can: +//! - **Stay in place** (no shift): item stays at same position +//! - **Shift left**: item moves to position i from position i+1 +//! - **Shift right**: item moves to position i from position i-1 +//! +//! ## Constraints +//! +//! 1. **Position 0**: Can receive from position 0 (no shift) or position 1 (left shift). Right +//! shift doesn't apply - position 0 gets a new value pushed. +//! +//! 2. **Positions 1-14**: Can receive from position i (no shift), i+1 (left shift), or i-1 (right +//! shift). +//! +//! 3. **Position 15**: Can receive from position 15 (no shift) or position 14 (right shift). Left +//! shift at position 15 is handled by overflow constraints (zeroing). +//! +//! 4. **Top binary**: Enforced by the specific op constraints that require it. + +use miden_crypto::stark::air::AirBuilder; + +use crate::{MainCols, MidenAirBuilder, constraints::op_flags::OpFlags}; + +// ENTRY POINTS +// ================================================================================================ + +/// Enforces all general stack transition constraints. +/// +/// This includes: +/// - 16 constraints for stack item transitions at each position +pub fn enforce_main( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, +) where + AB: MidenAirBuilder, +{ + // For each position i, the constraint ensures that the next value is consistent + // with the current value based on the shift flags: + // + // next[i] * flag_sum = no_shift[i] * current[i] + // + left_shift[i+1] * current[i+1] + // + right_shift[i-1] * current[i-1] + // + // where flag_sum is the sum of applicable flags for that position. + + // Position 0: no right shift (new value pushed instead) + // next[0] * flag_sum = no_shift[0] * current[0] + left_shift[1] * current[1] + { + let flag_sum = op_flags.no_shift_at(0) + op_flags.left_shift_at(1); + let expected = op_flags.no_shift_at(0) * local.stack.get(0).into() + + op_flags.left_shift_at(1) * local.stack.get(1).into(); + let actual = next.stack.get(0); + + builder.when_transition().assert_zero(actual * flag_sum - expected); + } + + // Positions 1-14: all three shift types possible. + for i in 1..15 { + let flag_sum = op_flags.no_shift_at(i) + + op_flags.left_shift_at(i + 1) + + op_flags.right_shift_at(i - 1); + + let expected = op_flags.no_shift_at(i) * local.stack.get(i).into() + + op_flags.left_shift_at(i + 1) * local.stack.get(i + 1).into() + + op_flags.right_shift_at(i - 1) * local.stack.get(i - 1).into(); + let actual = next.stack.get(i); + + builder.when_transition().assert_zero(actual * flag_sum - expected); + } + + // Position 15: no left shift (handled by overflow constraints) + // next[15] * flag_sum = no_shift[15] * current[15] + right_shift[14] * current[14] + { + let flag_sum = op_flags.no_shift_at(15) + op_flags.right_shift_at(14); + let expected = op_flags.no_shift_at(15) * local.stack.get(15).into() + + op_flags.right_shift_at(14) * local.stack.get(14).into(); + let actual = next.stack.get(15); + + builder.when_transition().assert_zero(actual * flag_sum - expected); + } +} diff --git a/air/src/constraints/stack/general/mod.rs b/air/src/constraints/stack/general/mod.rs deleted file mode 100644 index 28bc538f64..0000000000 --- a/air/src/constraints/stack/general/mod.rs +++ /dev/null @@ -1,133 +0,0 @@ -//! General stack transition constraints. -//! -//! This module contains the general constraints that enforce how stack items transition -//! based on the operation type (no shift, left shift, right shift). -//! -//! ## Stack Transition Model -//! -//! The stack has 16 visible positions (0-15). For each operation, stack items can: -//! - **Stay in place** (no shift): item stays at same position -//! - **Shift left**: item moves to position i from position i+1 -//! - **Shift right**: item moves to position i from position i-1 -//! -//! ## Constraints -//! -//! 1. **Position 0**: Can receive from position 0 (no shift) or position 1 (left shift). Right -//! shift doesn't apply - position 0 gets a new value pushed. -//! -//! 2. **Positions 1-14**: Can receive from position i (no shift), i+1 (left shift), or i-1 (right -//! shift). -//! -//! 3. **Position 15**: Can receive from position 15 (no shift) or position 14 (right shift). Left -//! shift at position 15 is handled by overflow constraints (zeroing). -//! -//! 4. **Top binary**: Enforced by the specific op constraints that require it. - -use miden_crypto::stark::air::{AirBuilder, LiftedAirBuilder}; - -use crate::{ - MainTraceRow, - constraints::{ - op_flags::OpFlags, - tagging::{ - TaggingAirBuilderExt, - ids::{TAG_STACK_GENERAL_BASE, TAG_STACK_GENERAL_COUNT}, - }, - }, -}; - -// CONSTANTS -// ================================================================================================ - -/// Number of general stack constraints. -/// 16 constraints for stack item transitions. -pub const NUM_CONSTRAINTS: usize = TAG_STACK_GENERAL_COUNT; - -/// Tag base ID for stack general constraints. -/// Tag namespaces for stack general constraints. -const STACK_GENERAL_NAMES: [&str; NUM_CONSTRAINTS] = [ - "stack.general.transition.0", - "stack.general.transition.1", - "stack.general.transition.2", - "stack.general.transition.3", - "stack.general.transition.4", - "stack.general.transition.5", - "stack.general.transition.6", - "stack.general.transition.7", - "stack.general.transition.8", - "stack.general.transition.9", - "stack.general.transition.10", - "stack.general.transition.11", - "stack.general.transition.12", - "stack.general.transition.13", - "stack.general.transition.14", - "stack.general.transition.15", -]; - -// ENTRY POINTS -// ================================================================================================ - -/// Enforces all general stack transition constraints. -/// -/// This includes: -/// - 16 constraints for stack item transitions at each position -pub fn enforce_main( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, -) where - AB: LiftedAirBuilder, -{ - // For each position i, the constraint ensures that the next value is consistent - // with the current value based on the shift flags: - // - // next[i] * flag_sum = no_shift[i] * current[i] - // + left_shift[i+1] * current[i+1] - // + right_shift[i-1] * current[i-1] - // - // where flag_sum is the sum of applicable flags for that position. - - // Position 0: no right shift (new value pushed instead) - // next[0] * flag_sum = no_shift[0] * current[0] + left_shift[1] * current[1] - { - let flag_sum = op_flags.no_shift_at(0) + op_flags.left_shift_at(1); - let expected = op_flags.no_shift_at(0) * local.stack[0].clone().into() - + op_flags.left_shift_at(1) * local.stack[1].clone().into(); - let actual: AB::Expr = next.stack[0].clone().into(); - - builder.tagged(TAG_STACK_GENERAL_BASE, STACK_GENERAL_NAMES[0], |builder| { - builder.when_transition().assert_zero(actual * flag_sum - expected); - }); - } - - // Positions 1-14: all three shift types possible. - for (i, &namespace) in STACK_GENERAL_NAMES.iter().enumerate().take(15).skip(1) { - let flag_sum = op_flags.no_shift_at(i) - + op_flags.left_shift_at(i + 1) - + op_flags.right_shift_at(i - 1); - - let expected = op_flags.no_shift_at(i) * local.stack[i].clone().into() - + op_flags.left_shift_at(i + 1) * local.stack[i + 1].clone().into() - + op_flags.right_shift_at(i - 1) * local.stack[i - 1].clone().into(); - let actual: AB::Expr = next.stack[i].clone().into(); - - let id = TAG_STACK_GENERAL_BASE + i; - builder.tagged(id, namespace, |builder| { - builder.when_transition().assert_zero(actual * flag_sum - expected); - }); - } - - // Position 15: no left shift (handled by overflow constraints) - // next[15] * flag_sum = no_shift[15] * current[15] + right_shift[14] * current[14] - { - let flag_sum = op_flags.no_shift_at(15) + op_flags.right_shift_at(14); - let expected = op_flags.no_shift_at(15) * local.stack[15].clone().into() - + op_flags.right_shift_at(14) * local.stack[14].clone().into(); - let actual: AB::Expr = next.stack[15].clone().into(); - - builder.tagged(TAG_STACK_GENERAL_BASE + 15, STACK_GENERAL_NAMES[15], |builder| { - builder.when_transition().assert_zero(actual * flag_sum - expected); - }); - } -} diff --git a/air/src/constraints/stack/mod.rs b/air/src/constraints/stack/mod.rs index d4fde5aee5..a07da51ab0 100644 --- a/air/src/constraints/stack/mod.rs +++ b/air/src/constraints/stack/mod.rs @@ -4,15 +4,14 @@ //! and stack overflow constraints. pub mod bus; +pub mod columns; pub mod crypto; pub mod general; pub mod ops; pub mod overflow; pub mod stack_arith; -use miden_crypto::stark::air::LiftedAirBuilder; - -use crate::{MainTraceRow, constraints::op_flags::OpFlags}; +use crate::{MainCols, MidenAirBuilder, constraints::op_flags::OpFlags}; // ENTRY POINTS // ================================================================================================ @@ -20,11 +19,11 @@ use crate::{MainTraceRow, constraints::op_flags::OpFlags}; /// Enforces stack main-trace constraints for this group. pub fn enforce_main( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { general::enforce_main(builder, local, next, op_flags); overflow::enforce_main(builder, local, next, op_flags); diff --git a/air/src/constraints/stack/ops.rs b/air/src/constraints/stack/ops.rs new file mode 100644 index 0000000000..7db8ef8896 --- /dev/null +++ b/air/src/constraints/stack/ops.rs @@ -0,0 +1,266 @@ +//! Stack operation constraints. +//! +//! This module enforces ops that directly rewrite visible stack items: +//! PAD, DUP*, CLK, SWAP, MOVUP/MOVDN, SWAPW/SWAPDW, conditional swaps, and small +//! system/io stack ops (ASSERT, CALLER, SDEPTH). +//! +//! Stack shifting is enforced in the general stack constraints; here we only cover explicit +//! rewrites of stack positions for these op groups. + +use miden_crypto::stark::air::AirBuilder; + +use crate::{ + MainCols, MidenAirBuilder, + constraints::{op_flags::OpFlags, utils::BoolNot}, +}; + +// ENTRY POINT +// ================================================================================================ + +/// Enforces stack operation constraints for PAD/DUP/CLK/SWAP/MOV/SWAPW/CSWAP. +pub fn enforce_main( + builder: &mut AB, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, +) where + AB: MidenAirBuilder, +{ + let s0 = local.stack.get(0); + let s1 = local.stack.get(1); + let s2 = local.stack.get(2); + let s3 = local.stack.get(3); + let s4 = local.stack.get(4); + let s5 = local.stack.get(5); + let s6 = local.stack.get(6); + let s7 = local.stack.get(7); + let s8 = local.stack.get(8); + let s9 = local.stack.get(9); + let s10 = local.stack.get(10); + let s11 = local.stack.get(11); + let s12 = local.stack.get(12); + let s13 = local.stack.get(13); + let s14 = local.stack.get(14); + let s15 = local.stack.get(15); + let stack_depth = local.stack.b0; + + let fn_hash_0 = local.system.fn_hash[0]; + let fn_hash_1 = local.system.fn_hash[1]; + let fn_hash_2 = local.system.fn_hash[2]; + let fn_hash_3 = local.system.fn_hash[3]; + + let s0_next = next.stack.get(0); + let s1_next = next.stack.get(1); + let s2_next = next.stack.get(2); + let s3_next = next.stack.get(3); + let s4_next = next.stack.get(4); + let s5_next = next.stack.get(5); + let s6_next = next.stack.get(6); + let s7_next = next.stack.get(7); + let s8_next = next.stack.get(8); + let s9_next = next.stack.get(9); + let s10_next = next.stack.get(10); + let s11_next = next.stack.get(11); + let s12_next = next.stack.get(12); + let s13_next = next.stack.get(13); + let s14_next = next.stack.get(14); + let s15_next = next.stack.get(15); + + let is_pad = op_flags.pad(); + let is_dup = op_flags.dup(); + let is_dup1 = op_flags.dup1(); + let is_dup2 = op_flags.dup2(); + let is_dup3 = op_flags.dup3(); + let is_dup4 = op_flags.dup4(); + let is_dup5 = op_flags.dup5(); + let is_dup6 = op_flags.dup6(); + let is_dup7 = op_flags.dup7(); + let is_dup9 = op_flags.dup9(); + let is_dup11 = op_flags.dup11(); + let is_dup13 = op_flags.dup13(); + let is_dup15 = op_flags.dup15(); + + let is_clk = op_flags.clk(); + + let is_swap = op_flags.swap(); + let is_movup2 = op_flags.movup2(); + let is_movup3 = op_flags.movup3(); + let is_movup4 = op_flags.movup4(); + let is_movup5 = op_flags.movup5(); + let is_movup6 = op_flags.movup6(); + let is_movup7 = op_flags.movup7(); + let is_movup8 = op_flags.movup8(); + + let is_movdn2 = op_flags.movdn2(); + let is_movdn3 = op_flags.movdn3(); + let is_movdn4 = op_flags.movdn4(); + let is_movdn5 = op_flags.movdn5(); + let is_movdn6 = op_flags.movdn6(); + let is_movdn7 = op_flags.movdn7(); + let is_movdn8 = op_flags.movdn8(); + + let is_swapw = op_flags.swapw(); + let is_swapw2 = op_flags.swapw2(); + let is_swapw3 = op_flags.swapw3(); + let is_swapdw = op_flags.swapdw(); + + let is_cswap = op_flags.cswap(); + let is_cswapw = op_flags.cswapw(); + let is_assert = op_flags.assert_op(); + let is_caller = op_flags.caller(); + let is_sdepth = op_flags.sdepth(); + + // All constraints are gated by op flags which vanish on the last row. + let builder = &mut builder.when_transition(); + + // PAD + builder.when(is_pad).assert_zero(s0_next); + + // DUP* + builder.when(is_dup).assert_eq(s0_next, s0); + builder.when(is_dup1).assert_eq(s0_next, s1); + builder.when(is_dup2).assert_eq(s0_next, s2); + builder.when(is_dup3).assert_eq(s0_next, s3); + builder.when(is_dup4).assert_eq(s0_next, s4); + builder.when(is_dup5).assert_eq(s0_next, s5); + builder.when(is_dup6).assert_eq(s0_next, s6); + builder.when(is_dup7).assert_eq(s0_next, s7); + builder.when(is_dup9).assert_eq(s0_next, s9); + builder.when(is_dup11).assert_eq(s0_next, s11); + builder.when(is_dup13).assert_eq(s0_next, s13); + builder.when(is_dup15).assert_eq(s0_next, s15); + + // CLK + let clk = local.system.clk; + builder.when(is_clk).assert_eq(s0_next, clk); + + // SWAP: exchange top two stack elements. + { + let builder = &mut builder.when(is_swap); + builder.assert_eq(s0_next, s1); + builder.assert_eq(s1_next, s0); + } + + // MOVUP + builder.when(is_movup2).assert_eq(s0_next, s2); + builder.when(is_movup3).assert_eq(s0_next, s3); + builder.when(is_movup4).assert_eq(s0_next, s4); + builder.when(is_movup5).assert_eq(s0_next, s5); + builder.when(is_movup6).assert_eq(s0_next, s6); + builder.when(is_movup7).assert_eq(s0_next, s7); + builder.when(is_movup8).assert_eq(s0_next, s8); + + // MOVDN + builder.when(is_movdn2).assert_eq(s2_next, s0); + builder.when(is_movdn3).assert_eq(s3_next, s0); + builder.when(is_movdn4).assert_eq(s4_next, s0); + builder.when(is_movdn5).assert_eq(s5_next, s0); + builder.when(is_movdn6).assert_eq(s6_next, s0); + builder.when(is_movdn7).assert_eq(s7_next, s0); + builder.when(is_movdn8).assert_eq(s8_next, s0); + + // SWAPW: exchange first and second words. + { + let builder = &mut builder.when(is_swapw); + builder.assert_eq(s0_next, s4); + builder.assert_eq(s1_next, s5); + builder.assert_eq(s2_next, s6); + builder.assert_eq(s3_next, s7); + builder.assert_eq(s4_next, s0); + builder.assert_eq(s5_next, s1); + builder.assert_eq(s6_next, s2); + builder.assert_eq(s7_next, s3); + } + + // SWAPW2: exchange first and third words. + { + let builder = &mut builder.when(is_swapw2); + builder.assert_eq(s0_next, s8); + builder.assert_eq(s1_next, s9); + builder.assert_eq(s2_next, s10); + builder.assert_eq(s3_next, s11); + builder.assert_eq(s8_next, s0); + builder.assert_eq(s9_next, s1); + builder.assert_eq(s10_next, s2); + builder.assert_eq(s11_next, s3); + } + + // SWAPW3: exchange first and fourth words. + { + let builder = &mut builder.when(is_swapw3); + builder.assert_eq(s0_next, s12); + builder.assert_eq(s1_next, s13); + builder.assert_eq(s2_next, s14); + builder.assert_eq(s3_next, s15); + builder.assert_eq(s12_next, s0); + builder.assert_eq(s13_next, s1); + builder.assert_eq(s14_next, s2); + builder.assert_eq(s15_next, s3); + } + + // SWAPDW: exchange first and second double-words. + { + let builder = &mut builder.when(is_swapdw); + builder.assert_eq(s0_next, s8); + builder.assert_eq(s1_next, s9); + builder.assert_eq(s2_next, s10); + builder.assert_eq(s3_next, s11); + builder.assert_eq(s4_next, s12); + builder.assert_eq(s5_next, s13); + builder.assert_eq(s6_next, s14); + builder.assert_eq(s7_next, s15); + builder.assert_eq(s8_next, s0); + builder.assert_eq(s9_next, s1); + builder.assert_eq(s10_next, s2); + builder.assert_eq(s11_next, s3); + builder.assert_eq(s12_next, s4); + builder.assert_eq(s13_next, s5); + builder.assert_eq(s14_next, s6); + builder.assert_eq(s15_next, s7); + } + + // CSWAP / CSWAPW: conditional swaps using s0 as the selector. + let cswap_c = s0; + let cswap_c_inv = cswap_c.into().not(); + + // Binary constraint for the cswap selector (must be 0 or 1). + builder.when(is_cswap.clone()).assert_bool(cswap_c); + + // Conditional swap equations for the top two stack items. + { + let builder = &mut builder.when(is_cswap); + builder.assert_eq(s0_next, cswap_c * s2.into() + cswap_c_inv.clone() * s1.into()); + builder.assert_eq(s1_next, cswap_c * s1.into() + cswap_c_inv.clone() * s2.into()); + } + + // Binary constraint for the cswapw selector (same selector as cswap). + builder.when(is_cswapw.clone()).assert_bool(cswap_c); + + // Conditional swap equations for the top two words. + { + let builder = &mut builder.when(is_cswapw); + builder.assert_eq(s0_next, cswap_c * s5.into() + cswap_c_inv.clone() * s1.into()); + builder.assert_eq(s1_next, cswap_c * s6.into() + cswap_c_inv.clone() * s2.into()); + builder.assert_eq(s2_next, cswap_c * s7.into() + cswap_c_inv.clone() * s3.into()); + builder.assert_eq(s3_next, cswap_c * s8.into() + cswap_c_inv.clone() * s4.into()); + builder.assert_eq(s4_next, cswap_c * s1.into() + cswap_c_inv.clone() * s5.into()); + builder.assert_eq(s5_next, cswap_c * s2.into() + cswap_c_inv.clone() * s6.into()); + builder.assert_eq(s6_next, cswap_c * s3.into() + cswap_c_inv.clone() * s7.into()); + builder.assert_eq(s7_next, cswap_c * s4.into() + cswap_c_inv * s8.into()); + } + + // ASSERT: top element must be 1 (shift handled by stack general). + builder.when(is_assert).assert_one(s0); + + // CALLER: load fn_hash into the top 4 stack elements. + { + let builder = &mut builder.when(is_caller); + builder.assert_eq(s0_next, fn_hash_0); + builder.assert_eq(s1_next, fn_hash_1); + builder.assert_eq(s2_next, fn_hash_2); + builder.assert_eq(s3_next, fn_hash_3); + } + + // SDEPTH: push current stack depth to the top. + builder.when(is_sdepth).assert_eq(s0_next, stack_depth); +} diff --git a/air/src/constraints/stack/ops/mod.rs b/air/src/constraints/stack/ops/mod.rs deleted file mode 100644 index c4564bd97a..0000000000 --- a/air/src/constraints/stack/ops/mod.rs +++ /dev/null @@ -1,478 +0,0 @@ -//! Stack operation constraints. -//! -//! This module enforces ops that directly rewrite visible stack items: -//! PAD, DUP*, CLK, SWAP, MOVUP/MOVDN, SWAPW/SWAPDW, conditional swaps, and small -//! system/io stack ops (ASSERT, CALLER, SDEPTH). -//! -//! Stack shifting is enforced in the general stack constraints; here we only cover explicit -//! rewrites of stack positions for these op groups. - -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::LiftedAirBuilder; - -use crate::{ - MainTraceRow, - constraints::{ - op_flags::OpFlags, - tagging::{ - TagGroup, TaggingAirBuilderExt, ids::TAG_STACK_OPS_BASE, tagged_assert_zero, - tagged_assert_zero_integrity, tagged_assert_zeros, - }, - }, -}; - -// CONSTANTS -// ================================================================================================ - -/// Number of stack ops constraints. -pub const NUM_CONSTRAINTS: usize = 88; - -/// Base tag ID for stack ops constraints. -const STACK_OPS_BASE_ID: usize = TAG_STACK_OPS_BASE; - -/// Tag namespaces for stack ops constraints. -const STACK_OPS_NAMES: [&str; NUM_CONSTRAINTS] = [ - // PAD - "stack.ops.pad", - // DUP* - "stack.ops.dup", - "stack.ops.dup1", - "stack.ops.dup2", - "stack.ops.dup3", - "stack.ops.dup4", - "stack.ops.dup5", - "stack.ops.dup6", - "stack.ops.dup7", - "stack.ops.dup9", - "stack.ops.dup11", - "stack.ops.dup13", - "stack.ops.dup15", - // CLK - "stack.ops.clk", - // SWAP: exchange the top two stack items. - "stack.ops.swap", - "stack.ops.swap", - // MOVUP: move an item at depth N to the top. - "stack.ops.movup2", - "stack.ops.movup3", - "stack.ops.movup4", - "stack.ops.movup5", - "stack.ops.movup6", - "stack.ops.movup7", - "stack.ops.movup8", - // MOVDN: move the top item down to depth N. - "stack.ops.movdn2", - "stack.ops.movdn3", - "stack.ops.movdn4", - "stack.ops.movdn5", - "stack.ops.movdn6", - "stack.ops.movdn7", - "stack.ops.movdn8", - // SWAPW: swap word [0..3] with word [4..7]. - "stack.ops.swapw", - "stack.ops.swapw", - "stack.ops.swapw", - "stack.ops.swapw", - "stack.ops.swapw", - "stack.ops.swapw", - "stack.ops.swapw", - "stack.ops.swapw", - // SWAPW2: swap word [0..3] with word [8..11]. - "stack.ops.swapw2", - "stack.ops.swapw2", - "stack.ops.swapw2", - "stack.ops.swapw2", - "stack.ops.swapw2", - "stack.ops.swapw2", - "stack.ops.swapw2", - "stack.ops.swapw2", - // SWAPW3: swap word [0..3] with word [12..15]. - "stack.ops.swapw3", - "stack.ops.swapw3", - "stack.ops.swapw3", - "stack.ops.swapw3", - "stack.ops.swapw3", - "stack.ops.swapw3", - "stack.ops.swapw3", - "stack.ops.swapw3", - // SWAPDW: swap double-word [0..7] with [8..15]. - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - "stack.ops.swapdw", - // CSWAP - "stack.ops.cswap", - "stack.ops.cswap", - "stack.ops.cswap", - // CSWAPW - "stack.ops.cswapw", - "stack.ops.cswapw", - "stack.ops.cswapw", - "stack.ops.cswapw", - "stack.ops.cswapw", - "stack.ops.cswapw", - "stack.ops.cswapw", - "stack.ops.cswapw", - "stack.ops.cswapw", - // ASSERT - "stack.system.assert", - // CALLER - "stack.system.caller", - "stack.system.caller", - "stack.system.caller", - "stack.system.caller", - // SDEPTH - "stack.io.sdepth", -]; - -/// Tag metadata for this constraint group. -const STACK_OPS_TAGS: TagGroup = TagGroup { - base: STACK_OPS_BASE_ID, - names: &STACK_OPS_NAMES, -}; - -// ENTRY POINT -// ================================================================================================ - -/// Enforces stack operation constraints for PAD/DUP/CLK/SWAP/MOV/SWAPW/CSWAP. -pub fn enforce_main( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, - op_flags: &OpFlags, -) where - AB: LiftedAirBuilder, -{ - let s0: AB::Expr = local.stack[0].clone().into(); - let s1: AB::Expr = local.stack[1].clone().into(); - let s2: AB::Expr = local.stack[2].clone().into(); - let s3: AB::Expr = local.stack[3].clone().into(); - let s4: AB::Expr = local.stack[4].clone().into(); - let s5: AB::Expr = local.stack[5].clone().into(); - let s6: AB::Expr = local.stack[6].clone().into(); - let s7: AB::Expr = local.stack[7].clone().into(); - let s8: AB::Expr = local.stack[8].clone().into(); - let s9: AB::Expr = local.stack[9].clone().into(); - let s10: AB::Expr = local.stack[10].clone().into(); - let s11: AB::Expr = local.stack[11].clone().into(); - let s12: AB::Expr = local.stack[12].clone().into(); - let s13: AB::Expr = local.stack[13].clone().into(); - let s14: AB::Expr = local.stack[14].clone().into(); - let s15: AB::Expr = local.stack[15].clone().into(); - let stack_depth: AB::Expr = local.stack[16].clone().into(); - - let fn_hash_0: AB::Expr = local.fn_hash[0].clone().into(); - let fn_hash_1: AB::Expr = local.fn_hash[1].clone().into(); - let fn_hash_2: AB::Expr = local.fn_hash[2].clone().into(); - let fn_hash_3: AB::Expr = local.fn_hash[3].clone().into(); - - let s0_next: AB::Expr = next.stack[0].clone().into(); - let s1_next: AB::Expr = next.stack[1].clone().into(); - let s2_next: AB::Expr = next.stack[2].clone().into(); - let s3_next: AB::Expr = next.stack[3].clone().into(); - let s4_next: AB::Expr = next.stack[4].clone().into(); - let s5_next: AB::Expr = next.stack[5].clone().into(); - let s6_next: AB::Expr = next.stack[6].clone().into(); - let s7_next: AB::Expr = next.stack[7].clone().into(); - let s8_next: AB::Expr = next.stack[8].clone().into(); - let s9_next: AB::Expr = next.stack[9].clone().into(); - let s10_next: AB::Expr = next.stack[10].clone().into(); - let s11_next: AB::Expr = next.stack[11].clone().into(); - let s12_next: AB::Expr = next.stack[12].clone().into(); - let s13_next: AB::Expr = next.stack[13].clone().into(); - let s14_next: AB::Expr = next.stack[14].clone().into(); - let s15_next: AB::Expr = next.stack[15].clone().into(); - - let is_pad = op_flags.pad(); - let is_dup = op_flags.dup(); - let is_dup1 = op_flags.dup1(); - let is_dup2 = op_flags.dup2(); - let is_dup3 = op_flags.dup3(); - let is_dup4 = op_flags.dup4(); - let is_dup5 = op_flags.dup5(); - let is_dup6 = op_flags.dup6(); - let is_dup7 = op_flags.dup7(); - let is_dup9 = op_flags.dup9(); - let is_dup11 = op_flags.dup11(); - let is_dup13 = op_flags.dup13(); - let is_dup15 = op_flags.dup15(); - - let is_clk = op_flags.clk(); - - let is_swap = op_flags.swap(); - let is_movup2 = op_flags.movup2(); - let is_movup3 = op_flags.movup3(); - let is_movup4 = op_flags.movup4(); - let is_movup5 = op_flags.movup5(); - let is_movup6 = op_flags.movup6(); - let is_movup7 = op_flags.movup7(); - let is_movup8 = op_flags.movup8(); - - let is_movdn2 = op_flags.movdn2(); - let is_movdn3 = op_flags.movdn3(); - let is_movdn4 = op_flags.movdn4(); - let is_movdn5 = op_flags.movdn5(); - let is_movdn6 = op_flags.movdn6(); - let is_movdn7 = op_flags.movdn7(); - let is_movdn8 = op_flags.movdn8(); - - let is_swapw = op_flags.swapw(); - let is_swapw2 = op_flags.swapw2(); - let is_swapw3 = op_flags.swapw3(); - let is_swapdw = op_flags.swapdw(); - - let is_cswap = op_flags.cswap(); - let is_cswapw = op_flags.cswapw(); - let is_assert = op_flags.assert_op(); - let is_caller = op_flags.caller(); - let is_sdepth = op_flags.sdepth(); - - let mut idx = 0usize; - - // PAD - assert_zero(builder, &mut idx, is_pad * s0_next.clone()); - - // DUP* - assert_zero(builder, &mut idx, is_dup * (s0_next.clone() - s0.clone())); - assert_zero(builder, &mut idx, is_dup1 * (s0_next.clone() - s1.clone())); - assert_zero(builder, &mut idx, is_dup2 * (s0_next.clone() - s2.clone())); - assert_zero(builder, &mut idx, is_dup3 * (s0_next.clone() - s3.clone())); - assert_zero(builder, &mut idx, is_dup4 * (s0_next.clone() - s4.clone())); - assert_zero(builder, &mut idx, is_dup5 * (s0_next.clone() - s5.clone())); - assert_zero(builder, &mut idx, is_dup6 * (s0_next.clone() - s6.clone())); - assert_zero(builder, &mut idx, is_dup7 * (s0_next.clone() - s7.clone())); - assert_zero(builder, &mut idx, is_dup9 * (s0_next.clone() - s9.clone())); - assert_zero(builder, &mut idx, is_dup11 * (s0_next.clone() - s11.clone())); - assert_zero(builder, &mut idx, is_dup13 * (s0_next.clone() - s13.clone())); - assert_zero(builder, &mut idx, is_dup15 * (s0_next.clone() - s15.clone())); - - // CLK - let clk: AB::Expr = local.clk.clone().into(); - assert_zero(builder, &mut idx, is_clk * (s0_next.clone() - clk)); - - // SWAP - assert_zeros( - builder, - &mut idx, - "stack.ops.swap", - [ - is_swap.clone() * (s0_next.clone() - s1.clone()), - is_swap * (s1_next.clone() - s0.clone()), - ], - ); - - // MOVUP - assert_zero(builder, &mut idx, is_movup2 * (s0_next.clone() - s2.clone())); - assert_zero(builder, &mut idx, is_movup3 * (s0_next.clone() - s3.clone())); - assert_zero(builder, &mut idx, is_movup4 * (s0_next.clone() - s4.clone())); - assert_zero(builder, &mut idx, is_movup5 * (s0_next.clone() - s5.clone())); - assert_zero(builder, &mut idx, is_movup6 * (s0_next.clone() - s6.clone())); - assert_zero(builder, &mut idx, is_movup7 * (s0_next.clone() - s7.clone())); - assert_zero(builder, &mut idx, is_movup8 * (s0_next.clone() - s8.clone())); - - // MOVDN - assert_zero(builder, &mut idx, is_movdn2 * (s2_next.clone() - s0.clone())); - assert_zero(builder, &mut idx, is_movdn3 * (s3_next.clone() - s0.clone())); - assert_zero(builder, &mut idx, is_movdn4 * (s4_next.clone() - s0.clone())); - assert_zero(builder, &mut idx, is_movdn5 * (s5_next.clone() - s0.clone())); - assert_zero(builder, &mut idx, is_movdn6 * (s6_next.clone() - s0.clone())); - assert_zero(builder, &mut idx, is_movdn7 * (s7_next.clone() - s0.clone())); - assert_zero(builder, &mut idx, is_movdn8 * (s8_next.clone() - s0.clone())); - - // SWAPW - assert_zeros( - builder, - &mut idx, - "stack.ops.swapw", - [ - is_swapw.clone() * (s0_next.clone() - s4.clone()), - is_swapw.clone() * (s1_next.clone() - s5.clone()), - is_swapw.clone() * (s2_next.clone() - s6.clone()), - is_swapw.clone() * (s3_next.clone() - s7.clone()), - is_swapw.clone() * (s4_next.clone() - s0.clone()), - is_swapw.clone() * (s5_next.clone() - s1.clone()), - is_swapw.clone() * (s6_next.clone() - s2.clone()), - is_swapw * (s7_next.clone() - s3.clone()), - ], - ); - - // SWAPW2 - assert_zeros( - builder, - &mut idx, - "stack.ops.swapw2", - [ - is_swapw2.clone() * (s0_next.clone() - s8.clone()), - is_swapw2.clone() * (s1_next.clone() - s9.clone()), - is_swapw2.clone() * (s2_next.clone() - s10.clone()), - is_swapw2.clone() * (s3_next.clone() - s11.clone()), - is_swapw2.clone() * (s8_next.clone() - s0.clone()), - is_swapw2.clone() * (s9_next.clone() - s1.clone()), - is_swapw2.clone() * (s10_next.clone() - s2.clone()), - is_swapw2 * (s11_next.clone() - s3.clone()), - ], - ); - - // SWAPW3 - assert_zeros( - builder, - &mut idx, - "stack.ops.swapw3", - [ - is_swapw3.clone() * (s0_next.clone() - s12.clone()), - is_swapw3.clone() * (s1_next.clone() - s13.clone()), - is_swapw3.clone() * (s2_next.clone() - s14.clone()), - is_swapw3.clone() * (s3_next.clone() - s15.clone()), - is_swapw3.clone() * (s12_next.clone() - s0.clone()), - is_swapw3.clone() * (s13_next.clone() - s1.clone()), - is_swapw3.clone() * (s14_next.clone() - s2.clone()), - is_swapw3 * (s15_next.clone() - s3.clone()), - ], - ); - - // SWAPDW - assert_zeros( - builder, - &mut idx, - "stack.ops.swapdw", - [ - is_swapdw.clone() * (s0_next.clone() - s8.clone()), - is_swapdw.clone() * (s1_next.clone() - s9.clone()), - is_swapdw.clone() * (s2_next.clone() - s10.clone()), - is_swapdw.clone() * (s3_next.clone() - s11.clone()), - is_swapdw.clone() * (s4_next.clone() - s12.clone()), - is_swapdw.clone() * (s5_next.clone() - s13.clone()), - is_swapdw.clone() * (s6_next.clone() - s14.clone()), - is_swapdw.clone() * (s7_next.clone() - s15.clone()), - is_swapdw.clone() * (s8_next.clone() - s0.clone()), - is_swapdw.clone() * (s9_next.clone() - s1.clone()), - is_swapdw.clone() * (s10_next.clone() - s2.clone()), - is_swapdw.clone() * (s11_next.clone() - s3.clone()), - is_swapdw.clone() * (s12_next.clone() - s4.clone()), - is_swapdw.clone() * (s13_next.clone() - s5.clone()), - is_swapdw.clone() * (s14_next.clone() - s6.clone()), - is_swapdw * (s15_next.clone() - s7.clone()), - ], - ); - - // CSWAP / CSWAPW: conditional swaps using s0 as the selector. - let cswap_c = s0.clone(); - let cswap_c_inv = AB::Expr::ONE - cswap_c.clone(); - - // Binary constraint for the cswap selector (must be 0 or 1). - assert_zero_integrity( - builder, - &mut idx, - is_cswap.clone() * (cswap_c.clone() * (cswap_c.clone() - AB::Expr::ONE)), - ); - - // Conditional swap equations for the top two stack items. - assert_zeros( - builder, - &mut idx, - "stack.ops.cswap", - [ - is_cswap.clone() - * (s0_next.clone() - - (cswap_c.clone() * s2.clone() + cswap_c_inv.clone() * s1.clone())), - is_cswap - * (s1_next.clone() - - (cswap_c.clone() * s1.clone() + cswap_c_inv.clone() * s2.clone())), - ], - ); - - // Binary constraint for the cswapw selector (same selector as cswap). - assert_zero_integrity( - builder, - &mut idx, - is_cswapw.clone() * (cswap_c.clone() * (cswap_c.clone() - AB::Expr::ONE)), - ); - - // Conditional swap equations for the top two words. - assert_zeros( - builder, - &mut idx, - "stack.ops.cswapw", - [ - is_cswapw.clone() - * (s0_next.clone() - - (cswap_c.clone() * s5.clone() + cswap_c_inv.clone() * s1.clone())), - is_cswapw.clone() - * (s1_next.clone() - - (cswap_c.clone() * s6.clone() + cswap_c_inv.clone() * s2.clone())), - is_cswapw.clone() - * (s2_next.clone() - - (cswap_c.clone() * s7.clone() + cswap_c_inv.clone() * s3.clone())), - is_cswapw.clone() - * (s3_next.clone() - - (cswap_c.clone() * s8.clone() + cswap_c_inv.clone() * s4.clone())), - is_cswapw.clone() - * (s4_next.clone() - - (cswap_c.clone() * s1.clone() + cswap_c_inv.clone() * s5.clone())), - is_cswapw.clone() - * (s5_next.clone() - - (cswap_c.clone() * s2.clone() + cswap_c_inv.clone() * s6.clone())), - is_cswapw.clone() - * (s6_next.clone() - - (cswap_c.clone() * s3.clone() + cswap_c_inv.clone() * s7.clone())), - is_cswapw - * (s7_next.clone() - - (cswap_c.clone() * s4.clone() + cswap_c_inv.clone() * s8.clone())), - ], - ); - - // ASSERT: top element must be 1 (shift handled by stack general). - assert_zero_integrity(builder, &mut idx, is_assert * (s0 - AB::Expr::ONE)); - - // CALLER: load fn_hash into the top 4 stack elements. - assert_zeros( - builder, - &mut idx, - "stack.system.caller", - [ - is_caller.clone() * (s0_next.clone() - fn_hash_0), - is_caller.clone() * (s1_next.clone() - fn_hash_1), - is_caller.clone() * (s2_next.clone() - fn_hash_2), - is_caller * (s3_next.clone() - fn_hash_3), - ], - ); - - // SDEPTH: push current stack depth to the top. - assert_zero(builder, &mut idx, is_sdepth * (s0_next - stack_depth)); -} - -// CONSTRAINT HELPERS -// ================================================================================================ - -fn assert_zero_integrity( - builder: &mut AB, - idx: &mut usize, - expr: AB::Expr, -) { - tagged_assert_zero_integrity(builder, &STACK_OPS_TAGS, idx, expr); -} - -fn assert_zero(builder: &mut AB, idx: &mut usize, expr: AB::Expr) { - tagged_assert_zero(builder, &STACK_OPS_TAGS, idx, expr); -} - -fn assert_zeros( - builder: &mut AB, - idx: &mut usize, - namespace: &'static str, - exprs: [AB::Expr; N], -) { - tagged_assert_zeros(builder, &STACK_OPS_TAGS, idx, namespace, exprs); -} diff --git a/air/src/constraints/stack/overflow/mod.rs b/air/src/constraints/stack/overflow.rs similarity index 53% rename from air/src/constraints/stack/overflow/mod.rs rename to air/src/constraints/stack/overflow.rs index b523fd28cb..b40f2db638 100644 --- a/air/src/constraints/stack/overflow/mod.rs +++ b/air/src/constraints/stack/overflow.rs @@ -27,41 +27,13 @@ //! - On left shift with depth = 16: stack[15]' = 0 (no item to restore) use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{AirBuilder, LiftedAirBuilder}; +use miden_crypto::stark::air::AirBuilder; use crate::{ - MainTraceRow, - constraints::{ - op_flags::OpFlags, - tagging::{ - TaggingAirBuilderExt, - ids::{TAG_STACK_OVERFLOW_BASE, TAG_STACK_OVERFLOW_COUNT}, - }, - }, - trace::{ - decoder::{IS_CALL_FLAG_COL_IDX, IS_SYSCALL_FLAG_COL_IDX}, - stack::{B0_COL_IDX, B1_COL_IDX}, - }, + MainCols, MidenAirBuilder, + constraints::{constants::*, op_flags::OpFlags, utils::BoolNot}, }; -// CONSTANTS -// ================================================================================================ - -/// Base tag ID for stack overflow constraints. -const STACK_OVERFLOW_BASE_ID: usize = TAG_STACK_OVERFLOW_BASE; - -/// Tag namespaces for stack overflow constraints (boundary + transition). -const STACK_OVERFLOW_NAMES: [&str; TAG_STACK_OVERFLOW_COUNT] = [ - "stack.overflow.depth.first_row", - "stack.overflow.depth.last_row", - "stack.overflow.addr.first_row", - "stack.overflow.addr.last_row", - "stack.overflow.depth.transition", - "stack.overflow.flag.transition", - "stack.overflow.addr.transition", - "stack.overflow.zero_insert.transition", -]; - // ENTRY POINTS // ================================================================================================ @@ -74,39 +46,28 @@ const STACK_OVERFLOW_NAMES: [&str; TAG_STACK_OVERFLOW_COUNT] = [ /// 4. Last stack item is zeroed on left shift when depth = 16 pub fn enforce_main( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { // Boundary constraints: stack depth and overflow pointer must start/end clean. - let sixteen: AB::Expr = AB::Expr::from_u16(16); - let zero: AB::Expr = AB::Expr::ZERO; - builder.tagged(STACK_OVERFLOW_BASE_ID, STACK_OVERFLOW_NAMES[0], |builder| { - builder - .when_first_row() - .assert_zero(local.stack[B0_COL_IDX].clone().into() - sixteen.clone()); - }); - builder.tagged(STACK_OVERFLOW_BASE_ID + 1, STACK_OVERFLOW_NAMES[1], |builder| { - builder - .when_last_row() - .assert_zero(local.stack[B0_COL_IDX].clone().into() - sixteen); - }); - builder.tagged(STACK_OVERFLOW_BASE_ID + 2, STACK_OVERFLOW_NAMES[2], |builder| { - builder - .when_first_row() - .assert_zero(local.stack[B1_COL_IDX].clone().into() - zero.clone()); - }); - builder.tagged(STACK_OVERFLOW_BASE_ID + 3, STACK_OVERFLOW_NAMES[3], |builder| { - builder - .when_last_row() - .assert_zero(local.stack[B1_COL_IDX].clone().into() - zero); - }); + builder.when_first_row().assert_eq(local.stack.b0, F_16); + builder.when_last_row().assert_eq(local.stack.b0, F_16); + builder.when_first_row().assert_zero(local.stack.b1); + builder.when_last_row().assert_zero(local.stack.b1); // Transition constraints: depth bookkeeping, overflow flag, and pointer updates. enforce_stack_depth_constraints(builder, local, next, op_flags); - enforce_overflow_flag_constraints(builder, local, op_flags); + + // Overflow flag: (1 - overflow) * (depth - 16) = 0 + // When depth > 16, overflow must be 1; when depth = 16, satisfied for any h0. + { + let depth = local.stack.b0; + builder.when(op_flags.overflow().not()).assert_eq(depth, F_16); + } + enforce_overflow_index_constraints(builder, local, next, op_flags); } @@ -124,21 +85,21 @@ pub fn enforce_main( /// The END operation exiting a CALL/SYSCALL block is handled separately via multiset constraints. fn enforce_stack_depth_constraints( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - let depth: AB::Expr = local.stack[B0_COL_IDX].clone().into(); - let depth_next: AB::Expr = next.stack[B0_COL_IDX].clone().into(); + let depth = local.stack.b0; + let depth_next = next.stack.b0; // Flag for CALL, DYNCALL, or SYSCALL operations let call_or_dyncall_or_syscall = op_flags.call() + op_flags.dyncall() + op_flags.syscall(); // Flag for END operation that ends a CALL/DYNCALL or SYSCALL block - let is_call_or_dyncall_end: AB::Expr = local.decoder[IS_CALL_FLAG_COL_IDX].clone().into(); - let is_syscall_end: AB::Expr = local.decoder[IS_SYSCALL_FLAG_COL_IDX].clone().into(); + let is_call_or_dyncall_end = local.decoder.hasher_state[6]; + let is_syscall_end = local.decoder.hasher_state[7]; let call_or_dyncall_or_syscall_end = op_flags.end() * (is_call_or_dyncall_end + is_syscall_end); // Invariants relied on here: @@ -164,7 +125,7 @@ fn enforce_stack_depth_constraints( // - We still need to suppress the raw (b0' - b0) term on END-of-call rows, hence the mask. let normal_mask = AB::Expr::ONE - call_or_dyncall_or_syscall.clone() - call_or_dyncall_or_syscall_end; - let depth_delta_part = (depth_next.clone() - depth.clone()) * normal_mask; + let depth_delta_part = (depth_next.into() - depth.into()) * normal_mask; // Left shift with non-empty overflow: when f_shl=1 and f_ov=1, depth must decrement by 1. // This contributes +1 to the LHS, enforcing b0' = b0 - 1. @@ -175,41 +136,12 @@ fn enforce_stack_depth_constraints( let right_shift_part = op_flags.right_shift(); // CALL/SYSCALL/DYNCALL: depth resets to 16 when entering a new context. - let call_part = call_or_dyncall_or_syscall * (depth_next - AB::Expr::from_u16(16)); + let call_part = call_or_dyncall_or_syscall * (depth_next.into() - F_16); // Combined constraint: normal depth update + shift effects + call reset = 0. - builder.tagged(STACK_OVERFLOW_BASE_ID + 4, STACK_OVERFLOW_NAMES[4], |builder| { - builder - .when_transition() - .assert_zero(depth_delta_part + left_shift_part - right_shift_part + call_part); - }); -} - -/// Enforces overflow flag constraints. -/// -/// The overflow flag h0 must satisfy: -/// - (1 - overflow) * (b0 - 16) = 0 -/// -/// This ensures: -/// - When b0 = 16 (no overflow): the constraint is satisfied for any h0 -/// - When b0 > 16 (overflow): h0 must be set such that overflow = (b0 - 16) * h0 = 1 -fn enforce_overflow_flag_constraints( - builder: &mut AB, - local: &MainTraceRow, - op_flags: &OpFlags, -) where - AB: LiftedAirBuilder, -{ - let depth: AB::Expr = local.stack[B0_COL_IDX].clone().into(); - - // (1 - overflow) * (depth - 16) = 0 - // When depth > 16, overflow must be 1 (meaning h0 = 1/(depth - 16)) - // When depth = 16, this constraint is satisfied regardless of overflow - let constraint = (AB::Expr::ONE - op_flags.overflow()) * (depth - AB::Expr::from_u16(16)); - - builder.tagged(STACK_OVERFLOW_BASE_ID + 5, STACK_OVERFLOW_NAMES[5], |builder| { - builder.assert_zero(constraint); - }); + builder + .when_transition() + .assert_zero(depth_delta_part + left_shift_part - right_shift_part + call_part); } /// Enforces overflow bookkeeping index constraints. @@ -219,26 +151,26 @@ fn enforce_overflow_flag_constraints( /// 2. On left shift with depth = 16: stack[15]' = 0 (no item to restore from overflow) fn enforce_overflow_index_constraints( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - let overflow_addr_next: AB::Expr = next.stack[B1_COL_IDX].clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - let last_stack_item_next: AB::Expr = next.stack[15].clone().into(); + let overflow_addr_next = next.stack.b1; + let clk = local.system.clk; + let last_stack_item_next = next.stack.get(15); // On right shift, the overflow address should be set to current clk - let right_shift_constraint = (overflow_addr_next - clk) * op_flags.right_shift(); - builder.tagged(STACK_OVERFLOW_BASE_ID + 6, STACK_OVERFLOW_NAMES[6], |builder| { - builder.when_transition().assert_zero(right_shift_constraint); - }); + builder + .when_transition() + .when(op_flags.right_shift()) + .assert_eq(overflow_addr_next, clk); // On left shift when depth = 16 (no overflow), last stack item should be zero - let left_shift_constraint = - (AB::Expr::ONE - op_flags.overflow()) * op_flags.left_shift() * last_stack_item_next; - builder.tagged(STACK_OVERFLOW_BASE_ID + 7, STACK_OVERFLOW_NAMES[7], |builder| { - builder.when_transition().assert_zero(left_shift_constraint); - }); + builder + .when_transition() + .when(op_flags.overflow().not()) + .when(op_flags.left_shift()) + .assert_zero(last_stack_item_next); } diff --git a/air/src/constraints/stack/stack_arith/mod.rs b/air/src/constraints/stack/stack_arith/mod.rs index ca317434ac..21e4c0a045 100644 --- a/air/src/constraints/stack/stack_arith/mod.rs +++ b/air/src/constraints/stack/stack_arith/mod.rs @@ -8,93 +8,11 @@ mod tests; use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::LiftedAirBuilder; +use miden_crypto::stark::air::AirBuilder; use crate::{ - MainTraceRow, - constraints::{ - op_flags::OpFlags, - tagging::{ - TagGroup, TaggingAirBuilderExt, ids::TAG_STACK_ARITH_BASE, tagged_assert_zero, - tagged_assert_zero_integrity, - }, - }, - trace::decoder::USER_OP_HELPERS_OFFSET, -}; - -// CONSTANTS -// ================================================================================================ - -/// Number of stack arith/u32 constraints. -#[allow(dead_code)] -pub const NUM_CONSTRAINTS: usize = 42; - -/// Base tag ID for stack arith/u32 constraints. -const STACK_ARITH_BASE_ID: usize = TAG_STACK_ARITH_BASE; - -/// Tag namespaces for stack arith/u32 constraints. -const STACK_ARITH_NAMES: [&str; NUM_CONSTRAINTS] = [ - // ADD/NEG/MUL/INV/INCR - "stack.arith.add", - "stack.arith.neg", - "stack.arith.mul", - "stack.arith.inv", - "stack.arith.incr", - // NOT - "stack.arith.not", - "stack.arith.not", - // AND - "stack.arith.and", - "stack.arith.and", - "stack.arith.and", - // OR - "stack.arith.or", - "stack.arith.or", - "stack.arith.or", - // EQ - "stack.arith.eq", - "stack.arith.eq", - // EQZ - "stack.arith.eqz", - "stack.arith.eqz", - // EXPACC - "stack.arith.expacc", - "stack.arith.expacc", - "stack.arith.expacc", - "stack.arith.expacc", - "stack.arith.expacc", - // EXT2MUL - "stack.arith.ext2mul", - "stack.arith.ext2mul", - "stack.arith.ext2mul", - "stack.arith.ext2mul", - // U32 shared/output - "stack.arith.u32.shared", - "stack.arith.u32.output", - "stack.arith.u32.output", - // U32SPLIT/U32ADD/U32ADD3 - "stack.arith.u32.split", - "stack.arith.u32.add", - "stack.arith.u32.add3", - // U32SUB - "stack.arith.u32.sub", - "stack.arith.u32.sub", - "stack.arith.u32.sub", - // U32MUL/U32MADD - "stack.arith.u32.mul", - "stack.arith.u32.madd", - // U32DIV - "stack.arith.u32.div", - "stack.arith.u32.div", - "stack.arith.u32.div", - // U32ASSERT2 - "stack.arith.u32.assert2", - "stack.arith.u32.assert2", -]; - -const STACK_ARITH_TAGS: TagGroup = TagGroup { - base: STACK_ARITH_BASE_ID, - names: &STACK_ARITH_NAMES, + MainCols, MidenAirBuilder, + constraints::{constants::*, op_flags::OpFlags}, }; // ENTRY POINTS @@ -103,35 +21,32 @@ const STACK_ARITH_TAGS: TagGroup = TagGroup { /// Enforces stack arith/u32 constraints. pub fn enforce_main( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, op_flags: &OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - let mut idx = 0usize; - - let s0: AB::Expr = local.stack[0].clone().into(); - let s1: AB::Expr = local.stack[1].clone().into(); - let s2: AB::Expr = local.stack[2].clone().into(); - let s3: AB::Expr = local.stack[3].clone().into(); + let s0: AB::Expr = local.stack.get(0).into(); + let s1: AB::Expr = local.stack.get(1).into(); + let s2: AB::Expr = local.stack.get(2).into(); + let s3: AB::Expr = local.stack.get(3).into(); - let s0_next: AB::Expr = next.stack[0].clone().into(); - let s1_next: AB::Expr = next.stack[1].clone().into(); - let s2_next: AB::Expr = next.stack[2].clone().into(); - let s3_next: AB::Expr = next.stack[3].clone().into(); + let s0_next: AB::Expr = next.stack.get(0).into(); + let s1_next: AB::Expr = next.stack.get(1).into(); + let s2_next: AB::Expr = next.stack.get(2).into(); + let s3_next: AB::Expr = next.stack.get(3).into(); - // Decoder helper columns: h0..h5 are stored starting at USER_OP_HELPERS_OFFSET. - // These helpers are op-specific and are validated by the constraints below. + // Decoder helper columns: hasher_state[2..8] are user-op helpers. // - h0 is used as an inverse witness (EQ/EQZ) or exp_val (EXPACC). // - h1..h4 hold u32 limbs / range-check witnesses for u32 ops. // - h5 is currently unused in this module. - let base = USER_OP_HELPERS_OFFSET; - let uop_h0: AB::Expr = local.decoder[base].clone().into(); - let uop_h1: AB::Expr = local.decoder[base + 1].clone().into(); - let uop_h2: AB::Expr = local.decoder[base + 2].clone().into(); - let uop_h3: AB::Expr = local.decoder[base + 3].clone().into(); - let uop_h4: AB::Expr = local.decoder[base + 4].clone().into(); + let [uop_h0, uop_h1, uop_h2, uop_h3, uop_h4, _] = local.decoder.user_op_helpers(); + let uop_h0: AB::Expr = uop_h0.into(); + let uop_h1: AB::Expr = uop_h1.into(); + let uop_h2: AB::Expr = uop_h2.into(); + let uop_h3: AB::Expr = uop_h3.into(); + let uop_h4: AB::Expr = uop_h4.into(); // Field ops. let is_add = op_flags.add(); @@ -160,63 +75,74 @@ pub fn enforce_main( // ------------------------------------------------------------------------- // Field ops // ------------------------------------------------------------------------- - assert_zero(builder, &mut idx, is_add * (s0_next.clone() - (s0.clone() + s1.clone()))); - assert_zero(builder, &mut idx, is_neg * (s0_next.clone() + s0.clone())); - assert_zero(builder, &mut idx, is_mul * (s0_next.clone() - s0.clone() * s1.clone())); - assert_zero(builder, &mut idx, is_inv * (s0_next.clone() * s0.clone() - AB::Expr::ONE)); - assert_zero(builder, &mut idx, is_incr * (s0_next.clone() - s0.clone() - AB::Expr::ONE)); - - assert_zero_integrity( - builder, - &mut idx, - is_not.clone() * (s0.clone() * (s0.clone() - AB::Expr::ONE)), - ); - assert_zero(builder, &mut idx, is_not * (s0.clone() + s0_next.clone() - AB::Expr::ONE)); - assert_zero_integrity( - builder, - &mut idx, - is_and.clone() * (s0.clone() * (s0.clone() - AB::Expr::ONE)), - ); - assert_zero_integrity( - builder, - &mut idx, - is_and.clone() * (s1.clone() * (s1.clone() - AB::Expr::ONE)), - ); - assert_zero(builder, &mut idx, is_and * (s0_next.clone() - s0.clone() * s1.clone())); - - assert_zero_integrity( - builder, - &mut idx, - is_or.clone() * (s0.clone() * (s0.clone() - AB::Expr::ONE)), - ); - assert_zero_integrity( - builder, - &mut idx, - is_or.clone() * (s1.clone() * (s1.clone() - AB::Expr::ONE)), - ); - assert_zero( - builder, - &mut idx, - is_or * (s0_next.clone() - (s0.clone() + s1.clone() - s0.clone() * s1.clone())), - ); + // ADD: s0' = s0 + s1 + builder + .when_transition() + .when(is_add) + .assert_eq(s0_next.clone(), s0.clone() + s1.clone()); + + // NEG: s0' = -s0 + builder.when_transition().when(is_neg).assert_zero(s0_next.clone() + s0.clone()); + + // MUL: s0' = s0 * s1 + builder + .when_transition() + .when(is_mul) + .assert_eq(s0_next.clone(), s0.clone() * s1.clone()); + + // INV: s0' * s0 = 1 + builder.when_transition().when(is_inv).assert_one(s0_next.clone() * s0.clone()); + + // INCR: s0' = s0 + 1 + builder + .when_transition() + .when(is_incr) + .assert_eq(s0_next.clone(), s0.clone() + F_1); + + // NOT: s0 is boolean, s0 + s0' = 1. + { + let builder = &mut builder.when(is_not); + builder.assert_bool(s0.clone()); + builder.when_transition().assert_eq(s0.clone() + s0_next.clone(), F_1); + } + + // AND: s0, s1 are boolean, s0' = s0 * s1. + { + let builder = &mut builder.when(is_and); + builder.assert_bool(s0.clone()); + builder.assert_bool(s1.clone()); + builder.when_transition().assert_eq(s0_next.clone(), s0.clone() * s1.clone()); + } + + // OR: s0, s1 are boolean, s0' = s0 + s1 - s0 * s1. + { + let builder = &mut builder.when(is_or); + builder.assert_bool(s0.clone()); + builder.assert_bool(s1.clone()); + builder + .when_transition() + .assert_eq(s0_next.clone(), s0.clone() + s1.clone() - s0.clone() * s1.clone()); + } // EQ: if s0 != s1, h0 acts as 1/(s0 - s1) and forces s0' = 0; if equal, s0' = 1. - let eq_diff = s0.clone() - s1.clone(); - assert_zero(builder, &mut idx, is_eq.clone() * (eq_diff.clone() * s0_next.clone())); - assert_zero( - builder, - &mut idx, - is_eq * (s0_next.clone() - (AB::Expr::ONE - eq_diff * uop_h0.clone())), - ); + // eq_diff * s0_next and the inverse witness constraint are intrinsic (conditional inverse). + let eq_diff: AB::Expr = s0.clone() - s1.clone(); + { + let gate = builder.is_transition() * is_eq; + let builder = &mut builder.when(gate); + builder.assert_zero(eq_diff.clone() * s0_next.clone()); + builder.assert_eq(s0_next.clone(), AB::Expr::ONE - eq_diff * uop_h0.clone()); + } // EQZ: if s0 != 0, h0 acts as 1/s0 and forces s0' = 0; if zero, s0' = 1. - assert_zero(builder, &mut idx, is_eqz.clone() * (s0.clone() * s0_next.clone())); - assert_zero( - builder, - &mut idx, - is_eqz * (s0_next.clone() - (AB::Expr::ONE - s0.clone() * uop_h0.clone())), - ); + // s0 * s0_next and the inverse witness constraint are intrinsic (conditional inverse). + { + let gate = builder.is_transition() * is_eqz; + let builder = &mut builder.when(gate); + builder.assert_zero(s0.clone() * s0_next.clone()); + builder.assert_eq(s0_next.clone(), AB::Expr::ONE - s0.clone() * uop_h0.clone()); + } // EXPACC: exp_next = exp^2, exp_val = 1 + (exp - 1) * exp_bit, acc_next = acc * exp_val. let exp = s1.clone(); @@ -227,23 +153,19 @@ pub fn enforce_main( let exp_b = s3.clone(); let exp_b_next = s3_next.clone(); let exp_val = uop_h0.clone(); - let two: AB::Expr = AB::Expr::from_u16(2); - - assert_zero(builder, &mut idx, is_expacc.clone() * (exp_next - exp.clone() * exp.clone())); - assert_zero( - builder, - &mut idx, - is_expacc.clone() - * (exp_val.clone() - AB::Expr::ONE - (exp - AB::Expr::ONE) * exp_bit.clone()), - ); - assert_zero(builder, &mut idx, is_expacc.clone() * (acc_next - acc * exp_val)); - assert_zero( - builder, - &mut idx, - is_expacc.clone() * (exp_b - exp_b_next * two - exp_bit.clone()), - ); - assert_zero(builder, &mut idx, is_expacc * (exp_bit.clone() * (exp_bit - AB::Expr::ONE))); + // EXPACC transition: squaring, exp_val witness, accumulation, bit decomposition, and boolean + // check. + { + let gate = builder.is_transition() * is_expacc; + let builder = &mut builder.when(gate); + builder.assert_eq(exp_next, exp.clone() * exp.clone()); + builder.assert_eq(exp_val.clone(), (exp - F_1) * exp_bit.clone() + F_1); + builder.assert_eq(acc_next, acc * exp_val); + builder.assert_eq(exp_b, exp_b_next * F_2 + exp_bit.clone()); + builder.assert_bool(exp_bit); + } + // EXT2MUL let ext_b0 = s0.clone(); let ext_b1 = s1.clone(); let ext_a0 = s2.clone(); @@ -251,126 +173,82 @@ pub fn enforce_main( let ext_d0 = s0_next.clone(); let ext_d1 = s1_next.clone(); let ext_c0 = s2_next.clone(); - let ext_c1 = s3_next.clone(); + let ext_c1 = s3_next; let ext_a0_b0 = ext_a0.clone() * ext_b0.clone(); let ext_a1_b1 = ext_a1.clone() * ext_b1.clone(); - let seven: AB::Expr = AB::Expr::from_u16(7); - assert_zero(builder, &mut idx, is_ext2mul.clone() * (ext_d0 - ext_b0.clone())); - assert_zero(builder, &mut idx, is_ext2mul.clone() * (ext_d1 - ext_b1.clone())); - assert_zero( - builder, - &mut idx, - is_ext2mul.clone() * (ext_c0 - (ext_a0_b0.clone() + seven.clone() * ext_a1_b1.clone())), - ); - assert_zero( - builder, - &mut idx, - is_ext2mul * (ext_c1 - ((ext_a0 + ext_a1) * (ext_b0 + ext_b1) - ext_a0_b0 - ext_a1_b1)), - ); + // EXT2MUL transition: quadratic extension multiplication producing (c0, c1) from (a, b). + { + let gate = builder.is_transition() * is_ext2mul; + let builder = &mut builder.when(gate); + builder.assert_eq(ext_d0, ext_b0.clone()); + builder.assert_eq(ext_d1, ext_b1.clone()); + builder.assert_eq(ext_c0, ext_a0_b0.clone() + ext_a1_b1.clone() * F_7); + builder.assert_eq(ext_c1, (ext_a0 + ext_a1) * (ext_b0 + ext_b1) - ext_a0_b0 - ext_a1_b1); + } // ------------------------------------------------------------------------- // U32 ops // ------------------------------------------------------------------------- - let two_pow_16: AB::Expr = AB::Expr::from_u64(1u64 << 16); - let two_pow_32: AB::Expr = AB::Expr::from_u64(1u64 << 32); - let two_pow_48: AB::Expr = AB::Expr::from_u64(1u64 << 48); - let two_pow_32_minus_one: AB::Expr = AB::Expr::from_u64((1u64 << 32) - 1); - // U32 limbs: v_lo = h1*2^16 + h0, v_hi = h3*2^16 + h2. - let u32_v_lo = uop_h1.clone() * two_pow_16.clone() + uop_h0.clone(); - let u32_v_hi = uop_h3.clone() * two_pow_16 + uop_h2.clone(); - let u32_v48 = uop_h2.clone() * two_pow_32.clone() + u32_v_lo.clone(); - let u32_v64 = uop_h3.clone() * two_pow_48 + u32_v48.clone(); + let u32_v_lo = uop_h1 * TWO_POW_16 + uop_h0.clone(); + let u32_v_hi = uop_h3.clone() * TWO_POW_16 + uop_h2.clone(); + let u32_v48 = uop_h2 * TWO_POW_32 + u32_v_lo.clone(); + let u32_v64 = uop_h3 * TWO_POW_48 + u32_v48.clone(); // Element validity check for u32split/u32mul/u32madd. + // u32_v_hi_comp * u32_v_lo is intrinsic (symmetry test: setting either factor to 0 hides a + // case). let u32_split_mul_madd = is_u32split.clone() + is_u32mul.clone() + is_u32madd.clone(); - let u32_v_hi_comp = AB::Expr::ONE - uop_h4.clone() * (two_pow_32_minus_one - u32_v_hi.clone()); - assert_zero_integrity( - builder, - &mut idx, - u32_split_mul_madd * (u32_v_hi_comp * u32_v_lo.clone()), - ); + let u32_v_hi_comp = + AB::Expr::ONE - uop_h4 * (AB::Expr::from(TWO_POW_32_MINUS_1) - u32_v_hi.clone()); + builder.when(u32_split_mul_madd).assert_zero(u32_v_hi_comp * u32_v_lo.clone()); + // U32 ops with two outputs: s0' = v_lo, s1' = v_hi. let u32_two_outputs = is_u32split.clone() + is_u32add.clone() + is_u32add3.clone() + is_u32mul.clone() + is_u32madd.clone(); - assert_zero( - builder, - &mut idx, - u32_two_outputs.clone() * (s0_next.clone() - u32_v_lo.clone()), - ); - assert_zero(builder, &mut idx, u32_two_outputs * (s1_next.clone() - u32_v_hi.clone())); - - assert_zero_integrity(builder, &mut idx, is_u32split * (s0.clone() - u32_v64.clone())); - assert_zero_integrity( - builder, - &mut idx, - is_u32add * (s0.clone() + s1.clone() - u32_v48.clone()), - ); - assert_zero_integrity( - builder, - &mut idx, - is_u32add3 * (s0.clone() + s1.clone() + s2.clone() - u32_v48.clone()), - ); - - assert_zero( - builder, - &mut idx, - is_u32sub.clone() - * (s1.clone() - (s0.clone() + s1_next.clone() - s0_next.clone() * two_pow_32.clone())), - ); - assert_zero( - builder, - &mut idx, - is_u32sub.clone() * (s0_next.clone() * (s0_next.clone() - AB::Expr::ONE)), - ); - assert_zero(builder, &mut idx, is_u32sub * (s1_next.clone() - u32_v_lo.clone())); - - assert_zero_integrity( - builder, - &mut idx, - is_u32mul * (s0.clone() * s1.clone() - u32_v64.clone()), - ); - assert_zero_integrity( - builder, - &mut idx, - is_u32madd * (s0.clone() * s1.clone() + s2 - u32_v64.clone()), - ); - - assert_zero( - builder, - &mut idx, - is_u32div.clone() * (s1.clone() - (s0.clone() * s1_next.clone() + s0_next.clone())), - ); - assert_zero( - builder, - &mut idx, - is_u32div.clone() * (s1.clone() - s1_next.clone() - u32_v_lo.clone()), - ); - assert_zero( - builder, - &mut idx, - is_u32div * (s0.clone() - s0_next.clone() - (u32_v_hi.clone() + AB::Expr::ONE)), - ); - - assert_zero(builder, &mut idx, is_u32assert2.clone() * (s0_next - u32_v_hi.clone())); - assert_zero(builder, &mut idx, is_u32assert2 * (s1_next - u32_v_lo)); -} - -// CONSTRAINT HELPERS -// ================================================================================================ - -fn assert_zero(builder: &mut AB, idx: &mut usize, expr: AB::Expr) { - tagged_assert_zero(builder, &STACK_ARITH_TAGS, idx, expr); -} - -fn assert_zero_integrity( - builder: &mut AB, - idx: &mut usize, - expr: AB::Expr, -) { - tagged_assert_zero_integrity(builder, &STACK_ARITH_TAGS, idx, expr); + { + let gate = builder.is_transition() * u32_two_outputs; + let builder = &mut builder.when(gate); + builder.assert_eq(s0_next.clone(), u32_v_lo.clone()); + builder.assert_eq(s1_next.clone(), u32_v_hi.clone()); + } + + builder.when(is_u32split).assert_eq(s0.clone(), u32_v64.clone()); + builder.when(is_u32add).assert_eq(s0.clone() + s1.clone(), u32_v48.clone()); + builder + .when(is_u32add3) + .assert_eq(s0.clone() + s1.clone() + s2.clone(), u32_v48); + + // U32SUB: s1 = s0 + s1' - s0' * 2^32, s0' is boolean (borrow), s1' = v_lo. + { + let gate = builder.is_transition() * is_u32sub; + let builder = &mut builder.when(gate); + builder.assert_eq(s1.clone(), s0.clone() + s1_next.clone() - s0_next.clone() * TWO_POW_32); + builder.assert_bool(s0_next.clone()); + builder.assert_eq(s1_next.clone(), u32_v_lo.clone()); + } + + builder.when(is_u32mul).assert_eq(s0.clone() * s1.clone(), u32_v64.clone()); + builder.when(is_u32madd).assert_eq(s0.clone() * s1.clone() + s2, u32_v64); + + // U32DIV: s1 = s0 * s1' + s0', range checks on remainder and quotient bounds. + { + let gate = builder.is_transition() * is_u32div; + let builder = &mut builder.when(gate); + builder.assert_eq(s1.clone(), s0.clone() * s1_next.clone() + s0_next.clone()); + builder.assert_eq(s1 - s1_next.clone(), u32_v_lo.clone()); + builder.assert_eq(s0 - s0_next.clone(), u32_v_hi.clone() + F_1); + } + + // U32ASSERT2: verifies both stack elements are valid u32 values. + { + let gate = builder.is_transition() * is_u32assert2; + let builder = &mut builder.when(gate); + builder.assert_eq(s0_next, u32_v_hi); + builder.assert_eq(s1_next, u32_v_lo); + } } diff --git a/air/src/constraints/stack/stack_arith/tests.rs b/air/src/constraints/stack/stack_arith/tests.rs index 056b910114..b446899297 100644 --- a/air/src/constraints/stack/stack_arith/tests.rs +++ b/air/src/constraints/stack/stack_arith/tests.rs @@ -12,11 +12,9 @@ use miden_crypto::stark::{ use super::enforce_main; use crate::{ - MainTraceRow, - constraints::op_flags::{ExprDecoderAccess, OpFlags, generate_test_row}, - trace::{ - AUX_TRACE_RAND_CHALLENGES, AUX_TRACE_WIDTH, TRACE_WIDTH, decoder::USER_OP_HELPERS_OFFSET, - }, + MainCols, + constraints::op_flags::{OpFlags, generate_test_row}, + trace::{AUX_TRACE_RAND_CHALLENGES, AUX_TRACE_WIDTH, TRACE_WIDTH}, }; struct ConstraintEvalBuilder { @@ -118,17 +116,18 @@ impl PeriodicAirBuilder for ConstraintEvalBuilder { } } -fn set_u32_helpers(row: &mut MainTraceRow, lo: u32, hi: u32) { - row.decoder[USER_OP_HELPERS_OFFSET] = Felt::new(lo as u64 & 0xffff); - row.decoder[USER_OP_HELPERS_OFFSET + 1] = Felt::new((lo as u64) >> 16); - row.decoder[USER_OP_HELPERS_OFFSET + 2] = Felt::new(hi as u64 & 0xffff); - row.decoder[USER_OP_HELPERS_OFFSET + 3] = Felt::new((hi as u64) >> 16); - row.decoder[USER_OP_HELPERS_OFFSET + 4] = Felt::ZERO; +/// Sets the u32 helper registers (hasher_state[2..7]) in the decoder. +fn set_u32_helpers(row: &mut MainCols, lo: u32, hi: u32) { + row.decoder.hasher_state[2] = Felt::new(lo as u64 & 0xffff); + row.decoder.hasher_state[3] = Felt::new((lo as u64) >> 16); + row.decoder.hasher_state[4] = Felt::new(hi as u64 & 0xffff); + row.decoder.hasher_state[5] = Felt::new((hi as u64) >> 16); + row.decoder.hasher_state[6] = Felt::ZERO; } -fn eval_stack_arith(local: &MainTraceRow, next: &MainTraceRow) -> Vec { +fn eval_stack_arith(local: &MainCols, next: &MainCols) -> Vec { let mut builder = ConstraintEvalBuilder::new(); - let op_flags = OpFlags::new(ExprDecoderAccess::new(local)); + let op_flags = OpFlags::new(&local.decoder, &local.stack, &next.decoder); enforce_main(&mut builder, local, next, &op_flags); builder.evaluations } @@ -139,18 +138,16 @@ fn stack_arith_u32add_constraints_allow_non_u32_operands() { assert!(non_u32.as_canonical_u64() > u32::MAX as u64); let mut local = generate_test_row(opcodes::U32ADD as usize); - local.stack[0] = non_u32; - local.stack[1] = Felt::ONE; + local.stack.top[0] = non_u32; + local.stack.top[1] = Felt::ONE; set_u32_helpers(&mut local, 0, 0); - let op_flags: OpFlags = OpFlags::new(ExprDecoderAccess::new(&local)); + let next = generate_test_row(0); + + let op_flags: OpFlags = OpFlags::new(&local.decoder, &local.stack, &next.decoder); assert_eq!(op_flags.u32add(), Felt::ONE); assert_eq!(op_flags.u32sub(), Felt::ZERO); - let mut next = generate_test_row(0); - next.stack[0] = Felt::ZERO; - next.stack[1] = Felt::ZERO; - let evaluations = eval_stack_arith(&local, &next); assert!( evaluations.iter().all(|value| *value == QuadFelt::ZERO), @@ -165,18 +162,18 @@ fn stack_arith_u32sub_constraints_allow_non_u32_operands() { assert!(non_u32.as_canonical_u64() > u32::MAX as u64); let mut local = generate_test_row(opcodes::U32SUB as usize); - local.stack[0] = Felt::new(12_289); - local.stack[1] = non_u32; + local.stack.top[0] = Felt::new(12_289); + local.stack.top[1] = non_u32; set_u32_helpers(&mut local, diff, 0); - let op_flags: OpFlags = OpFlags::new(ExprDecoderAccess::new(&local)); + let mut next = generate_test_row(0); + next.stack.top[0] = Felt::ONE; + next.stack.top[1] = Felt::new(diff as u64); + + let op_flags: OpFlags = OpFlags::new(&local.decoder, &local.stack, &next.decoder); assert_eq!(op_flags.u32sub(), Felt::ONE); assert_eq!(op_flags.u32add(), Felt::ZERO); - let mut next = generate_test_row(0); - next.stack[0] = Felt::ONE; - next.stack[1] = Felt::new(diff as u64); - let evaluations = eval_stack_arith(&local, &next); assert!( evaluations.iter().all(|value| *value == QuadFelt::ZERO), diff --git a/air/src/constraints/system/columns.rs b/air/src/constraints/system/columns.rs new file mode 100644 index 0000000000..29a3a6f143 --- /dev/null +++ b/air/src/constraints/system/columns.rs @@ -0,0 +1,15 @@ +use miden_core::WORD_SIZE; + +/// System columns in the main execution trace (6 columns). +/// +/// These columns track global execution state: clock cycle, execution context, and +/// the function hash (digest) of the currently executing function. +#[repr(C)] +pub struct SystemCols { + /// Clock cycle counter. + pub clk: T, + /// Context identifier. + pub ctx: T, + /// Function hash (digest) of the currently executing function. + pub fn_hash: [T; WORD_SIZE], +} diff --git a/air/src/constraints/system/mod.rs b/air/src/constraints/system/mod.rs index 9fc00baf1d..a1536fd9be 100644 --- a/air/src/constraints/system/mod.rs +++ b/air/src/constraints/system/mod.rs @@ -29,147 +29,73 @@ //! Note: END operation's restoration is handled by the block stack table (bus-based), //! not by these constraints. These constraints only handle the non-END cases. -use miden_core::field::PrimeCharacteristicRing; -use miden_crypto::stark::air::{AirBuilder, LiftedAirBuilder}; +pub mod columns; + +use miden_crypto::stark::air::AirBuilder; use crate::{ - MainTraceRow, - constraints::{ - op_flags::{ExprDecoderAccess, OpFlags}, - tagging::{ - TaggingAirBuilderExt, - ids::{ - TAG_SYSTEM_CLK_BASE, TAG_SYSTEM_CLK_COUNT, TAG_SYSTEM_CTX_BASE, - TAG_SYSTEM_CTX_COUNT, TAG_SYSTEM_FN_HASH_BASE, - }, - }, - }, - trace::decoder::HASHER_STATE_OFFSET, + MainCols, MidenAirBuilder, + constraints::{constants::F_1, op_flags::OpFlags, utils::BoolNot}, }; -// TAGGING CONSTANTS -// ================================================================================================ - -const SYSTEM_CLK_NAMES: [&str; TAG_SYSTEM_CLK_COUNT] = - ["system.clk.first_row", "system.clk.transition"]; - -const SYSTEM_CTX_NAMES: [&str; TAG_SYSTEM_CTX_COUNT] = - ["system.ctx.call_dyncall", "system.ctx.syscall", "system.ctx.default"]; - -const SYSTEM_FN_HASH_LOAD_NAMESPACE: &str = "system.fn_hash.load"; -const SYSTEM_FN_HASH_PRESERVE_NAMESPACE: &str = "system.fn_hash.preserve"; - // ENTRY POINTS // ================================================================================================ /// Enforces system constraints. pub fn enforce_main( builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, + local: &MainCols, + next: &MainCols, + op_flags: &OpFlags, ) where - AB: LiftedAirBuilder, + AB: MidenAirBuilder, { - enforce_clock_constraint(builder, local, next); - enforce_ctx_constraints(builder, local, next); - enforce_fn_hash_constraints(builder, local, next); -} - -// CONSTRAINT HELPERS -// ================================================================================================ - -/// Enforces the clock constraint: clk' = clk + 1. -pub(crate) fn enforce_clock_constraint( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: LiftedAirBuilder, -{ - builder.tagged(TAG_SYSTEM_CLK_BASE, SYSTEM_CLK_NAMES[0], |builder| { - builder.when_first_row().assert_zero(local.clk.clone()); - }); - - builder.tagged(TAG_SYSTEM_CLK_BASE + 1, SYSTEM_CLK_NAMES[1], |builder| { - builder - .when_transition() - .assert_eq(next.clk.clone(), local.clk.clone() + AB::Expr::ONE); - }); -} - -/// Enforces execution context transition constraints. -pub(crate) fn enforce_ctx_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: LiftedAirBuilder, -{ - let ctx: AB::Expr = local.ctx.clone().into(); - let ctx_next: AB::Expr = next.ctx.clone().into(); - let clk: AB::Expr = local.clk.clone().into(); - - let op_flags = OpFlags::new(ExprDecoderAccess::new(local)); + // Clock: starts at 0, increments by 1 + { + builder.when_first_row().assert_zero(local.system.clk); + builder.when_transition().assert_eq(next.system.clk, local.system.clk + F_1); + } let f_call = op_flags.call(); let f_syscall = op_flags.syscall(); let f_dyncall = op_flags.dyncall(); let f_end = op_flags.end(); - let call_dyncall_flag = f_call.clone() + f_dyncall.clone(); - let expected_new_ctx = clk + AB::Expr::ONE; - builder.tagged(TAG_SYSTEM_CTX_BASE, SYSTEM_CTX_NAMES[0], |builder| { - builder - .when_transition() - .assert_zero(call_dyncall_flag * (ctx_next.clone() - expected_new_ctx)); - }); - - builder.tagged(TAG_SYSTEM_CTX_BASE + 1, SYSTEM_CTX_NAMES[1], |builder| { - builder.when_transition().assert_zero(f_syscall.clone() * ctx_next.clone()); - }); - - let change_ctx_flag = f_call + f_syscall + f_dyncall + f_end; - let default_flag = AB::Expr::ONE - change_ctx_flag; - builder.tagged(TAG_SYSTEM_CTX_BASE + 2, SYSTEM_CTX_NAMES[2], |builder| { - builder.when_transition().assert_zero(default_flag * (ctx_next - ctx)); - }); -} - -/// Enforces function hash transition constraints. -pub(crate) fn enforce_fn_hash_constraints( - builder: &mut AB, - local: &MainTraceRow, - next: &MainTraceRow, -) where - AB: LiftedAirBuilder, -{ - let op_flags = OpFlags::new(ExprDecoderAccess::new(local)); - let f_call = op_flags.call(); - let f_dyncall = op_flags.dyncall(); - let f_end = op_flags.end(); - - let f_load = f_call.clone() + f_dyncall.clone(); - let f_preserve = AB::Expr::ONE - (f_load.clone() + f_end); - - let load_ids: [usize; 4] = core::array::from_fn(|i| TAG_SYSTEM_FN_HASH_BASE + i); - builder.tagged_list(load_ids, SYSTEM_FN_HASH_LOAD_NAMESPACE, |builder| { - builder.when_transition().when(f_load.clone()).assert_zeros( - core::array::from_fn::<_, 4, _>(|i| { - let fn_hash_i_next: AB::Expr = next.fn_hash[i].clone().into(); - let decoder_h_i: AB::Expr = local.decoder[HASHER_STATE_OFFSET + i].clone().into(); - fn_hash_i_next - decoder_h_i - }), - ); - }); - - let preserve_ids: [usize; 4] = core::array::from_fn(|i| TAG_SYSTEM_FN_HASH_BASE + 4 + i); - builder.tagged_list(preserve_ids, SYSTEM_FN_HASH_PRESERVE_NAMESPACE, |builder| { - builder - .when_transition() - .when(f_preserve.clone()) - .assert_zeros(core::array::from_fn::<_, 4, _>(|i| { - let fn_hash_i: AB::Expr = local.fn_hash[i].clone().into(); - let fn_hash_i_next: AB::Expr = next.fn_hash[i].clone().into(); - fn_hash_i_next - fn_hash_i - })); - }); + // Execution context transition constraints (see module doc for transition table) + { + let ctx = local.system.ctx; + let ctx_next = next.system.ctx; + let clk = local.system.clk; + + let call_dyncall_flag = f_call.clone() + f_dyncall.clone(); + let change_ctx_flag = + f_call.clone() + f_syscall.clone() + f_dyncall.clone() + f_end.clone(); + let default_flag = change_ctx_flag.not(); + + let builder = &mut builder.when_transition(); + builder.when(call_dyncall_flag).assert_eq(ctx_next, clk + F_1); + builder.when(f_syscall).assert_zero(ctx_next); + builder.when(default_flag).assert_eq(ctx_next, ctx); + } + + // Function hash transition constraints (see module doc for transition table) + { + let f_load = f_call + f_dyncall; + let f_preserve = (f_load.clone() + f_end).not(); + + let builder = &mut builder.when_transition(); + + { + let builder = &mut builder.when(f_load); + for i in 0..4 { + builder.assert_eq(next.system.fn_hash[i], local.decoder.hasher_state[i]); + } + } + + { + let builder = &mut builder.when(f_preserve); + for i in 0..4 { + builder.assert_eq(next.system.fn_hash[i], local.system.fn_hash[i]); + } + } + } } diff --git a/air/src/constraints/tagging/enabled.rs b/air/src/constraints/tagging/enabled.rs deleted file mode 100644 index 4b5abe3776..0000000000 --- a/air/src/constraints/tagging/enabled.rs +++ /dev/null @@ -1,63 +0,0 @@ -//! Constraint tagging helpers for stable numeric IDs. -//! -//! This module is compiled in tests or when the `testing` feature is enabled, with `std` available. -//! Non-testing or no-std builds use a no-op stub. This keeps call sites clean and avoids `std` -//! machinery in production. - -use miden_crypto::stark::air::LiftedAirBuilder; - -/// Extension methods for tagging constraints. -/// -/// These helpers wrap blocks that should emit a fixed number of assertions. Each assertion -/// consumes one ID from the active tagged block, and the block panics if the count mismatches. -pub trait TaggingAirBuilderExt: LiftedAirBuilder { - /// Tag exactly one asserted constraint. - /// - /// Panics if the wrapped block emits zero or multiple assertions when tagging is enabled. - /// When a constraint assertion fails, the panic message includes the tag namespace and ID. - fn tagged( - &mut self, - id: usize, - namespace: &'static str, - f: impl FnOnce(&mut Self) -> R, - ) -> R { - if !super::state::is_enabled() { - // In debug/check_constraints mode, catch panics and annotate with tag info - let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| f(self))); - match result { - Ok(r) => r, - Err(e) => { - std::eprintln!("CONSTRAINT FAILED: namespace='{}', id={}", namespace, id); - std::panic::resume_unwind(e); - }, - } - } else { - super::state::with_tag(vec![id], namespace, || f(self)) - } - } - - /// Tag a list of asserted constraints (e.g., `assert_zeros` or per-iteration loops). - /// - /// Panics if the wrapped block does not emit exactly `N` assertions when tagging is enabled. - fn tagged_list( - &mut self, - ids: [usize; N], - namespace: &'static str, - f: impl FnOnce(&mut Self) -> R, - ) -> R { - if !super::state::is_enabled() { - let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| f(self))); - match result { - Ok(r) => r, - Err(e) => { - std::eprintln!("CONSTRAINT FAILED: namespace='{}', ids={:?}", namespace, ids); - std::panic::resume_unwind(e); - }, - } - } else { - super::state::with_tag(ids.to_vec(), namespace, || f(self)) - } - } -} - -impl TaggingAirBuilderExt for T {} diff --git a/air/src/constraints/tagging/fallback.rs b/air/src/constraints/tagging/fallback.rs deleted file mode 100644 index 40c93de45f..0000000000 --- a/air/src/constraints/tagging/fallback.rs +++ /dev/null @@ -1,28 +0,0 @@ -//! No-op tagging helpers for non-testing or no-std builds. - -use miden_crypto::stark::air::LiftedAirBuilder; -/// No-op tagging extension for non-testing builds. -/// -/// The methods call the provided closure directly so they have no runtime overhead beyond -/// the call itself (which the optimizer should inline away). -pub trait TaggingAirBuilderExt: LiftedAirBuilder { - fn tagged( - &mut self, - _id: usize, - _namespace: &'static str, - f: impl FnOnce(&mut Self) -> R, - ) -> R { - f(self) - } - - fn tagged_list( - &mut self, - _ids: [usize; N], - _namespace: &'static str, - f: impl FnOnce(&mut Self) -> R, - ) -> R { - f(self) - } -} - -impl TaggingAirBuilderExt for T {} diff --git a/air/src/constraints/tagging/fixtures.rs b/air/src/constraints/tagging/fixtures.rs deleted file mode 100644 index 582ce11f61..0000000000 --- a/air/src/constraints/tagging/fixtures.rs +++ /dev/null @@ -1,2493 +0,0 @@ -//! Test fixtures for constraint tagging. - -use alloc::vec::Vec; - -use miden_core::{Felt, field::QuadFelt}; - -use super::ood_eval::EvalRecord; - -/// Seed used for OOD evaluation fixtures. -pub const OOD_SEED: u64 = 0xc0ffee; - -/// Expected OOD evaluations for the current group. -/// -/// These values are captured from the Rust constraints with seed 0xC0FFEE. -pub fn current_group_expected() -> Vec { - vec![ - EvalRecord { - id: 0, - namespace: "system.clk.first_row", - value: QuadFelt::new([Felt::new(1065013626484053923), Felt::new(0)]), - }, - EvalRecord { - id: 1, - namespace: "system.clk.transition", - value: QuadFelt::new([Felt::new(5561241394822338942), Felt::new(0)]), - }, - EvalRecord { - id: 2, - namespace: "system.ctx.call_dyncall", - value: QuadFelt::new([Felt::new(8631524473419082362), Felt::new(0)]), - }, - EvalRecord { - id: 3, - namespace: "system.ctx.syscall", - value: QuadFelt::new([Felt::new(3242942367983627164), Felt::new(0)]), - }, - EvalRecord { - id: 4, - namespace: "system.ctx.default", - value: QuadFelt::new([Felt::new(2699910395066589652), Felt::new(0)]), - }, - EvalRecord { - id: 5, - namespace: "system.fn_hash.load", - value: QuadFelt::new([Felt::new(5171717963692258605), Felt::new(0)]), - }, - EvalRecord { - id: 6, - namespace: "system.fn_hash.load", - value: QuadFelt::new([Felt::new(8961147296413400172), Felt::new(0)]), - }, - EvalRecord { - id: 7, - namespace: "system.fn_hash.load", - value: QuadFelt::new([Felt::new(11894020196642675053), Felt::new(0)]), - }, - EvalRecord { - id: 8, - namespace: "system.fn_hash.load", - value: QuadFelt::new([Felt::new(16889079421217525114), Felt::new(0)]), - }, - EvalRecord { - id: 9, - namespace: "system.fn_hash.preserve", - value: QuadFelt::new([Felt::new(11909329801663906014), Felt::new(0)]), - }, - EvalRecord { - id: 10, - namespace: "system.fn_hash.preserve", - value: QuadFelt::new([Felt::new(6717961555159342431), Felt::new(0)]), - }, - EvalRecord { - id: 11, - namespace: "system.fn_hash.preserve", - value: QuadFelt::new([Felt::new(3950851291570048124), Felt::new(0)]), - }, - EvalRecord { - id: 12, - namespace: "system.fn_hash.preserve", - value: QuadFelt::new([Felt::new(11146653144264413142), Felt::new(0)]), - }, - EvalRecord { - id: 13, - namespace: "range.main.v.first_row", - value: QuadFelt::new([Felt::new(1112338059331632069), Felt::new(0)]), - }, - EvalRecord { - id: 14, - namespace: "range.main.v.last_row", - value: QuadFelt::new([Felt::new(13352757668188868927), Felt::new(0)]), - }, - EvalRecord { - id: 15, - namespace: "range.main.v.transition", - value: QuadFelt::new([Felt::new(12797082443503681195), Felt::new(0)]), - }, - EvalRecord { - id: 16, - namespace: "stack.general.transition.0", - value: QuadFelt::new([Felt::new(2617308096902219240), Felt::new(0)]), - }, - EvalRecord { - id: 17, - namespace: "stack.general.transition.1", - value: QuadFelt::new([Felt::new(4439102810547612775), Felt::new(0)]), - }, - EvalRecord { - id: 18, - namespace: "stack.general.transition.2", - value: QuadFelt::new([Felt::new(15221140463513662734), Felt::new(0)]), - }, - EvalRecord { - id: 19, - namespace: "stack.general.transition.3", - value: QuadFelt::new([Felt::new(4910128267170087966), Felt::new(0)]), - }, - EvalRecord { - id: 20, - namespace: "stack.general.transition.4", - value: QuadFelt::new([Felt::new(8221884229886405628), Felt::new(0)]), - }, - EvalRecord { - id: 21, - namespace: "stack.general.transition.5", - value: QuadFelt::new([Felt::new(87491100192562680), Felt::new(0)]), - }, - EvalRecord { - id: 22, - namespace: "stack.general.transition.6", - value: QuadFelt::new([Felt::new(11411892308848385202), Felt::new(0)]), - }, - EvalRecord { - id: 23, - namespace: "stack.general.transition.7", - value: QuadFelt::new([Felt::new(2425094460891103256), Felt::new(0)]), - }, - EvalRecord { - id: 24, - namespace: "stack.general.transition.8", - value: QuadFelt::new([Felt::new(2767534397043537043), Felt::new(0)]), - }, - EvalRecord { - id: 25, - namespace: "stack.general.transition.9", - value: QuadFelt::new([Felt::new(11686523590994044007), Felt::new(0)]), - }, - EvalRecord { - id: 26, - namespace: "stack.general.transition.10", - value: QuadFelt::new([Felt::new(15000969044032170777), Felt::new(0)]), - }, - EvalRecord { - id: 27, - namespace: "stack.general.transition.11", - value: QuadFelt::new([Felt::new(17422355615541008592), Felt::new(0)]), - }, - EvalRecord { - id: 28, - namespace: "stack.general.transition.12", - value: QuadFelt::new([Felt::new(2555448945580115158), Felt::new(0)]), - }, - EvalRecord { - id: 29, - namespace: "stack.general.transition.13", - value: QuadFelt::new([Felt::new(8864896307613509), Felt::new(0)]), - }, - EvalRecord { - id: 30, - namespace: "stack.general.transition.14", - value: QuadFelt::new([Felt::new(3997062422665481459), Felt::new(0)]), - }, - EvalRecord { - id: 31, - namespace: "stack.general.transition.15", - value: QuadFelt::new([Felt::new(6149720027324442163), Felt::new(0)]), - }, - EvalRecord { - id: 32, - namespace: "stack.overflow.depth.first_row", - value: QuadFelt::new([Felt::new(1820735510664294085), Felt::new(0)]), - }, - EvalRecord { - id: 33, - namespace: "stack.overflow.depth.last_row", - value: QuadFelt::new([Felt::new(12520055704510454391), Felt::new(0)]), - }, - EvalRecord { - id: 34, - namespace: "stack.overflow.addr.first_row", - value: QuadFelt::new([Felt::new(9235172344178625178), Felt::new(0)]), - }, - EvalRecord { - id: 35, - namespace: "stack.overflow.addr.last_row", - value: QuadFelt::new([Felt::new(6001883085148683205), Felt::new(0)]), - }, - EvalRecord { - id: 36, - namespace: "stack.overflow.depth.transition", - value: QuadFelt::new([Felt::new(6706883717633639596), Felt::new(0)]), - }, - EvalRecord { - id: 37, - namespace: "stack.overflow.flag.transition", - value: QuadFelt::new([Felt::new(5309566436521762910), Felt::new(0)]), - }, - EvalRecord { - id: 38, - namespace: "stack.overflow.addr.transition", - value: QuadFelt::new([Felt::new(13739720401332236216), Felt::new(0)]), - }, - EvalRecord { - id: 39, - namespace: "stack.overflow.zero_insert.transition", - value: QuadFelt::new([Felt::new(15830245309845547857), Felt::new(0)]), - }, - EvalRecord { - id: 40, - namespace: "stack.ops.pad", - value: QuadFelt::new([Felt::new(13331629930659656176), Felt::new(0)]), - }, - EvalRecord { - id: 41, - namespace: "stack.ops.dup", - value: QuadFelt::new([Felt::new(756650319667756050), Felt::new(0)]), - }, - EvalRecord { - id: 42, - namespace: "stack.ops.dup1", - value: QuadFelt::new([Felt::new(8866275161884692697), Felt::new(0)]), - }, - EvalRecord { - id: 43, - namespace: "stack.ops.dup2", - value: QuadFelt::new([Felt::new(3836534398031583164), Felt::new(0)]), - }, - EvalRecord { - id: 44, - namespace: "stack.ops.dup3", - value: QuadFelt::new([Felt::new(14027345575708861734), Felt::new(0)]), - }, - EvalRecord { - id: 45, - namespace: "stack.ops.dup4", - value: QuadFelt::new([Felt::new(6758311777121484896), Felt::new(0)]), - }, - EvalRecord { - id: 46, - namespace: "stack.ops.dup5", - value: QuadFelt::new([Felt::new(3070735592903657788), Felt::new(0)]), - }, - EvalRecord { - id: 47, - namespace: "stack.ops.dup6", - value: QuadFelt::new([Felt::new(7754656097784875208), Felt::new(0)]), - }, - EvalRecord { - id: 48, - namespace: "stack.ops.dup7", - value: QuadFelt::new([Felt::new(6720121361576140513), Felt::new(0)]), - }, - EvalRecord { - id: 49, - namespace: "stack.ops.dup9", - value: QuadFelt::new([Felt::new(17539764796672551158), Felt::new(0)]), - }, - EvalRecord { - id: 50, - namespace: "stack.ops.dup11", - value: QuadFelt::new([Felt::new(10804911883091000860), Felt::new(0)]), - }, - EvalRecord { - id: 51, - namespace: "stack.ops.dup13", - value: QuadFelt::new([Felt::new(9611708950007293491), Felt::new(0)]), - }, - EvalRecord { - id: 52, - namespace: "stack.ops.dup15", - value: QuadFelt::new([Felt::new(8853070398648442411), Felt::new(0)]), - }, - EvalRecord { - id: 53, - namespace: "stack.ops.clk", - value: QuadFelt::new([Felt::new(9109734313690111543), Felt::new(0)]), - }, - EvalRecord { - id: 54, - namespace: "stack.ops.swap", - value: QuadFelt::new([Felt::new(3018402783504114630), Felt::new(0)]), - }, - EvalRecord { - id: 55, - namespace: "stack.ops.swap", - value: QuadFelt::new([Felt::new(17272825861332302734), Felt::new(0)]), - }, - EvalRecord { - id: 56, - namespace: "stack.ops.movup2", - value: QuadFelt::new([Felt::new(6365383181668196029), Felt::new(0)]), - }, - EvalRecord { - id: 57, - namespace: "stack.ops.movup3", - value: QuadFelt::new([Felt::new(11479712264864576587), Felt::new(0)]), - }, - EvalRecord { - id: 58, - namespace: "stack.ops.movup4", - value: QuadFelt::new([Felt::new(12050324136647260589), Felt::new(0)]), - }, - EvalRecord { - id: 59, - namespace: "stack.ops.movup5", - value: QuadFelt::new([Felt::new(4842889514271599822), Felt::new(0)]), - }, - EvalRecord { - id: 60, - namespace: "stack.ops.movup6", - value: QuadFelt::new([Felt::new(7388624400246275858), Felt::new(0)]), - }, - EvalRecord { - id: 61, - namespace: "stack.ops.movup7", - value: QuadFelt::new([Felt::new(10382124953564405655), Felt::new(0)]), - }, - EvalRecord { - id: 62, - namespace: "stack.ops.movup8", - value: QuadFelt::new([Felt::new(14668661130070444298), Felt::new(0)]), - }, - EvalRecord { - id: 63, - namespace: "stack.ops.movdn2", - value: QuadFelt::new([Felt::new(7617911967740804399), Felt::new(0)]), - }, - EvalRecord { - id: 64, - namespace: "stack.ops.movdn3", - value: QuadFelt::new([Felt::new(10587498815844952065), Felt::new(0)]), - }, - EvalRecord { - id: 65, - namespace: "stack.ops.movdn4", - value: QuadFelt::new([Felt::new(6234074065813353677), Felt::new(0)]), - }, - EvalRecord { - id: 66, - namespace: "stack.ops.movdn5", - value: QuadFelt::new([Felt::new(8228745571736556881), Felt::new(0)]), - }, - EvalRecord { - id: 67, - namespace: "stack.ops.movdn6", - value: QuadFelt::new([Felt::new(1255130201489737978), Felt::new(0)]), - }, - EvalRecord { - id: 68, - namespace: "stack.ops.movdn7", - value: QuadFelt::new([Felt::new(4861541115171604729), Felt::new(0)]), - }, - EvalRecord { - id: 69, - namespace: "stack.ops.movdn8", - value: QuadFelt::new([Felt::new(7218300239612772413), Felt::new(0)]), - }, - EvalRecord { - id: 70, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(1397391365707566947), Felt::new(0)]), - }, - EvalRecord { - id: 71, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(15192275354424729852), Felt::new(0)]), - }, - EvalRecord { - id: 72, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(8991791753517007572), Felt::new(0)]), - }, - EvalRecord { - id: 73, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(6845904526592099338), Felt::new(0)]), - }, - EvalRecord { - id: 74, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(14405008868848810993), Felt::new(0)]), - }, - EvalRecord { - id: 75, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(14818059880037013402), Felt::new(0)]), - }, - EvalRecord { - id: 76, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(12858781526955010288), Felt::new(0)]), - }, - EvalRecord { - id: 77, - namespace: "stack.ops.swapw", - value: QuadFelt::new([Felt::new(4346525868099676574), Felt::new(0)]), - }, - EvalRecord { - id: 78, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(12020803221700843056), Felt::new(0)]), - }, - EvalRecord { - id: 79, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(5905514554571101818), Felt::new(0)]), - }, - EvalRecord { - id: 80, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(13967530246007855218), Felt::new(0)]), - }, - EvalRecord { - id: 81, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(1745280905200466463), Felt::new(0)]), - }, - EvalRecord { - id: 82, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(8273384627661819419), Felt::new(0)]), - }, - EvalRecord { - id: 83, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(17907212562142949954), Felt::new(0)]), - }, - EvalRecord { - id: 84, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(10641837676859047674), Felt::new(0)]), - }, - EvalRecord { - id: 85, - namespace: "stack.ops.swapw2", - value: QuadFelt::new([Felt::new(5696399439164028901), Felt::new(0)]), - }, - EvalRecord { - id: 86, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(261758456050090541), Felt::new(0)]), - }, - EvalRecord { - id: 87, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(13783565204182644984), Felt::new(0)]), - }, - EvalRecord { - id: 88, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(8373199292442046895), Felt::new(0)]), - }, - EvalRecord { - id: 89, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(17987956356814792948), Felt::new(0)]), - }, - EvalRecord { - id: 90, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(15863165148623313437), Felt::new(0)]), - }, - EvalRecord { - id: 91, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(15873554387396407564), Felt::new(0)]), - }, - EvalRecord { - id: 92, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(13572800254923888612), Felt::new(0)]), - }, - EvalRecord { - id: 93, - namespace: "stack.ops.swapw3", - value: QuadFelt::new([Felt::new(37494485778659889), Felt::new(0)]), - }, - EvalRecord { - id: 94, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(5468305410596890575), Felt::new(0)]), - }, - EvalRecord { - id: 95, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(8148573700621797018), Felt::new(0)]), - }, - EvalRecord { - id: 96, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(174223531403505930), Felt::new(0)]), - }, - EvalRecord { - id: 97, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(7472429897136677074), Felt::new(0)]), - }, - EvalRecord { - id: 98, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(9085995615849733227), Felt::new(0)]), - }, - EvalRecord { - id: 99, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(17751305329307070351), Felt::new(0)]), - }, - EvalRecord { - id: 100, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(12464875440922891257), Felt::new(0)]), - }, - EvalRecord { - id: 101, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(7381981033510767101), Felt::new(0)]), - }, - EvalRecord { - id: 102, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(14206386269299463916), Felt::new(0)]), - }, - EvalRecord { - id: 103, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(5165712881513112310), Felt::new(0)]), - }, - EvalRecord { - id: 104, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(9505024677507267655), Felt::new(0)]), - }, - EvalRecord { - id: 105, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(7199235098885318815), Felt::new(0)]), - }, - EvalRecord { - id: 106, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(14863071265127885763), Felt::new(0)]), - }, - EvalRecord { - id: 107, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(7964997496183729586), Felt::new(0)]), - }, - EvalRecord { - id: 108, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(17447611484236572336), Felt::new(0)]), - }, - EvalRecord { - id: 109, - namespace: "stack.ops.swapdw", - value: QuadFelt::new([Felt::new(7663698430658282360), Felt::new(0)]), - }, - EvalRecord { - id: 110, - namespace: "stack.ops.cswap", - value: QuadFelt::new([Felt::new(7787471015064615045), Felt::new(0)]), - }, - EvalRecord { - id: 111, - namespace: "stack.ops.cswap", - value: QuadFelt::new([Felt::new(18107469477286194402), Felt::new(0)]), - }, - EvalRecord { - id: 112, - namespace: "stack.ops.cswap", - value: QuadFelt::new([Felt::new(8228755909294702214), Felt::new(0)]), - }, - EvalRecord { - id: 113, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(4517595434872149482), Felt::new(0)]), - }, - EvalRecord { - id: 114, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(7382517392819628451), Felt::new(0)]), - }, - EvalRecord { - id: 115, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(4827417633003237585), Felt::new(0)]), - }, - EvalRecord { - id: 116, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(17779390882653606052), Felt::new(0)]), - }, - EvalRecord { - id: 117, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(16587491652407655425), Felt::new(0)]), - }, - EvalRecord { - id: 118, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(6936098212561125534), Felt::new(0)]), - }, - EvalRecord { - id: 119, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(5094958697700743127), Felt::new(0)]), - }, - EvalRecord { - id: 120, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(189412762651021203), Felt::new(0)]), - }, - EvalRecord { - id: 121, - namespace: "stack.ops.cswapw", - value: QuadFelt::new([Felt::new(8308993958309806023), Felt::new(0)]), - }, - EvalRecord { - id: 122, - namespace: "stack.system.assert", - value: QuadFelt::new([Felt::new(8348363779099446030), Felt::new(0)]), - }, - EvalRecord { - id: 123, - namespace: "stack.system.caller", - value: QuadFelt::new([Felt::new(16674981897661760210), Felt::new(0)]), - }, - EvalRecord { - id: 124, - namespace: "stack.system.caller", - value: QuadFelt::new([Felt::new(14361028107722480662), Felt::new(0)]), - }, - EvalRecord { - id: 125, - namespace: "stack.system.caller", - value: QuadFelt::new([Felt::new(9738252875195915138), Felt::new(0)]), - }, - EvalRecord { - id: 126, - namespace: "stack.system.caller", - value: QuadFelt::new([Felt::new(15161342143096572193), Felt::new(0)]), - }, - EvalRecord { - id: 127, - namespace: "stack.io.sdepth", - value: QuadFelt::new([Felt::new(9690568048381717864), Felt::new(0)]), - }, - EvalRecord { - id: 128, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(17937887291797883479), Felt::new(0)]), - }, - EvalRecord { - id: 129, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(11908736431023673542), Felt::new(0)]), - }, - EvalRecord { - id: 130, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(18105562502454236716), Felt::new(0)]), - }, - EvalRecord { - id: 131, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(15799139763294649284), Felt::new(0)]), - }, - EvalRecord { - id: 132, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(7224624742251809524), Felt::new(0)]), - }, - EvalRecord { - id: 133, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(14713127601944781749), Felt::new(0)]), - }, - EvalRecord { - id: 134, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(4202220903610188749), Felt::new(0)]), - }, - EvalRecord { - id: 135, - namespace: "stack.crypto.cryptostream", - value: QuadFelt::new([Felt::new(9998908244088102232), Felt::new(0)]), - }, - EvalRecord { - id: 136, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(18101917804399224912), Felt::new(0)]), - }, - EvalRecord { - id: 137, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(16909895937372697125), Felt::new(0)]), - }, - EvalRecord { - id: 138, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(10693277052771069407), Felt::new(0)]), - }, - EvalRecord { - id: 139, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(329561631878568881), Felt::new(0)]), - }, - EvalRecord { - id: 140, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(12117531460948590964), Felt::new(0)]), - }, - EvalRecord { - id: 141, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(14660895036932353798), Felt::new(0)]), - }, - EvalRecord { - id: 142, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(5463780172466061417), Felt::new(0)]), - }, - EvalRecord { - id: 143, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(13269287806059714444), Felt::new(0)]), - }, - EvalRecord { - id: 144, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(14268973456675506697), Felt::new(0)]), - }, - EvalRecord { - id: 145, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(7411063940606333224), Felt::new(0)]), - }, - EvalRecord { - id: 146, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(17351329952264804328), Felt::new(0)]), - }, - EvalRecord { - id: 147, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(15216727633086231824), Felt::new(0)]), - }, - EvalRecord { - id: 148, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(5786698180654301638), Felt::new(0)]), - }, - EvalRecord { - id: 149, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(1735941033504199606), Felt::new(0)]), - }, - EvalRecord { - id: 150, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(8415559196869506674), Felt::new(0)]), - }, - EvalRecord { - id: 151, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(12374820114184953398), Felt::new(0)]), - }, - EvalRecord { - id: 152, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(2975290982061044481), Felt::new(0)]), - }, - EvalRecord { - id: 153, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(13487726821146861348), Felt::new(0)]), - }, - EvalRecord { - id: 154, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(2496160318170116225), Felt::new(0)]), - }, - EvalRecord { - id: 155, - namespace: "stack.crypto.hornerbase", - value: QuadFelt::new([Felt::new(5856306756710794855), Felt::new(0)]), - }, - EvalRecord { - id: 156, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(260400250326588916), Felt::new(0)]), - }, - EvalRecord { - id: 157, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(5379163295940676007), Felt::new(0)]), - }, - EvalRecord { - id: 158, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(6705814595462340524), Felt::new(0)]), - }, - EvalRecord { - id: 159, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(16852984080395904583), Felt::new(0)]), - }, - EvalRecord { - id: 160, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(13387008350417427314), Felt::new(0)]), - }, - EvalRecord { - id: 161, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(15119845774700839718), Felt::new(0)]), - }, - EvalRecord { - id: 162, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(3915128022903602417), Felt::new(0)]), - }, - EvalRecord { - id: 163, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(17001866207964867470), Felt::new(0)]), - }, - EvalRecord { - id: 164, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(5682656534787627884), Felt::new(0)]), - }, - EvalRecord { - id: 165, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(5102175448368345862), Felt::new(0)]), - }, - EvalRecord { - id: 166, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(9998887435632144194), Felt::new(0)]), - }, - EvalRecord { - id: 167, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(3023171536045631401), Felt::new(0)]), - }, - EvalRecord { - id: 168, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(12405533062172242916), Felt::new(0)]), - }, - EvalRecord { - id: 169, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(9477567566467030475), Felt::new(0)]), - }, - EvalRecord { - id: 170, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(1082901338727409004), Felt::new(0)]), - }, - EvalRecord { - id: 171, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(13302599741550075590), Felt::new(0)]), - }, - EvalRecord { - id: 172, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(1539711461559569242), Felt::new(0)]), - }, - EvalRecord { - id: 173, - namespace: "stack.crypto.hornerext", - value: QuadFelt::new([Felt::new(763382803763729461), Felt::new(0)]), - }, - EvalRecord { - id: 174, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(10902677489429705288), Felt::new(0)]), - }, - EvalRecord { - id: 175, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(13746784898393263179), Felt::new(0)]), - }, - EvalRecord { - id: 176, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(9104478381780738924), Felt::new(0)]), - }, - EvalRecord { - id: 177, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(11764318678486106140), Felt::new(0)]), - }, - EvalRecord { - id: 178, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(2958964708817374799), Felt::new(0)]), - }, - EvalRecord { - id: 179, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(4877568786525925945), Felt::new(0)]), - }, - EvalRecord { - id: 180, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(14325414352239611731), Felt::new(0)]), - }, - EvalRecord { - id: 181, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(12176315501667034457), Felt::new(0)]), - }, - EvalRecord { - id: 182, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(622668130385917638), Felt::new(0)]), - }, - EvalRecord { - id: 183, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(10371767423392596861), Felt::new(0)]), - }, - EvalRecord { - id: 184, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(16661669905045469423), Felt::new(0)]), - }, - EvalRecord { - id: 185, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(11037640527511210287), Felt::new(0)]), - }, - EvalRecord { - id: 186, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(4529379510060783819), Felt::new(0)]), - }, - EvalRecord { - id: 187, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(10467725679793790552), Felt::new(0)]), - }, - EvalRecord { - id: 188, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(1334978894937585985), Felt::new(0)]), - }, - EvalRecord { - id: 189, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(3543349630431609071), Felt::new(0)]), - }, - EvalRecord { - id: 190, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(4240513986085002289), Felt::new(0)]), - }, - EvalRecord { - id: 191, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(6059664577006630422), Felt::new(0)]), - }, - EvalRecord { - id: 192, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(12725214528578727964), Felt::new(0)]), - }, - EvalRecord { - id: 193, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(4916738211674761913), Felt::new(0)]), - }, - EvalRecord { - id: 194, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(14882686044466924253), Felt::new(0)]), - }, - EvalRecord { - id: 195, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(7943598369543774403), Felt::new(0)]), - }, - EvalRecord { - id: 196, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(1627344472289715231), Felt::new(0)]), - }, - EvalRecord { - id: 197, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(12544877488521838872), Felt::new(0)]), - }, - EvalRecord { - id: 198, - namespace: "stack.crypto.frie2f4", - value: QuadFelt::new([Felt::new(15675785466104122176), Felt::new(0)]), - }, - EvalRecord { - id: 199, - namespace: "stack.arith.add", - value: QuadFelt::new([Felt::new(12162183238628940886), Felt::new(0)]), - }, - EvalRecord { - id: 200, - namespace: "stack.arith.neg", - value: QuadFelt::new([Felt::new(5581128975715924145), Felt::new(0)]), - }, - EvalRecord { - id: 201, - namespace: "stack.arith.mul", - value: QuadFelt::new([Felt::new(8554389406737436796), Felt::new(0)]), - }, - EvalRecord { - id: 202, - namespace: "stack.arith.inv", - value: QuadFelt::new([Felt::new(5063887741998958642), Felt::new(0)]), - }, - EvalRecord { - id: 203, - namespace: "stack.arith.incr", - value: QuadFelt::new([Felt::new(4639763508506743987), Felt::new(0)]), - }, - EvalRecord { - id: 204, - namespace: "stack.arith.not", - value: QuadFelt::new([Felt::new(4035466692403055130), Felt::new(0)]), - }, - EvalRecord { - id: 205, - namespace: "stack.arith.not", - value: QuadFelt::new([Felt::new(13177116281714227608), Felt::new(0)]), - }, - EvalRecord { - id: 206, - namespace: "stack.arith.and", - value: QuadFelt::new([Felt::new(3385806455961392573), Felt::new(0)]), - }, - EvalRecord { - id: 207, - namespace: "stack.arith.and", - value: QuadFelt::new([Felt::new(10970170501742489729), Felt::new(0)]), - }, - EvalRecord { - id: 208, - namespace: "stack.arith.and", - value: QuadFelt::new([Felt::new(2412459788431241921), Felt::new(0)]), - }, - EvalRecord { - id: 209, - namespace: "stack.arith.or", - value: QuadFelt::new([Felt::new(3841745486638047933), Felt::new(0)]), - }, - EvalRecord { - id: 210, - namespace: "stack.arith.or", - value: QuadFelt::new([Felt::new(3504719246524046533), Felt::new(0)]), - }, - EvalRecord { - id: 211, - namespace: "stack.arith.or", - value: QuadFelt::new([Felt::new(8108995209839065445), Felt::new(0)]), - }, - EvalRecord { - id: 212, - namespace: "stack.arith.eq", - value: QuadFelt::new([Felt::new(14385477599012828093), Felt::new(0)]), - }, - EvalRecord { - id: 213, - namespace: "stack.arith.eq", - value: QuadFelt::new([Felt::new(17777414138310332081), Felt::new(0)]), - }, - EvalRecord { - id: 214, - namespace: "stack.arith.eqz", - value: QuadFelt::new([Felt::new(1585550152724577414), Felt::new(0)]), - }, - EvalRecord { - id: 215, - namespace: "stack.arith.eqz", - value: QuadFelt::new([Felt::new(8914500005861323211), Felt::new(0)]), - }, - EvalRecord { - id: 216, - namespace: "stack.arith.expacc", - value: QuadFelt::new([Felt::new(10821948734140194924), Felt::new(0)]), - }, - EvalRecord { - id: 217, - namespace: "stack.arith.expacc", - value: QuadFelt::new([Felt::new(18138155306684050585), Felt::new(0)]), - }, - EvalRecord { - id: 218, - namespace: "stack.arith.expacc", - value: QuadFelt::new([Felt::new(11221181362690184920), Felt::new(0)]), - }, - EvalRecord { - id: 219, - namespace: "stack.arith.expacc", - value: QuadFelt::new([Felt::new(9522158304362954603), Felt::new(0)]), - }, - EvalRecord { - id: 220, - namespace: "stack.arith.expacc", - value: QuadFelt::new([Felt::new(13901486800460794091), Felt::new(0)]), - }, - EvalRecord { - id: 221, - namespace: "stack.arith.ext2mul", - value: QuadFelt::new([Felt::new(7911065669822474568), Felt::new(0)]), - }, - EvalRecord { - id: 222, - namespace: "stack.arith.ext2mul", - value: QuadFelt::new([Felt::new(3598619357058098113), Felt::new(0)]), - }, - EvalRecord { - id: 223, - namespace: "stack.arith.ext2mul", - value: QuadFelt::new([Felt::new(996509971607279275), Felt::new(0)]), - }, - EvalRecord { - id: 224, - namespace: "stack.arith.ext2mul", - value: QuadFelt::new([Felt::new(13600174711341153155), Felt::new(0)]), - }, - EvalRecord { - id: 225, - namespace: "stack.arith.u32.shared", - value: QuadFelt::new([Felt::new(1597821177308476955), Felt::new(0)]), - }, - EvalRecord { - id: 226, - namespace: "stack.arith.u32.output", - value: QuadFelt::new([Felt::new(13697666666561534208), Felt::new(0)]), - }, - EvalRecord { - id: 227, - namespace: "stack.arith.u32.output", - value: QuadFelt::new([Felt::new(18192033048549134928), Felt::new(0)]), - }, - EvalRecord { - id: 228, - namespace: "stack.arith.u32.split", - value: QuadFelt::new([Felt::new(15868014234137212529), Felt::new(0)]), - }, - EvalRecord { - id: 229, - namespace: "stack.arith.u32.add", - value: QuadFelt::new([Felt::new(3877846355380377379), Felt::new(0)]), - }, - EvalRecord { - id: 230, - namespace: "stack.arith.u32.add3", - value: QuadFelt::new([Felt::new(14996475617734368887), Felt::new(0)]), - }, - EvalRecord { - id: 231, - namespace: "stack.arith.u32.sub", - value: QuadFelt::new([Felt::new(3623920048867462270), Felt::new(0)]), - }, - EvalRecord { - id: 232, - namespace: "stack.arith.u32.sub", - value: QuadFelt::new([Felt::new(5319755831391255333), Felt::new(0)]), - }, - EvalRecord { - id: 233, - namespace: "stack.arith.u32.sub", - value: QuadFelt::new([Felt::new(15655064156696355905), Felt::new(0)]), - }, - EvalRecord { - id: 234, - namespace: "stack.arith.u32.mul", - value: QuadFelt::new([Felt::new(10932857720351146657), Felt::new(0)]), - }, - EvalRecord { - id: 235, - namespace: "stack.arith.u32.madd", - value: QuadFelt::new([Felt::new(5677672016010321812), Felt::new(0)]), - }, - EvalRecord { - id: 236, - namespace: "stack.arith.u32.div", - value: QuadFelt::new([Felt::new(40380517428295215), Felt::new(0)]), - }, - EvalRecord { - id: 237, - namespace: "stack.arith.u32.div", - value: QuadFelt::new([Felt::new(15350419499859122435), Felt::new(0)]), - }, - EvalRecord { - id: 238, - namespace: "stack.arith.u32.div", - value: QuadFelt::new([Felt::new(14341334560480736404), Felt::new(0)]), - }, - EvalRecord { - id: 239, - namespace: "stack.arith.u32.assert2", - value: QuadFelt::new([Felt::new(6089961092604608348), Felt::new(0)]), - }, - EvalRecord { - id: 240, - namespace: "stack.arith.u32.assert2", - value: QuadFelt::new([Felt::new(3427128116590576361), Felt::new(0)]), - }, - EvalRecord { - id: 241, - namespace: "decoder.in_span.first_row", - value: QuadFelt::new([Felt::new(14927496178105230921), Felt::new(0)]), - }, - EvalRecord { - id: 242, - namespace: "decoder.in_span.binary", - value: QuadFelt::new([Felt::new(14486244054610710736), Felt::new(0)]), - }, - EvalRecord { - id: 243, - namespace: "decoder.in_span.span", - value: QuadFelt::new([Felt::new(466300909996410452), Felt::new(0)]), - }, - EvalRecord { - id: 244, - namespace: "decoder.in_span.respan", - value: QuadFelt::new([Felt::new(3338971954421326066), Felt::new(0)]), - }, - EvalRecord { - id: 245, - namespace: "decoder.op_bits.b0.binary", - value: QuadFelt::new([Felt::new(13628791071868321124), Felt::new(0)]), - }, - EvalRecord { - id: 246, - namespace: "decoder.op_bits.b1.binary", - value: QuadFelt::new([Felt::new(2117480814916000258), Felt::new(0)]), - }, - EvalRecord { - id: 247, - namespace: "decoder.op_bits.b2.binary", - value: QuadFelt::new([Felt::new(16926933246570374887), Felt::new(0)]), - }, - EvalRecord { - id: 248, - namespace: "decoder.op_bits.b3.binary", - value: QuadFelt::new([Felt::new(9176310969543325496), Felt::new(0)]), - }, - EvalRecord { - id: 249, - namespace: "decoder.op_bits.b4.binary", - value: QuadFelt::new([Felt::new(7537316481676351991), Felt::new(0)]), - }, - EvalRecord { - id: 250, - namespace: "decoder.op_bits.b5.binary", - value: QuadFelt::new([Felt::new(2144456409708417452), Felt::new(0)]), - }, - EvalRecord { - id: 251, - namespace: "decoder.op_bits.b6.binary", - value: QuadFelt::new([Felt::new(4533994350960751386), Felt::new(0)]), - }, - EvalRecord { - id: 252, - namespace: "decoder.extra.e0", - value: QuadFelt::new([Felt::new(8133745730975361882), Felt::new(0)]), - }, - EvalRecord { - id: 253, - namespace: "decoder.extra.e1", - value: QuadFelt::new([Felt::new(1382945310839592478), Felt::new(0)]), - }, - EvalRecord { - id: 254, - namespace: "decoder.op_bits.u32_prefix.b0", - value: QuadFelt::new([Felt::new(3295186688501169293), Felt::new(0)]), - }, - EvalRecord { - id: 255, - namespace: "decoder.op_bits.very_high.b0", - value: QuadFelt::new([Felt::new(1492924210658182178), Felt::new(0)]), - }, - EvalRecord { - id: 256, - namespace: "decoder.op_bits.very_high.b1", - value: QuadFelt::new([Felt::new(11514104647859742926), Felt::new(0)]), - }, - EvalRecord { - id: 257, - namespace: "decoder.batch_flags.c0.binary", - value: QuadFelt::new([Felt::new(5362129305222679805), Felt::new(0)]), - }, - EvalRecord { - id: 258, - namespace: "decoder.batch_flags.c1.binary", - value: QuadFelt::new([Felt::new(7857195453682114326), Felt::new(0)]), - }, - EvalRecord { - id: 259, - namespace: "decoder.batch_flags.c2.binary", - value: QuadFelt::new([Felt::new(7691051559149421836), Felt::new(0)]), - }, - EvalRecord { - id: 260, - namespace: "decoder.general.split_loop.s0.binary", - value: QuadFelt::new([Felt::new(14496120396244092127), Felt::new(0)]), - }, - EvalRecord { - id: 261, - namespace: "decoder.general.dyn.h4.zero", - value: QuadFelt::new([Felt::new(1277805081675897337), Felt::new(0)]), - }, - EvalRecord { - id: 262, - namespace: "decoder.general.dyn.h5.zero", - value: QuadFelt::new([Felt::new(4194588350245381799), Felt::new(0)]), - }, - EvalRecord { - id: 263, - namespace: "decoder.general.dyn.h6.zero", - value: QuadFelt::new([Felt::new(16022182314963541978), Felt::new(0)]), - }, - EvalRecord { - id: 264, - namespace: "decoder.general.dyn.h7.zero", - value: QuadFelt::new([Felt::new(8836314757936512908), Felt::new(0)]), - }, - EvalRecord { - id: 265, - namespace: "decoder.general.repeat.s0.one", - value: QuadFelt::new([Felt::new(12665553195229242113), Felt::new(0)]), - }, - EvalRecord { - id: 266, - namespace: "decoder.general.repeat.h4.one", - value: QuadFelt::new([Felt::new(7110671376227656729), Felt::new(0)]), - }, - EvalRecord { - id: 267, - namespace: "decoder.general.end.loop.s0.zero", - value: QuadFelt::new([Felt::new(17349561739015487668), Felt::new(0)]), - }, - EvalRecord { - id: 268, - namespace: "decoder.general.end_repeat.h0.carry", - value: QuadFelt::new([Felt::new(14675084366068366020), Felt::new(0)]), - }, - EvalRecord { - id: 269, - namespace: "decoder.general.end_repeat.h1.carry", - value: QuadFelt::new([Felt::new(7206936627190077403), Felt::new(0)]), - }, - EvalRecord { - id: 270, - namespace: "decoder.general.end_repeat.h2.carry", - value: QuadFelt::new([Felt::new(6718740807857903289), Felt::new(0)]), - }, - EvalRecord { - id: 271, - namespace: "decoder.general.end_repeat.h3.carry", - value: QuadFelt::new([Felt::new(17516850364483319430), Felt::new(0)]), - }, - EvalRecord { - id: 272, - namespace: "decoder.general.end_repeat.h4.carry", - value: QuadFelt::new([Felt::new(6539200550348860466), Felt::new(0)]), - }, - EvalRecord { - id: 273, - namespace: "decoder.general.halt.next", - value: QuadFelt::new([Felt::new(46417891308149319), Felt::new(0)]), - }, - EvalRecord { - id: 274, - namespace: "decoder.group_count.delta.binary", - value: QuadFelt::new([Felt::new(14515312709656548917), Felt::new(0)]), - }, - EvalRecord { - id: 275, - namespace: "decoder.group_count.decrement.h0_or_imm", - value: QuadFelt::new([Felt::new(13182337539042779943), Felt::new(0)]), - }, - EvalRecord { - id: 276, - namespace: "decoder.group_count.span_decrement", - value: QuadFelt::new([Felt::new(6058211846758132294), Felt::new(0)]), - }, - EvalRecord { - id: 277, - namespace: "decoder.group_count.end_or_respan.hold", - value: QuadFelt::new([Felt::new(11052268645110095431), Felt::new(0)]), - }, - EvalRecord { - id: 278, - namespace: "decoder.group_count.end.zero", - value: QuadFelt::new([Felt::new(8085923270334721350), Felt::new(0)]), - }, - EvalRecord { - id: 279, - namespace: "decoder.op_group.shift", - value: QuadFelt::new([Felt::new(1312737539633457020), Felt::new(0)]), - }, - EvalRecord { - id: 280, - namespace: "decoder.op_group.end_or_respan.h0.zero", - value: QuadFelt::new([Felt::new(12951763225475877068), Felt::new(0)]), - }, - EvalRecord { - id: 281, - namespace: "decoder.op_index.span_respan.reset", - value: QuadFelt::new([Felt::new(10573491584444022281), Felt::new(0)]), - }, - EvalRecord { - id: 282, - namespace: "decoder.op_index.new_group.reset", - value: QuadFelt::new([Felt::new(6175768744156945971), Felt::new(0)]), - }, - EvalRecord { - id: 283, - namespace: "decoder.op_index.increment", - value: QuadFelt::new([Felt::new(11099022161747498050), Felt::new(0)]), - }, - EvalRecord { - id: 284, - namespace: "decoder.op_index.range", - value: QuadFelt::new([Felt::new(10884671635123915786), Felt::new(0)]), - }, - EvalRecord { - id: 285, - namespace: "decoder.batch_flags.span_sum", - value: QuadFelt::new([Felt::new(3694838697400308733), Felt::new(0)]), - }, - EvalRecord { - id: 286, - namespace: "decoder.batch_flags.zero_when_not_span", - value: QuadFelt::new([Felt::new(3630764990867231714), Felt::new(0)]), - }, - EvalRecord { - id: 287, - namespace: "decoder.batch_flags.h4.zero", - value: QuadFelt::new([Felt::new(2244382601531916648), Felt::new(0)]), - }, - EvalRecord { - id: 288, - namespace: "decoder.batch_flags.h5.zero", - value: QuadFelt::new([Felt::new(15434877991581266285), Felt::new(0)]), - }, - EvalRecord { - id: 289, - namespace: "decoder.batch_flags.h6.zero", - value: QuadFelt::new([Felt::new(7419023179375721027), Felt::new(0)]), - }, - EvalRecord { - id: 290, - namespace: "decoder.batch_flags.h7.zero", - value: QuadFelt::new([Felt::new(7459745966287177285), Felt::new(0)]), - }, - EvalRecord { - id: 291, - namespace: "decoder.batch_flags.h2.zero", - value: QuadFelt::new([Felt::new(11698744832781440772), Felt::new(0)]), - }, - EvalRecord { - id: 292, - namespace: "decoder.batch_flags.h3.zero", - value: QuadFelt::new([Felt::new(8586259512688079232), Felt::new(0)]), - }, - EvalRecord { - id: 293, - namespace: "decoder.batch_flags.h1.zero", - value: QuadFelt::new([Felt::new(7969602088154595265), Felt::new(0)]), - }, - EvalRecord { - id: 294, - namespace: "decoder.addr.hold_in_span", - value: QuadFelt::new([Felt::new(5569758276797826136), Felt::new(0)]), - }, - EvalRecord { - id: 295, - namespace: "decoder.addr.respan.increment", - value: QuadFelt::new([Felt::new(7010123233147094271), Felt::new(0)]), - }, - EvalRecord { - id: 296, - namespace: "decoder.addr.halt.zero", - value: QuadFelt::new([Felt::new(571992094937652912), Felt::new(0)]), - }, - EvalRecord { - id: 297, - namespace: "decoder.control_flow.sp_complement", - value: QuadFelt::new([Felt::new(2368373158779190039), Felt::new(0)]), - }, - EvalRecord { - id: 298, - namespace: "chiplets.selectors.s0.binary", - value: QuadFelt::new([Felt::new(13339369523717109295), Felt::new(0)]), - }, - EvalRecord { - id: 299, - namespace: "chiplets.selectors.s1.binary", - value: QuadFelt::new([Felt::new(5399081030326323264), Felt::new(0)]), - }, - EvalRecord { - id: 300, - namespace: "chiplets.selectors.s2.binary", - value: QuadFelt::new([Felt::new(12423271937388024622), Felt::new(0)]), - }, - EvalRecord { - id: 301, - namespace: "chiplets.selectors.s3.binary", - value: QuadFelt::new([Felt::new(6104289749728022881), Felt::new(0)]), - }, - EvalRecord { - id: 302, - namespace: "chiplets.selectors.s4.binary", - value: QuadFelt::new([Felt::new(1241452016395320053), Felt::new(0)]), - }, - EvalRecord { - id: 303, - namespace: "chiplets.selectors.s0.stability", - value: QuadFelt::new([Felt::new(14729701512419667041), Felt::new(0)]), - }, - EvalRecord { - id: 304, - namespace: "chiplets.selectors.s1.stability", - value: QuadFelt::new([Felt::new(8909164618174988456), Felt::new(0)]), - }, - EvalRecord { - id: 305, - namespace: "chiplets.selectors.s2.stability", - value: QuadFelt::new([Felt::new(17247285692427399965), Felt::new(0)]), - }, - EvalRecord { - id: 306, - namespace: "chiplets.selectors.s3.stability", - value: QuadFelt::new([Felt::new(18202363660063267394), Felt::new(0)]), - }, - EvalRecord { - id: 307, - namespace: "chiplets.selectors.s4.stability", - value: QuadFelt::new([Felt::new(6610185862666795331), Felt::new(0)]), - }, - EvalRecord { - id: 308, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(4099164774137728313), Felt::new(0)]), - }, - EvalRecord { - id: 309, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(14454658395404025559), Felt::new(0)]), - }, - EvalRecord { - id: 310, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(14045750606291612344), Felt::new(0)]), - }, - EvalRecord { - id: 311, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(4962577616206122596), Felt::new(0)]), - }, - EvalRecord { - id: 312, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(17693281290536116739), Felt::new(0)]), - }, - EvalRecord { - id: 313, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(2566307954601069485), Felt::new(0)]), - }, - EvalRecord { - id: 314, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(7014825251917345868), Felt::new(0)]), - }, - EvalRecord { - id: 315, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(12643485402937350728), Felt::new(0)]), - }, - EvalRecord { - id: 316, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(13773518984372045426), Felt::new(0)]), - }, - EvalRecord { - id: 317, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(12725128195760136818), Felt::new(0)]), - }, - EvalRecord { - id: 318, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(12789485480014529422), Felt::new(0)]), - }, - EvalRecord { - id: 319, - namespace: "chiplets.hasher.permutation.init", - value: QuadFelt::new([Felt::new(2064555680622899263), Felt::new(0)]), - }, - EvalRecord { - id: 320, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(14965667877036435255), Felt::new(0)]), - }, - EvalRecord { - id: 321, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(8649163745447702544), Felt::new(0)]), - }, - EvalRecord { - id: 322, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(1871614405591673138), Felt::new(0)]), - }, - EvalRecord { - id: 323, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(3904379054162154278), Felt::new(0)]), - }, - EvalRecord { - id: 324, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(14269032524621289009), Felt::new(0)]), - }, - EvalRecord { - id: 325, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(819271014970897034), Felt::new(0)]), - }, - EvalRecord { - id: 326, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(7445347300254257143), Felt::new(0)]), - }, - EvalRecord { - id: 327, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(18264241495848405505), Felt::new(0)]), - }, - EvalRecord { - id: 328, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(4022419953426403986), Felt::new(0)]), - }, - EvalRecord { - id: 329, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(16556927457681327599), Felt::new(0)]), - }, - EvalRecord { - id: 330, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(7630095839895141032), Felt::new(0)]), - }, - EvalRecord { - id: 331, - namespace: "chiplets.hasher.permutation.external", - value: QuadFelt::new([Felt::new(17073915086247210099), Felt::new(0)]), - }, - EvalRecord { - id: 332, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(12354414453280530108), Felt::new(0)]), - }, - EvalRecord { - id: 333, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(15162996181146864722), Felt::new(0)]), - }, - EvalRecord { - id: 334, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(3799802584325483032), Felt::new(0)]), - }, - EvalRecord { - id: 335, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(7503666179952416559), Felt::new(0)]), - }, - EvalRecord { - id: 336, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(5195105242383400264), Felt::new(0)]), - }, - EvalRecord { - id: 337, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(2672184473444251603), Felt::new(0)]), - }, - EvalRecord { - id: 338, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(1545887997090789749), Felt::new(0)]), - }, - EvalRecord { - id: 339, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(212978569305465235), Felt::new(0)]), - }, - EvalRecord { - id: 340, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(7828622218965306157), Felt::new(0)]), - }, - EvalRecord { - id: 341, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(15313472288808367905), Felt::new(0)]), - }, - EvalRecord { - id: 342, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(1544567903496578828), Felt::new(0)]), - }, - EvalRecord { - id: 343, - namespace: "chiplets.hasher.permutation.internal", - value: QuadFelt::new([Felt::new(6950222684787745222), Felt::new(0)]), - }, - EvalRecord { - id: 344, - namespace: "chiplets.hasher.selectors.binary", - value: QuadFelt::new([Felt::new(17059167507535516774), Felt::new(0)]), - }, - EvalRecord { - id: 345, - namespace: "chiplets.hasher.selectors.binary", - value: QuadFelt::new([Felt::new(2543200120204459519), Felt::new(0)]), - }, - EvalRecord { - id: 346, - namespace: "chiplets.hasher.selectors.binary", - value: QuadFelt::new([Felt::new(17534396985644786691), Felt::new(0)]), - }, - EvalRecord { - id: 347, - namespace: "chiplets.hasher.selectors.stability", - value: QuadFelt::new([Felt::new(6479352521221779748), Felt::new(0)]), - }, - EvalRecord { - id: 348, - namespace: "chiplets.hasher.selectors.stability", - value: QuadFelt::new([Felt::new(210512107158412246), Felt::new(0)]), - }, - EvalRecord { - id: 349, - namespace: "chiplets.hasher.selectors.continuation", - value: QuadFelt::new([Felt::new(15715623607701353500), Felt::new(0)]), - }, - EvalRecord { - id: 350, - namespace: "chiplets.hasher.selectors.invalid", - value: QuadFelt::new([Felt::new(13405975868755856198), Felt::new(0)]), - }, - EvalRecord { - id: 351, - namespace: "chiplets.hasher.abp.capacity", - value: QuadFelt::new([Felt::new(1899048554833837921), Felt::new(0)]), - }, - EvalRecord { - id: 352, - namespace: "chiplets.hasher.abp.capacity", - value: QuadFelt::new([Felt::new(12437244811220538952), Felt::new(0)]), - }, - EvalRecord { - id: 353, - namespace: "chiplets.hasher.abp.capacity", - value: QuadFelt::new([Felt::new(10139411892992277524), Felt::new(0)]), - }, - EvalRecord { - id: 354, - namespace: "chiplets.hasher.abp.capacity", - value: QuadFelt::new([Felt::new(15737189571305100043), Felt::new(0)]), - }, - EvalRecord { - id: 355, - namespace: "chiplets.hasher.output.index", - value: QuadFelt::new([Felt::new(16881983815653283540), Felt::new(0)]), - }, - EvalRecord { - id: 356, - namespace: "chiplets.hasher.merkle.index.binary", - value: QuadFelt::new([Felt::new(13143318647927561805), Felt::new(0)]), - }, - EvalRecord { - id: 357, - namespace: "chiplets.hasher.merkle.index.stability", - value: QuadFelt::new([Felt::new(13941205471766075471), Felt::new(0)]), - }, - EvalRecord { - id: 358, - namespace: "chiplets.hasher.merkle.capacity", - value: QuadFelt::new([Felt::new(5486621160745001548), Felt::new(0)]), - }, - EvalRecord { - id: 359, - namespace: "chiplets.hasher.merkle.capacity", - value: QuadFelt::new([Felt::new(15134096900702524735), Felt::new(0)]), - }, - EvalRecord { - id: 360, - namespace: "chiplets.hasher.merkle.capacity", - value: QuadFelt::new([Felt::new(17576701782509621064), Felt::new(0)]), - }, - EvalRecord { - id: 361, - namespace: "chiplets.hasher.merkle.capacity", - value: QuadFelt::new([Felt::new(14561117990313963177), Felt::new(0)]), - }, - EvalRecord { - id: 362, - namespace: "chiplets.hasher.merkle.digest.rate0", - value: QuadFelt::new([Felt::new(8725087617587926550), Felt::new(0)]), - }, - EvalRecord { - id: 363, - namespace: "chiplets.hasher.merkle.digest.rate0", - value: QuadFelt::new([Felt::new(12515088494833138961), Felt::new(0)]), - }, - EvalRecord { - id: 364, - namespace: "chiplets.hasher.merkle.digest.rate0", - value: QuadFelt::new([Felt::new(6965398204541535664), Felt::new(0)]), - }, - EvalRecord { - id: 365, - namespace: "chiplets.hasher.merkle.digest.rate0", - value: QuadFelt::new([Felt::new(11433229023120737569), Felt::new(0)]), - }, - EvalRecord { - id: 366, - namespace: "chiplets.hasher.merkle.digest.rate1", - value: QuadFelt::new([Felt::new(4884394573065500633), Felt::new(0)]), - }, - EvalRecord { - id: 367, - namespace: "chiplets.hasher.merkle.digest.rate1", - value: QuadFelt::new([Felt::new(16805257998005939804), Felt::new(0)]), - }, - EvalRecord { - id: 368, - namespace: "chiplets.hasher.merkle.digest.rate1", - value: QuadFelt::new([Felt::new(55029178798193706), Felt::new(0)]), - }, - EvalRecord { - id: 369, - namespace: "chiplets.hasher.merkle.digest.rate1", - value: QuadFelt::new([Felt::new(17219870521967201546), Felt::new(0)]), - }, - EvalRecord { - id: 370, - namespace: "chiplets.bitwise.op.binary", - value: QuadFelt::new([Felt::new(15474882094825938582), Felt::new(0)]), - }, - EvalRecord { - id: 371, - namespace: "chiplets.bitwise.op.stability", - value: QuadFelt::new([Felt::new(654157308496499224), Felt::new(0)]), - }, - EvalRecord { - id: 372, - namespace: "chiplets.bitwise.a_bits.binary", - value: QuadFelt::new([Felt::new(1034651076143976640), Felt::new(0)]), - }, - EvalRecord { - id: 373, - namespace: "chiplets.bitwise.a_bits.binary", - value: QuadFelt::new([Felt::new(4003142075320695647), Felt::new(0)]), - }, - EvalRecord { - id: 374, - namespace: "chiplets.bitwise.a_bits.binary", - value: QuadFelt::new([Felt::new(303909215511455897), Felt::new(0)]), - }, - EvalRecord { - id: 375, - namespace: "chiplets.bitwise.a_bits.binary", - value: QuadFelt::new([Felt::new(5362728732691526694), Felt::new(0)]), - }, - EvalRecord { - id: 376, - namespace: "chiplets.bitwise.b_bits.binary", - value: QuadFelt::new([Felt::new(11650758097842027858), Felt::new(0)]), - }, - EvalRecord { - id: 377, - namespace: "chiplets.bitwise.b_bits.binary", - value: QuadFelt::new([Felt::new(7007196355931725843), Felt::new(0)]), - }, - EvalRecord { - id: 378, - namespace: "chiplets.bitwise.b_bits.binary", - value: QuadFelt::new([Felt::new(11561896106611918266), Felt::new(0)]), - }, - EvalRecord { - id: 379, - namespace: "chiplets.bitwise.b_bits.binary", - value: QuadFelt::new([Felt::new(4060803575635852640), Felt::new(0)]), - }, - EvalRecord { - id: 380, - namespace: "chiplets.bitwise.first_row", - value: QuadFelt::new([Felt::new(14840226897639012209), Felt::new(0)]), - }, - EvalRecord { - id: 381, - namespace: "chiplets.bitwise.first_row", - value: QuadFelt::new([Felt::new(15513879563001185502), Felt::new(0)]), - }, - EvalRecord { - id: 382, - namespace: "chiplets.bitwise.first_row", - value: QuadFelt::new([Felt::new(5652235828559265944), Felt::new(0)]), - }, - EvalRecord { - id: 383, - namespace: "chiplets.bitwise.input.transition", - value: QuadFelt::new([Felt::new(12380774213272670463), Felt::new(0)]), - }, - EvalRecord { - id: 384, - namespace: "chiplets.bitwise.input.transition", - value: QuadFelt::new([Felt::new(7940993120185857575), Felt::new(0)]), - }, - EvalRecord { - id: 385, - namespace: "chiplets.bitwise.output.prev", - value: QuadFelt::new([Felt::new(7984380758996607942), Felt::new(0)]), - }, - EvalRecord { - id: 386, - namespace: "chiplets.bitwise.output.aggregate", - value: QuadFelt::new([Felt::new(11338003127856250266), Felt::new(0)]), - }, - EvalRecord { - id: 387, - namespace: "chiplets.memory.binary", - value: QuadFelt::new([Felt::new(6518050416979602887), Felt::new(0)]), - }, - EvalRecord { - id: 388, - namespace: "chiplets.memory.binary", - value: QuadFelt::new([Felt::new(5143376107998730535), Felt::new(0)]), - }, - EvalRecord { - id: 389, - namespace: "chiplets.memory.binary", - value: QuadFelt::new([Felt::new(1931814968789928617), Felt::new(0)]), - }, - EvalRecord { - id: 390, - namespace: "chiplets.memory.binary", - value: QuadFelt::new([Felt::new(15470079227779320896), Felt::new(0)]), - }, - EvalRecord { - id: 391, - namespace: "chiplets.memory.word_idx.zero", - value: QuadFelt::new([Felt::new(15459815149111314868), Felt::new(0)]), - }, - EvalRecord { - id: 392, - namespace: "chiplets.memory.word_idx.zero", - value: QuadFelt::new([Felt::new(15800347411094406640), Felt::new(0)]), - }, - EvalRecord { - id: 393, - namespace: "chiplets.memory.first_row.zero", - value: QuadFelt::new([Felt::new(16535341688150290637), Felt::new(0)]), - }, - EvalRecord { - id: 394, - namespace: "chiplets.memory.first_row.zero", - value: QuadFelt::new([Felt::new(10335801429662869046), Felt::new(0)]), - }, - EvalRecord { - id: 395, - namespace: "chiplets.memory.first_row.zero", - value: QuadFelt::new([Felt::new(17069212044771710732), Felt::new(0)]), - }, - EvalRecord { - id: 396, - namespace: "chiplets.memory.first_row.zero", - value: QuadFelt::new([Felt::new(2325691270454543127), Felt::new(0)]), - }, - EvalRecord { - id: 397, - namespace: "chiplets.memory.delta.inv", - value: QuadFelt::new([Felt::new(3175424288859001789), Felt::new(0)]), - }, - EvalRecord { - id: 398, - namespace: "chiplets.memory.delta.inv", - value: QuadFelt::new([Felt::new(2653406619128719065), Felt::new(0)]), - }, - EvalRecord { - id: 399, - namespace: "chiplets.memory.delta.inv", - value: QuadFelt::new([Felt::new(17858142172042463544), Felt::new(0)]), - }, - EvalRecord { - id: 400, - namespace: "chiplets.memory.delta.inv", - value: QuadFelt::new([Felt::new(6206863499132972446), Felt::new(0)]), - }, - EvalRecord { - id: 401, - namespace: "chiplets.memory.delta.transition", - value: QuadFelt::new([Felt::new(5078351230126014060), Felt::new(0)]), - }, - EvalRecord { - id: 402, - namespace: "chiplets.memory.scw.flag", - value: QuadFelt::new([Felt::new(18433800756547531428), Felt::new(0)]), - }, - EvalRecord { - id: 403, - namespace: "chiplets.memory.scw.reads", - value: QuadFelt::new([Felt::new(1473872865192822987), Felt::new(0)]), - }, - EvalRecord { - id: 404, - namespace: "chiplets.memory.value.consistency", - value: QuadFelt::new([Felt::new(11685142466069024125), Felt::new(0)]), - }, - EvalRecord { - id: 405, - namespace: "chiplets.memory.value.consistency", - value: QuadFelt::new([Felt::new(15197055428524072106), Felt::new(0)]), - }, - EvalRecord { - id: 406, - namespace: "chiplets.memory.value.consistency", - value: QuadFelt::new([Felt::new(14617718835619740558), Felt::new(0)]), - }, - EvalRecord { - id: 407, - namespace: "chiplets.memory.value.consistency", - value: QuadFelt::new([Felt::new(12293856690108503135), Felt::new(0)]), - }, - EvalRecord { - id: 408, - namespace: "chiplets.ace.selector.binary", - value: QuadFelt::new([Felt::new(2923257613600653893), Felt::new(0)]), - }, - EvalRecord { - id: 409, - namespace: "chiplets.ace.selector.binary", - value: QuadFelt::new([Felt::new(4182752542556273997), Felt::new(0)]), - }, - EvalRecord { - id: 410, - namespace: "chiplets.ace.section.flags", - value: QuadFelt::new([Felt::new(6988234832692930146), Felt::new(0)]), - }, - EvalRecord { - id: 411, - namespace: "chiplets.ace.section.flags", - value: QuadFelt::new([Felt::new(835405595669725766), Felt::new(0)]), - }, - EvalRecord { - id: 412, - namespace: "chiplets.ace.section.flags", - value: QuadFelt::new([Felt::new(17586531527103856415), Felt::new(0)]), - }, - EvalRecord { - id: 413, - namespace: "chiplets.ace.section.flags", - value: QuadFelt::new([Felt::new(17554338302334456122), Felt::new(0)]), - }, - EvalRecord { - id: 414, - namespace: "chiplets.ace.section.flags", - value: QuadFelt::new([Felt::new(7430977299237244825), Felt::new(0)]), - }, - EvalRecord { - id: 415, - namespace: "chiplets.ace.section.transition", - value: QuadFelt::new([Felt::new(9634147153406944231), Felt::new(0)]), - }, - EvalRecord { - id: 416, - namespace: "chiplets.ace.section.transition", - value: QuadFelt::new([Felt::new(3218972305890399047), Felt::new(0)]), - }, - EvalRecord { - id: 417, - namespace: "chiplets.ace.section.transition", - value: QuadFelt::new([Felt::new(13940329983080013930), Felt::new(0)]), - }, - EvalRecord { - id: 418, - namespace: "chiplets.ace.section.transition", - value: QuadFelt::new([Felt::new(10279516906957804027), Felt::new(0)]), - }, - EvalRecord { - id: 419, - namespace: "chiplets.ace.read.ids", - value: QuadFelt::new([Felt::new(12585176929173957399), Felt::new(0)]), - }, - EvalRecord { - id: 420, - namespace: "chiplets.ace.read.to_eval", - value: QuadFelt::new([Felt::new(30354383937781757), Felt::new(0)]), - }, - EvalRecord { - id: 421, - namespace: "chiplets.ace.eval.op", - value: QuadFelt::new([Felt::new(12481984196006840571), Felt::new(0)]), - }, - EvalRecord { - id: 422, - namespace: "chiplets.ace.eval.result", - value: QuadFelt::new([Felt::new(10009759308289170950), Felt::new(0)]), - }, - EvalRecord { - id: 423, - namespace: "chiplets.ace.eval.result", - value: QuadFelt::new([Felt::new(9663557940632289707), Felt::new(0)]), - }, - EvalRecord { - id: 424, - namespace: "chiplets.ace.final.zero", - value: QuadFelt::new([Felt::new(13957751954200526468), Felt::new(0)]), - }, - EvalRecord { - id: 425, - namespace: "chiplets.ace.final.zero", - value: QuadFelt::new([Felt::new(13589615335587828352), Felt::new(0)]), - }, - EvalRecord { - id: 426, - namespace: "chiplets.ace.final.zero", - value: QuadFelt::new([Felt::new(6818409555600730615), Felt::new(0)]), - }, - EvalRecord { - id: 427, - namespace: "chiplets.ace.first_row.start", - value: QuadFelt::new([Felt::new(613969461051885369), Felt::new(0)]), - }, - EvalRecord { - id: 428, - namespace: "chiplets.kernel_rom.sfirst.binary", - value: QuadFelt::new([Felt::new(9960038227923904827), Felt::new(0)]), - }, - EvalRecord { - id: 429, - namespace: "chiplets.kernel_rom.digest.contiguity", - value: QuadFelt::new([Felt::new(12113043600978981430), Felt::new(0)]), - }, - EvalRecord { - id: 430, - namespace: "chiplets.kernel_rom.digest.contiguity", - value: QuadFelt::new([Felt::new(15559322172686928295), Felt::new(0)]), - }, - EvalRecord { - id: 431, - namespace: "chiplets.kernel_rom.digest.contiguity", - value: QuadFelt::new([Felt::new(12593211604980696045), Felt::new(0)]), - }, - EvalRecord { - id: 432, - namespace: "chiplets.kernel_rom.digest.contiguity", - value: QuadFelt::new([Felt::new(4420066076215265302), Felt::new(0)]), - }, - EvalRecord { - id: 433, - namespace: "chiplets.kernel_rom.first_row.start", - value: QuadFelt::new([Felt::new(3652575802134874675), Felt::new(0)]), - }, - EvalRecord { - id: 434, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([Felt::new(9595061266498737687), Felt::new(12539219129346040916)]), - }, - EvalRecord { - id: 435, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([Felt::new(9906922257952985525), Felt::new(7135908125271346815)]), - }, - EvalRecord { - id: 436, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([ - Felt::new(12010012593361720439), - Felt::new(12696089236309457996), - ]), - }, - EvalRecord { - id: 437, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([Felt::new(15694046535368016026), Felt::new(2643587524945520847)]), - }, - EvalRecord { - id: 438, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([ - Felt::new(14293326901983424168), - Felt::new(17664958916890505700), - ]), - }, - EvalRecord { - id: 439, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([Felt::new(7543823668837069064), Felt::new(1474978857022258416)]), - }, - EvalRecord { - id: 440, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([Felt::new(12608813705579209032), Felt::new(3989096837606726344)]), - }, - EvalRecord { - id: 441, - namespace: "bus.boundary.first_row", - value: QuadFelt::new([Felt::new(9950426725853620663), Felt::new(6907538708340539779)]), - }, - EvalRecord { - id: 442, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([Felt::new(16755949710966147218), Felt::new(3829676215971849169)]), - }, - EvalRecord { - id: 443, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([Felt::new(3258168421295425687), Felt::new(11322075087561196224)]), - }, - EvalRecord { - id: 444, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([Felt::new(7867249080765390980), Felt::new(6932757161403890473)]), - }, - EvalRecord { - id: 445, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([Felt::new(10129458707234267975), Felt::new(5812206347609968155)]), - }, - EvalRecord { - id: 446, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([Felt::new(3253668216479680364), Felt::new(9725218274111543600)]), - }, - EvalRecord { - id: 447, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([ - Felt::new(10901759410743368556), - Felt::new(10824838696757528120), - ]), - }, - EvalRecord { - id: 448, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([ - Felt::new(11130917779834521749), - Felt::new(17051345074679664416), - ]), - }, - EvalRecord { - id: 449, - namespace: "bus.boundary.last_row", - value: QuadFelt::new([Felt::new(5654815015773734620), Felt::new(8487995846868635892)]), - }, - EvalRecord { - id: 450, - namespace: "range.bus.transition", - value: QuadFelt::new([ - Felt::new(10365289165200035540), - Felt::new(16469718665506609592), - ]), - }, - EvalRecord { - id: 451, - namespace: "stack.overflow.bus.transition", - value: QuadFelt::new([Felt::new(7384164985445418427), Felt::new(3858806565449404456)]), - }, - EvalRecord { - id: 452, - namespace: "decoder.bus.p1.transition", - value: QuadFelt::new([ - Felt::new(11611432650982424455), - Felt::new(10377793451000863001), - ]), - }, - EvalRecord { - id: 453, - namespace: "decoder.bus.p2.transition", - value: QuadFelt::new([ - Felt::new(15040597896341508305), - Felt::new(11465419388996005277), - ]), - }, - EvalRecord { - id: 454, - namespace: "decoder.bus.p3.transition", - value: QuadFelt::new([Felt::new(9395869302542898577), Felt::new(6472917827183803848)]), - }, - EvalRecord { - id: 455, - namespace: "chiplets.bus.hash_kernel.transition", - value: QuadFelt::new([Felt::new(4291070431816775519), Felt::new(7576850277917859979)]), - }, - EvalRecord { - id: 456, - namespace: "chiplets.bus.chiplets.transition", - value: QuadFelt::new([Felt::new(7990980974626587792), Felt::new(5675027937982935418)]), - }, - EvalRecord { - id: 457, - namespace: "chiplets.bus.wiring.transition", - value: QuadFelt::new([Felt::new(7613678356270986878), Felt::new(10445474671979834467)]), - }, - EvalRecord { - id: 458, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(15272471560572797098), Felt::new(0)]), - }, - EvalRecord { - id: 459, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(6210121216967517740), Felt::new(0)]), - }, - EvalRecord { - id: 460, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(6183121070077706579), Felt::new(0)]), - }, - EvalRecord { - id: 461, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(9532591940374591279), Felt::new(0)]), - }, - EvalRecord { - id: 462, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(6543026845990824540), Felt::new(0)]), - }, - EvalRecord { - id: 463, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(12968646586941648028), Felt::new(0)]), - }, - EvalRecord { - id: 464, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(15417838146196464330), Felt::new(0)]), - }, - EvalRecord { - id: 465, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(13833104913151358010), Felt::new(0)]), - }, - EvalRecord { - id: 466, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(16618206067970158350), Felt::new(0)]), - }, - EvalRecord { - id: 467, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(4151771141262045661), Felt::new(0)]), - }, - EvalRecord { - id: 468, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(10573320072889417521), Felt::new(0)]), - }, - EvalRecord { - id: 469, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(10186179372804063393), Felt::new(0)]), - }, - EvalRecord { - id: 470, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(4590904619046098580), Felt::new(0)]), - }, - EvalRecord { - id: 471, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(4720108777520454648), Felt::new(0)]), - }, - EvalRecord { - id: 472, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(1104703905961606104), Felt::new(0)]), - }, - EvalRecord { - id: 473, - namespace: "public_inputs.stack_input", - value: QuadFelt::new([Felt::new(4555570289354185559), Felt::new(0)]), - }, - EvalRecord { - id: 474, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(4934304800106382014), Felt::new(0)]), - }, - EvalRecord { - id: 475, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(5378514856609319392), Felt::new(0)]), - }, - EvalRecord { - id: 476, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(17190327489693035335), Felt::new(0)]), - }, - EvalRecord { - id: 477, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(12600879734326452251), Felt::new(0)]), - }, - EvalRecord { - id: 478, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(5557099402378706294), Felt::new(0)]), - }, - EvalRecord { - id: 479, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(13124668006842155196), Felt::new(0)]), - }, - EvalRecord { - id: 480, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(17115224159882577972), Felt::new(0)]), - }, - EvalRecord { - id: 481, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(329687429495640731), Felt::new(0)]), - }, - EvalRecord { - id: 482, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(17291436379366401128), Felt::new(0)]), - }, - EvalRecord { - id: 483, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(6803320890344610422), Felt::new(0)]), - }, - EvalRecord { - id: 484, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(11244089584150196777), Felt::new(0)]), - }, - EvalRecord { - id: 485, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(4009248599872349722), Felt::new(0)]), - }, - EvalRecord { - id: 486, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(16110944964025361102), Felt::new(0)]), - }, - EvalRecord { - id: 487, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(15140047176671544897), Felt::new(0)]), - }, - EvalRecord { - id: 488, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(16756664313597184040), Felt::new(0)]), - }, - EvalRecord { - id: 489, - namespace: "public_inputs.stack_output", - value: QuadFelt::new([Felt::new(2298685071572703448), Felt::new(0)]), - }, - ] -} - -pub fn active_expected_ood_evals() -> Vec { - current_group_expected() -} diff --git a/air/src/constraints/tagging/ids.rs b/air/src/constraints/tagging/ids.rs deleted file mode 100644 index efbc40d19c..0000000000 --- a/air/src/constraints/tagging/ids.rs +++ /dev/null @@ -1,111 +0,0 @@ -//! Tag group base IDs and sizes. - -/// Base ID for the system constraint group. -pub const TAG_SYSTEM_BASE: usize = 0; -/// Number of system clock constraints. -pub const TAG_SYSTEM_CLK_COUNT: usize = 2; -/// Number of system context constraints. -pub const TAG_SYSTEM_CTX_COUNT: usize = 3; -/// Number of system function-hash constraints. -pub const TAG_SYSTEM_FN_HASH_COUNT: usize = 8; - -/// Base ID for the system clock constraints. -pub const TAG_SYSTEM_CLK_BASE: usize = TAG_SYSTEM_BASE; -/// Base ID for the system context constraints. -pub const TAG_SYSTEM_CTX_BASE: usize = TAG_SYSTEM_CLK_BASE + TAG_SYSTEM_CLK_COUNT; -/// Base ID for the system function-hash constraints. -pub const TAG_SYSTEM_FN_HASH_BASE: usize = TAG_SYSTEM_CTX_BASE + TAG_SYSTEM_CTX_COUNT; - -/// Total number of system constraints in this group. -pub const TAG_SYSTEM_COUNT: usize = - TAG_SYSTEM_CLK_COUNT + TAG_SYSTEM_CTX_COUNT + TAG_SYSTEM_FN_HASH_COUNT; - -/// Base ID for the range checker main constraint group. -pub const TAG_RANGE_MAIN_BASE: usize = TAG_SYSTEM_BASE + TAG_SYSTEM_COUNT; -/// Number of range checker main constraints in this group. -pub const TAG_RANGE_MAIN_COUNT: usize = 3; - -/// Base ID for the stack general constraint group. -pub const TAG_STACK_GENERAL_BASE: usize = TAG_RANGE_MAIN_BASE + TAG_RANGE_MAIN_COUNT; -/// Number of stack general constraints in this group. -pub const TAG_STACK_GENERAL_COUNT: usize = 16; - -/// Base ID for the stack overflow constraint group. -pub const TAG_STACK_OVERFLOW_BASE: usize = TAG_STACK_GENERAL_BASE + TAG_STACK_GENERAL_COUNT; -/// Number of stack overflow constraints in this group. -pub const TAG_STACK_OVERFLOW_COUNT: usize = 8; - -/// Base ID for the stack ops constraint group. -pub const TAG_STACK_OPS_BASE: usize = TAG_STACK_OVERFLOW_BASE + TAG_STACK_OVERFLOW_COUNT; -/// Number of stack ops constraints in this group. -pub const TAG_STACK_OPS_COUNT: usize = 88; - -/// Base ID for the stack crypto constraint group. -pub const TAG_STACK_CRYPTO_BASE: usize = TAG_STACK_OPS_BASE + TAG_STACK_OPS_COUNT; -/// Number of stack crypto constraints in this group. -pub const TAG_STACK_CRYPTO_COUNT: usize = 71; - -/// Base ID for the stack arith/u32 constraint group. -pub const TAG_STACK_ARITH_BASE: usize = TAG_STACK_CRYPTO_BASE + TAG_STACK_CRYPTO_COUNT; -/// Number of stack arith/u32 constraints in this group. -pub const TAG_STACK_ARITH_COUNT: usize = 42; - -/// Base ID for the decoder constraint group. -pub const TAG_DECODER_BASE: usize = TAG_STACK_ARITH_BASE + TAG_STACK_ARITH_COUNT; -/// Number of decoder constraints in this group. -pub const TAG_DECODER_COUNT: usize = 57; - -/// Base ID for the chiplets constraint group. -pub const TAG_CHIPLETS_BASE: usize = TAG_DECODER_BASE + TAG_DECODER_COUNT; -/// Number of chiplets constraints in this group. -/// selectors(10) + hasher(100) + bitwise(17) + memory(22) + ace(20) + kernel_rom(6) = 175 -pub const TAG_CHIPLETS_COUNT: usize = 175; - -/// Base ID for the bus boundary constraint group. -/// 8 first-row (aux columns pinned to identity) + 8 last-row (aux columns bound to finals) = 16. -pub const TAG_BUS_BOUNDARY_BASE: usize = TAG_CHIPLETS_BASE + TAG_CHIPLETS_COUNT; -pub const TAG_BUS_BOUNDARY_FIRST_ROW_COUNT: usize = 8; -pub const TAG_BUS_BOUNDARY_LAST_ROW_COUNT: usize = 8; -pub const TAG_BUS_BOUNDARY_COUNT: usize = - TAG_BUS_BOUNDARY_FIRST_ROW_COUNT + TAG_BUS_BOUNDARY_LAST_ROW_COUNT; - -/// Base ID for the range bus constraint. -pub const TAG_RANGE_BUS_BASE: usize = TAG_BUS_BOUNDARY_BASE + TAG_BUS_BOUNDARY_COUNT; -/// Number of range bus constraints in this group. -pub const TAG_RANGE_BUS_COUNT: usize = 1; - -/// Base ID for the stack overflow bus constraint group. -pub const TAG_STACK_OVERFLOW_BUS_BASE: usize = TAG_RANGE_BUS_BASE + TAG_RANGE_BUS_COUNT; -/// Number of stack overflow bus constraints in this group. -pub const TAG_STACK_OVERFLOW_BUS_COUNT: usize = 1; - -/// Base ID for the decoder bus constraint group. -pub const TAG_DECODER_BUS_BASE: usize = TAG_STACK_OVERFLOW_BUS_BASE + TAG_STACK_OVERFLOW_BUS_COUNT; -/// Number of decoder bus constraints in this group. -pub const TAG_DECODER_BUS_COUNT: usize = 3; - -/// Base ID for the hash-kernel bus constraint. -pub const TAG_HASH_KERNEL_BUS_BASE: usize = TAG_DECODER_BUS_BASE + TAG_DECODER_BUS_COUNT; -/// Number of hash-kernel bus constraints in this group. -pub const TAG_HASH_KERNEL_BUS_COUNT: usize = 1; - -/// Base ID for the chiplets bus constraint. -pub const TAG_CHIPLETS_BUS_BASE: usize = TAG_HASH_KERNEL_BUS_BASE + TAG_HASH_KERNEL_BUS_COUNT; -/// Number of chiplets bus constraints in this group. -pub const TAG_CHIPLETS_BUS_COUNT: usize = 1; - -/// Base ID for the wiring bus constraint. -pub const TAG_WIRING_BUS_BASE: usize = TAG_CHIPLETS_BUS_BASE + TAG_CHIPLETS_BUS_COUNT; -/// Number of wiring bus constraints in this group (ACE + memory range + hasher perm-link). -pub const TAG_WIRING_BUS_COUNT: usize = 3; - -/// Base ID for the public inputs boundary constraint group. -pub const TAG_PUBLIC_INPUTS_BASE: usize = TAG_WIRING_BUS_BASE + TAG_WIRING_BUS_COUNT; -/// Number of public input boundary constraints. -/// 16 stack input first-row + 16 stack output last-row = 32. -#[cfg(all(test, feature = "std"))] -pub const TAG_PUBLIC_INPUTS_COUNT: usize = 32; - -/// Total number of tagged constraints in the current group set. -#[cfg(all(test, feature = "std"))] -pub const TAG_TOTAL_COUNT: usize = TAG_PUBLIC_INPUTS_BASE + TAG_PUBLIC_INPUTS_COUNT; diff --git a/air/src/constraints/tagging/mod.rs b/air/src/constraints/tagging/mod.rs deleted file mode 100644 index b1f55e70e5..0000000000 --- a/air/src/constraints/tagging/mod.rs +++ /dev/null @@ -1,112 +0,0 @@ -//! Constraint tagging helpers for stable numeric IDs. -//! -//! This module dispatches to the full tagging implementation in test/`testing` builds -//! and a no-op fallback in production/no-std builds. - -use miden_crypto::stark::air::{AirBuilder, ExtensionBuilder}; - -pub mod ids; - -#[cfg(all(any(test, feature = "testing"), feature = "std"))] -mod enabled; -#[cfg(not(all(any(test, feature = "testing"), feature = "std")))] -mod fallback; - -#[cfg(all(test, feature = "std"))] -mod fixtures; -#[cfg(all(test, feature = "std"))] -mod ood_eval; -#[cfg(all(any(test, feature = "testing"), feature = "std"))] -mod state; - -#[cfg(all(any(test, feature = "testing"), feature = "std"))] -pub use enabled::*; -#[cfg(not(all(any(test, feature = "testing"), feature = "std")))] -pub use fallback::*; - -/// Tag metadata for a constraint group (base ID + ordered names). -#[derive(Clone, Copy)] -pub struct TagGroup { - pub base: usize, - pub names: &'static [&'static str], -} - -/// Tag and assert a single constraint, advancing the per-group index. -pub fn tagged_assert_zero( - builder: &mut AB, - group: &TagGroup, - idx: &mut usize, - expr: AB::Expr, -) { - debug_assert!(*idx < group.names.len(), "tag index out of bounds"); - let id = group.base + *idx; - let name = group.names[*idx]; - builder.tagged(id, name, |builder| { - builder.when_transition().assert_zero(expr); - }); - *idx += 1; -} - -/// Tag and assert a single integrity constraint, advancing the per-group index. -pub fn tagged_assert_zero_integrity( - builder: &mut AB, - group: &TagGroup, - idx: &mut usize, - expr: AB::Expr, -) { - debug_assert!(*idx < group.names.len(), "tag index out of bounds"); - let id = group.base + *idx; - let name = group.names[*idx]; - builder.tagged(id, name, |builder| { - builder.assert_zero(expr); - }); - *idx += 1; -} - -/// Tag and assert a fixed list of constraints, advancing the per-group index. -pub fn tagged_assert_zeros( - builder: &mut AB, - group: &TagGroup, - idx: &mut usize, - namespace: &'static str, - exprs: [AB::Expr; N], -) { - debug_assert!(*idx + N <= group.names.len(), "tag index out of bounds"); - let ids: [usize; N] = core::array::from_fn(|i| group.base + *idx + i); - builder.tagged_list(ids, namespace, |builder| { - builder.when_transition().assert_zeros(exprs); - }); - *idx += N; -} - -/// Tag and assert a fixed list of integrity constraints, advancing the per-group index. -pub fn tagged_assert_zeros_integrity( - builder: &mut AB, - group: &TagGroup, - idx: &mut usize, - namespace: &'static str, - exprs: [AB::Expr; N], -) { - debug_assert!(*idx + N <= group.names.len(), "tag index out of bounds"); - let ids: [usize; N] = core::array::from_fn(|i| group.base + *idx + i); - builder.tagged_list(ids, namespace, |builder| { - builder.assert_zeros(exprs); - }); - *idx += N; -} - -/// Tag and assert a single extension-field constraint, advancing the per-group index. -pub fn tagged_assert_zero_ext( - builder: &mut AB, - group: &TagGroup, - idx: &mut usize, - expr: AB::ExprEF, -) { - debug_assert!(*idx < group.names.len(), "tag index out of bounds"); - let id = group.base + *idx; - let name = group.names[*idx]; - builder.tagged(id, name, |builder| { - builder.when_transition().assert_zero_ext(expr); - }); - *idx += 1; -} diff --git a/air/src/constraints/tagging/ood_eval.rs b/air/src/constraints/tagging/ood_eval.rs deleted file mode 100644 index c314768e50..0000000000 --- a/air/src/constraints/tagging/ood_eval.rs +++ /dev/null @@ -1,290 +0,0 @@ -//! OOD evaluation helper for tagged constraint parity tests. - -use alloc::vec::Vec; - -use miden_core::{Felt, field::QuadFelt}; -use miden_crypto::stark::{ - air::{AirBuilder, EmptyWindow, ExtensionBuilder, PeriodicAirBuilder, PermutationAirBuilder}, - matrix::RowMajorMatrix, -}; - -use super::state; -use crate::constraints::{chiplets::bitwise, tagging::ids::TAG_TOTAL_COUNT}; - -/// Captured evaluation for a single tagged constraint. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct EvalRecord { - /// Stable numeric ID (zero-based). - pub id: usize, - /// Human-readable namespace for debugging. - pub namespace: &'static str, - /// Constraint evaluation in the quadratic extension field. - pub value: QuadFelt, -} - -/// AIR builder that evaluates each constraint at a random OOD point. -/// -/// All main/aux trace values, row flags, and challenges are pseudo-random but deterministic -/// for a given seed. Each constraint's evaluation is recorded in ID order. -pub struct OodEvalAirBuilder { - main: RowMajorMatrix, - permutation: RowMajorMatrix, - permutation_randomness: Vec, - permutation_values: Vec, - public_values: Vec, - periodic_values: Vec, - first_row: Felt, - last_row: Felt, - transition: Felt, - records: Vec, - used: Vec>, - prev_enabled: bool, -} - -impl OodEvalAirBuilder { - /// Build an OOD evaluator seeded with `seed`. - /// - /// The seed deterministically fills the trace matrices, row flags, and random challenges. - pub fn new(seed: u64) -> Self { - let prev_enabled = state::is_enabled(); - state::set_enabled(true); - - let mut rng = SeededRng::new(seed); - let main = RowMajorMatrix::new( - (0..crate::trace::TRACE_WIDTH * 2).map(|_| rng.next_felt()).collect(), - crate::trace::TRACE_WIDTH, - ); - let permutation = RowMajorMatrix::new( - (0..crate::trace::AUX_TRACE_WIDTH * 2).map(|_| rng.next_quad()).collect(), - crate::trace::AUX_TRACE_WIDTH, - ); - // Only store the actually used (alpha and beta), but consume MAX_MESSAGE_WIDTH - // from the RNG to keep the seed state stable and ensure that the fixtures - // remain unchanged. - let all_randomness: Vec = - (0..crate::trace::MAX_MESSAGE_WIDTH).map(|_| rng.next_quad()).collect(); - let permutation_randomness: Vec = - all_randomness[..crate::trace::AUX_TRACE_RAND_CHALLENGES].to_vec(); - let permutation_values: Vec = - (0..crate::trace::AUX_TRACE_WIDTH).map(|_| rng.next_quad()).collect(); - let first_row = rng.next_felt(); - let last_row = rng.next_felt(); - let transition = rng.next_felt(); - let periodic_values = (0..bitwise::NUM_PERIODIC_COLUMNS).map(|_| rng.next_felt()).collect(); - - // Generate enough random public values for the boundary constraints. - // Minimum tail: 36 elements (16 SI + 16 SO + 4 PC transcript state) + 4 program hash. - let public_values = (0..40).map(|_| rng.next_felt()).collect(); - - Self { - main, - permutation, - permutation_randomness, - permutation_values, - public_values, - periodic_values, - first_row, - last_row, - transition, - records: Vec::new(), - used: vec![None; TAG_TOTAL_COUNT], - prev_enabled, - } - } - - pub fn records(&self) -> &[EvalRecord] { - &self.records - } - - /// Panics if any expected ID was not recorded. - pub fn assert_complete(&self) { - let missing: Vec = self - .used - .iter() - .enumerate() - .filter_map(|(id, entry)| entry.is_none().then_some(id)) - .collect(); - - if !missing.is_empty() { - panic!("missing constraint ids: {missing:?}"); - } - } - - fn record(&mut self, id: usize, namespace: &'static str, value: QuadFelt) { - let expected = self.records.len(); - if id != expected { - panic!("constraint id {} out of order (expected {})", id, expected); - } - if id >= self.used.len() { - panic!("constraint id {} is out of range (max {})", id, self.used.len() - 1); - } - if let Some(prev) = self.used[id] { - panic!("constraint id {} already used (previous namespace: {})", id, prev); - } - self.used[id] = Some(namespace); - self.records.push(EvalRecord { id, namespace, value }); - } -} - -impl Drop for OodEvalAirBuilder { - fn drop(&mut self) { - state::set_enabled(self.prev_enabled); - } -} - -// --- Individual trait impls so the blanket LiftedAirBuilder applies --- - -impl AirBuilder for OodEvalAirBuilder { - type F = Felt; - type Expr = Felt; - type Var = Felt; - type PreprocessedWindow = EmptyWindow; - type MainWindow = RowMajorMatrix; - type PublicVar = Felt; - - fn main(&self) -> Self::MainWindow { - self.main.clone() - } - - fn preprocessed(&self) -> &Self::PreprocessedWindow { - EmptyWindow::empty_ref() - } - - fn is_first_row(&self) -> Self::Expr { - self.first_row - } - - fn is_last_row(&self) -> Self::Expr { - self.last_row - } - - fn is_transition_window(&self, size: usize) -> Self::Expr { - if size == 2 { - self.transition - } else { - panic!("OOD eval only supports a window size of 2"); - } - } - - fn assert_zero>(&mut self, x: I) { - let (id, namespace) = state::consume_tag(); - let value = QuadFelt::from(x.into()); - self.record(id, namespace, value); - } - - fn public_values(&self) -> &[Self::PublicVar] { - &self.public_values - } -} - -impl ExtensionBuilder for OodEvalAirBuilder { - type EF = QuadFelt; - type ExprEF = QuadFelt; - type VarEF = QuadFelt; - - fn assert_zero_ext(&mut self, x: I) - where - I: Into, - { - let (id, namespace) = state::consume_tag(); - let value = x.into(); - self.record(id, namespace, value); - } -} - -impl PermutationAirBuilder for OodEvalAirBuilder { - type MP = RowMajorMatrix; - type RandomVar = QuadFelt; - type PermutationVar = QuadFelt; - - fn permutation(&self) -> Self::MP { - self.permutation.clone() - } - - fn permutation_randomness(&self) -> &[Self::RandomVar] { - &self.permutation_randomness - } - - fn permutation_values(&self) -> &[Self::PermutationVar] { - &self.permutation_values - } -} - -impl PeriodicAirBuilder for OodEvalAirBuilder { - type PeriodicVar = Felt; - - fn periodic_values(&self) -> &[Self::PeriodicVar] { - &self.periodic_values - } -} - -/// Deterministic RNG based on a seed and counter. -struct SeededRng { - seed: u64, - counter: u64, -} - -impl SeededRng { - fn new(seed: u64) -> Self { - Self { seed, counter: 0 } - } - - fn next_felt(&mut self) -> Felt { - let bytes = self.next_seed_bytes(); - miden_crypto::rand::test_utils::prng_value::(bytes) - } - - fn next_quad(&mut self) -> QuadFelt { - QuadFelt::new([self.next_felt(), self.next_felt()]) - } - - fn next_seed_bytes(&mut self) -> [u8; 32] { - let counter = self.counter; - self.counter = self.counter.wrapping_add(1); - let mix = self.seed ^ counter; - let sum = self.seed.wrapping_add(counter); - let mut out = [0u8; 32]; - out[0..8].copy_from_slice(&self.seed.to_le_bytes()); - out[8..16].copy_from_slice(&counter.to_le_bytes()); - out[16..24].copy_from_slice(&mix.to_le_bytes()); - out[24..32].copy_from_slice(&sum.to_le_bytes()); - out - } -} - -#[cfg(test)] -mod tests { - use alloc::vec::Vec; - - use miden_core::{Felt, field::QuadFelt}; - - use super::{ - super::{ - fixtures::{OOD_SEED, active_expected_ood_evals}, - ids::TAG_TOTAL_COUNT, - }, - EvalRecord, OodEvalAirBuilder, - }; - use crate::{LiftedAir, ProcessorAir}; - - fn run_group_parity_test(expected: Vec) { - assert_eq!(expected.len(), TAG_TOTAL_COUNT); - let mut builder = OodEvalAirBuilder::new(OOD_SEED); - LiftedAir::::eval(&ProcessorAir, &mut builder); - builder.assert_complete(); - - let actual = builder.records(); - assert_eq!(actual.len(), expected.len()); - for (actual, expected) in actual.iter().zip(expected.iter()) { - assert_eq!(actual.id, expected.id); - assert_eq!(actual.namespace, expected.namespace); - assert_eq!(actual.value, expected.value); - } - } - - #[test] - #[ignore = "OOD fixture needs regeneration after 16-row perm packing + pre-existing memory ID gap"] - fn test_miden_vm_ood_evals_match() { - run_group_parity_test(active_expected_ood_evals()); - } -} diff --git a/air/src/constraints/tagging/state.rs b/air/src/constraints/tagging/state.rs deleted file mode 100644 index b51c94196a..0000000000 --- a/air/src/constraints/tagging/state.rs +++ /dev/null @@ -1,104 +0,0 @@ -//! Thread-local tagging state for enforcing tag ordering and counts. - -use alloc::vec::Vec; -use std::{ - cell::{Cell, RefCell}, - thread_local, -}; -/// Active tagged block metadata. -#[derive(Debug)] -struct TagContext { - namespace: &'static str, - ids: Vec, - next: usize, -} - -thread_local! { - static TAGGING_ENABLED: Cell = const { Cell::new(false) }; - static TAG_STACK: RefCell> = const { RefCell::new(Vec::new()) }; -} - -/// Returns `true` when tagging is enabled for the current thread. -pub fn is_enabled() -> bool { - TAGGING_ENABLED.with(|flag| flag.get()) -} - -/// Enables or disables tagging for the current thread. -#[cfg(test)] -pub fn set_enabled(enabled: bool) { - TAGGING_ENABLED.with(|flag| flag.set(enabled)); -} - -/// Run `f` under a tagged context with the provided IDs. -/// -/// This enforces: -/// - exactly one tagged context at a time (no nesting), -/// - at least one ID, -/// - and the number of emitted assertions matches the ID list length. -pub fn with_tag(ids: Vec, namespace: &'static str, f: impl FnOnce() -> R) -> R { - if ids.is_empty() { - panic!("tagged block '{namespace}' must include at least one id"); - } - TAG_STACK.with(|stack| { - let mut stack = stack.borrow_mut(); - if !stack.is_empty() { - panic!("nested tagged blocks are not allowed"); - } - stack.push(TagContext { namespace, ids, next: 0 }); - }); - - let result = f(); - - TAG_STACK.with(|stack| { - let mut stack = stack.borrow_mut(); - let ctx = stack.pop().expect("tag stack underflow"); - if ctx.next != ctx.ids.len() { - panic!( - "tagged block '{}' expected {} asserts, saw {}", - ctx.namespace, - ctx.ids.len(), - ctx.next - ); - } - }); - - result -} - -/// Peek at the current tag context without consuming it. -/// Returns (id, namespace) if a tag is active, or None if not. -#[cfg(test)] -#[allow(dead_code)] -pub fn peek_tag() -> Option<(usize, &'static str)> { - TAG_STACK.with(|stack| { - let stack = stack.borrow(); - stack.last().and_then(|ctx| { - if ctx.next < ctx.ids.len() { - Some((ctx.ids[ctx.next], ctx.namespace)) - } else { - None - } - }) - }) -} - -/// Consume the next tag ID for the current tagged context. -/// -/// Panics if called outside a tagged block or if the block emits too many assertions. -#[cfg(test)] -pub fn consume_tag() -> (usize, &'static str) { - TAG_STACK.with(|stack| { - let mut stack = stack.borrow_mut(); - let ctx = stack.last_mut().expect("assertion made without an active tagged block"); - if ctx.next >= ctx.ids.len() { - panic!( - "tagged block '{}' exceeded expected asserts ({})", - ctx.namespace, - ctx.ids.len() - ); - } - let id = ctx.ids[ctx.next]; - ctx.next += 1; - (id, ctx.namespace) - }) -} diff --git a/air/src/constraints/utils.rs b/air/src/constraints/utils.rs new file mode 100644 index 0000000000..2e4173a729 --- /dev/null +++ b/air/src/constraints/utils.rs @@ -0,0 +1,31 @@ +//! Utility extension traits for constraint code. + +use miden_core::field::PrimeCharacteristicRing; + +/// Extension trait adding `.not()` for boolean negation (`1 - self`). +pub trait BoolNot: PrimeCharacteristicRing { + fn not(&self) -> Self { + Self::ONE - self.clone() + } +} + +impl BoolNot for T {} + +/// Aggregate bits into a value (little-endian) using Horner's method: `sum(2^i * limbs[i])`. +/// +/// Evaluates as `((limbs[N-1]*2 + limbs[N-2])*2 + ...)*2 + limbs[0]`. +#[inline] +pub fn horner_eval_bits, E: PrimeCharacteristicRing>( + limbs: &[T; N], +) -> E { + const { + assert! { N >= 1}; + } + limbs + .iter() + .rev() + .cloned() + .map(Into::into) + .reduce(|acc, bit| acc.double() + bit) + .expect("non-empty array") +} diff --git a/air/src/lib.rs b/air/src/lib.rs index b5d94a7c85..187fe7dfde 100644 --- a/air/src/lib.rs +++ b/air/src/lib.rs @@ -24,7 +24,8 @@ pub mod config; mod constraints; pub mod trace; -use trace::{AUX_TRACE_WIDTH, MainTraceRow, TRACE_WIDTH}; +use constraints::columns::MainCols; +use trace::{AUX_TRACE_WIDTH, TRACE_WIDTH, bus_types}; // RE-EXPORTS // ================================================================================================ @@ -45,6 +46,16 @@ mod export { pub use export::*; +// MIDEN AIR BUILDER +// ================================================================================================ + +/// Convenience super-trait that pins `LiftedAirBuilder` to our field. +/// +/// All constraint functions in this crate should be generic over `AB: MidenAirBuilder` +/// instead of spelling out the full `LiftedAirBuilder` bound. +pub trait MidenAirBuilder: LiftedAirBuilder {} +impl> MidenAirBuilder for T {} + // PUBLIC INPUTS // ================================================================================================ @@ -199,9 +210,7 @@ impl BaseAir for ProcessorAir { impl> LiftedAir for ProcessorAir { fn periodic_columns(&self) -> Vec> { - let mut cols = constraints::chiplets::hasher::periodic_columns(); - cols.extend(constraints::chiplets::bitwise::periodic_columns()); - cols + constraints::chiplets::columns::PeriodicCols::periodic_columns() } fn num_randomness(&self) -> usize { @@ -330,7 +339,7 @@ impl> LiftedAir for ProcessorAir { Ok(ReducedAuxValues { prod, sum }) } - fn eval>(&self, builder: &mut AB) { + fn eval(&self, builder: &mut AB) { use crate::constraints; let main = builder.main(); @@ -340,14 +349,20 @@ impl> LiftedAir for ProcessorAir { let next = main.next_slice(); // Use structured column access via MainTraceCols - let local: &MainTraceRow = (*local).borrow(); - let next: &MainTraceRow = (*next).borrow(); + let local: &MainCols = (*local).borrow(); + let next: &MainCols = (*next).borrow(); + + // Build chiplet selectors and op flags once, shared by main and bus constraints. + let selectors = + constraints::chiplets::selectors::build_chiplet_selectors(builder, local, next); + let op_flags = + constraints::op_flags::OpFlags::new(&local.decoder, &local.stack, &next.decoder); // Main trace constraints. - constraints::enforce_main(builder, local, next); + constraints::enforce_main(builder, local, next, &selectors, &op_flags); // Auxiliary (bus) constraints. - constraints::enforce_bus(builder, local, next); + constraints::enforce_bus(builder, local, next, &selectors, &op_flags); // Public inputs boundary constraints. constraints::public_inputs::enforce_main(builder, local); @@ -365,15 +380,18 @@ fn program_hash_message>( challenges: &trace::Challenges, program_hash: &Word, ) -> EF { - challenges.encode([ - Felt::ZERO, // parent_id = 0 (root block) - program_hash[0], - program_hash[1], - program_hash[2], - program_hash[3], - Felt::ZERO, // is_first_child = false - Felt::ZERO, // is_loop_body = false - ]) + challenges.encode( + bus_types::BLOCK_HASH_TABLE, + [ + Felt::ZERO, // parent_id = 0 (root block) + program_hash[0], + program_hash[1], + program_hash[2], + program_hash[3], + Felt::ZERO, // is_first_child = false + Felt::ZERO, // is_loop_body = false + ], + ) } /// Returns the pair of (initial, final) log-precompile transcript messages for the @@ -387,13 +405,10 @@ fn transcript_messages>( ) -> (EF, EF) { let encode = |state: PrecompileTranscriptState| { let cap: &[Felt] = state.as_ref(); - challenges.encode([ - Felt::from_u8(trace::LOG_PRECOMPILE_LABEL), - cap[0], - cap[1], - cap[2], - cap[3], - ]) + challenges.encode( + bus_types::LOG_PRECOMPILE_TRANSCRIPT, + [Felt::from_u8(trace::LOG_PRECOMPILE_LABEL), cap[0], cap[1], cap[2], cap[3]], + ) }; (encode(PrecompileTranscriptState::default()), encode(final_state)) } @@ -406,13 +421,16 @@ fn kernel_proc_message>( challenges: &trace::Challenges, digest: &Word, ) -> EF { - challenges.encode([ - trace::chiplets::kernel_rom::KERNEL_PROC_INIT_LABEL, - digest[0], - digest[1], - digest[2], - digest[3], - ]) + challenges.encode( + bus_types::CHIPLETS_BUS, + [ + trace::chiplets::kernel_rom::KERNEL_PROC_INIT_LABEL, + digest[0], + digest[1], + digest[2], + digest[3], + ], + ) } /// Reduces kernel procedure digests from var-len public inputs into a multiset product. diff --git a/air/src/snapshots/miden_air__config__tests__relation_digest_matches_current_air.snap b/air/src/snapshots/miden_air__config__tests__relation_digest_matches_current_air.snap new file mode 100644 index 0000000000..eac11eba5b --- /dev/null +++ b/air/src/snapshots/miden_air__config__tests__relation_digest_matches_current_air.snap @@ -0,0 +1,7 @@ +--- +source: air/src/config.rs +expression: snapshot +--- +num_inputs: 572 +num_eval_gates: 5588 +relation_digest: [7682526984894530630, 13019009422810970716, 16037978224454945133, 1332031755710493241] diff --git a/air/src/trace/challenges.rs b/air/src/trace/challenges.rs index 4ca7537231..31ffb1b813 100644 --- a/air/src/trace/challenges.rs +++ b/air/src/trace/challenges.rs @@ -1,24 +1,30 @@ -//! Unified bus challenge encoding. +//! Unified bus challenge encoding with per-bus domain separation. //! //! Provides [`Challenges`], a single struct for encoding multiset/LogUp bus messages -//! as `alpha + `. This type is used by: +//! as `bus_prefix[bus] + `. Each bus interaction type gets a unique +//! prefix to ensure domain separation. +//! +//! This type is used by: //! //! - **AIR constraints** (symbolic expressions): `Challenges` //! - **Processor aux trace builders** (concrete field elements): `Challenges` //! - **Verifier** (`reduced_aux_values`): `Challenges` //! //! See [`super::bus_message`] for the standard coefficient index layout. +//! See [`super::bus_types`] for the bus interaction type constants. use core::ops::{AddAssign, Mul}; use miden_core::field::PrimeCharacteristicRing; -use super::MAX_MESSAGE_WIDTH; +use super::{MAX_MESSAGE_WIDTH, bus_types::NUM_BUS_TYPES}; -/// Encodes multiset/LogUp contributions as **alpha + **. +/// Encodes multiset/LogUp contributions as **bus_prefix\[bus\] + \**. /// -/// - `alpha`: randomness base +/// - `alpha`: randomness base (kept public for direct access by range checker etc.) /// - `beta_powers`: precomputed powers `[beta^0, beta^1, ..., beta^(MAX_MESSAGE_WIDTH-1)]` +/// - `bus_prefix`: per-bus domain separation constants `bus_prefix[i] = alpha + (i+1) * +/// beta^MAX_MESSAGE_WIDTH` /// /// The challenges are derived from permutation randomness: /// - `alpha = challenges[0]` @@ -28,50 +34,73 @@ use super::MAX_MESSAGE_WIDTH; pub struct Challenges { pub alpha: EF, pub beta_powers: [EF; MAX_MESSAGE_WIDTH], + /// Per-bus prefix: `bus_prefix[i] = alpha + (i+1) * gamma` + /// where `gamma = beta^MAX_MESSAGE_WIDTH` and `(i+1)` is the domain separator. + pub bus_prefix: [EF; NUM_BUS_TYPES], } impl Challenges { - /// Builds `alpha` and precomputed `beta` powers. + /// Builds `alpha`, precomputed `beta` powers, and per-bus prefixes. pub fn new(alpha: EF, beta: EF) -> Self { let mut beta_powers = core::array::from_fn(|_| EF::ONE); for i in 1..MAX_MESSAGE_WIDTH { beta_powers[i] = beta_powers[i - 1].clone() * beta.clone(); } - Self { alpha, beta_powers } + // gamma = beta^MAX_MESSAGE_WIDTH (one power beyond the message range) + let gamma = beta_powers[MAX_MESSAGE_WIDTH - 1].clone() * beta; + let bus_prefix = + core::array::from_fn(|i| alpha.clone() + gamma.clone() * EF::from_u32((i as u32) + 1)); + Self { alpha, beta_powers, bus_prefix } } - /// Encodes as **alpha + sum(beta_powers\[i\] * elem\[i\])** with K consecutive elements. + /// Encodes as **bus_prefix\[bus\] + sum(beta_powers\[i\] * elem\[i\])** with K consecutive + /// elements. + /// + /// The `bus` parameter is the bus index used for domain separation. #[inline(always)] - pub fn encode(&self, elems: [BF; K]) -> EF + pub fn encode(&self, bus: usize, elems: [BF; K]) -> EF where EF: Mul + AddAssign, - BF: Clone, { const { assert!(K <= MAX_MESSAGE_WIDTH, "Message length exceeds beta_powers capacity") }; - let mut acc = self.alpha.clone(); - for (i, elem) in elems.iter().enumerate() { - acc += self.beta_powers[i].clone() * elem.clone(); + debug_assert!( + bus < NUM_BUS_TYPES, + "Bus index {bus} exceeds NUM_BUS_TYPES ({NUM_BUS_TYPES})" + ); + let mut acc = self.bus_prefix[bus].clone(); + for (i, elem) in elems.into_iter().enumerate() { + acc += self.beta_powers[i].clone() * elem; } acc } - /// Encodes as **alpha + sum(beta_powers\[layout\[i\]\] * values\[i\])** using sparse positions. + /// Encodes as **bus_prefix\[bus\] + sum(beta_powers\[layout\[i\]\] * values\[i\])** using + /// sparse positions. + /// + /// The `bus` parameter is the bus index used for domain separation. #[inline(always)] - pub fn encode_sparse(&self, layout: [usize; K], values: [BF; K]) -> EF + pub fn encode_sparse( + &self, + bus: usize, + layout: [usize; K], + values: [BF; K], + ) -> EF where EF: Mul + AddAssign, - BF: Clone, { - let mut acc = self.alpha.clone(); - for i in 0..K { - let idx = layout[i]; + debug_assert!( + bus < NUM_BUS_TYPES, + "Bus index {bus} exceeds NUM_BUS_TYPES ({NUM_BUS_TYPES})" + ); + let mut acc = self.bus_prefix[bus].clone(); + for (idx, value) in layout.into_iter().zip(values) { debug_assert!( idx < self.beta_powers.len(), "encode_sparse index {} exceeds beta_powers length ({})", idx, self.beta_powers.len() ); - acc += self.beta_powers[idx].clone() * values[i].clone(); + acc += self.beta_powers[idx].clone() * value; } acc } diff --git a/air/src/trace/chiplets/hasher.rs b/air/src/trace/chiplets/hasher.rs index be9a05920f..46840af2be 100644 --- a/air/src/trace/chiplets/hasher.rs +++ b/air/src/trace/chiplets/hasher.rs @@ -111,12 +111,12 @@ pub const IS_BOUNDARY_COL_IDX: usize = MRUPDATE_ID_COL_IDX + 1; /// bit from the node index. Zero on non-Merkle rows and perm segment rows. pub const DIRECTION_BIT_COL_IDX: usize = IS_BOUNDARY_COL_IDX + 1; -/// Index of the perm_seg column (0 = controller region, 1 = permutation segment). -pub const PERM_SEG_COL_IDX: usize = DIRECTION_BIT_COL_IDX + 1; +/// Index of the s_perm column (0 = controller region, 1 = permutation segment). +pub const S_PERM_COL_IDX: usize = DIRECTION_BIT_COL_IDX + 1; /// Number of columns in Hasher execution trace. -/// 3 selectors + 12 state + node_index + mrupdate_id + is_boundary + direction_bit + perm_seg = 20. -pub const TRACE_WIDTH: usize = PERM_SEG_COL_IDX + 1; +/// 3 selectors + 12 state + node_index + mrupdate_id + is_boundary + direction_bit + s_perm = 20. +pub const TRACE_WIDTH: usize = S_PERM_COL_IDX + 1; /// Number of controller rows per permutation request (one input + one output). pub const CONTROLLER_ROWS_PER_PERMUTATION: usize = 2; diff --git a/air/src/trace/chiplets/mod.rs b/air/src/trace/chiplets/mod.rs index e8e360088b..c25a236d21 100644 --- a/air/src/trace/chiplets/mod.rs +++ b/air/src/trace/chiplets/mod.rs @@ -59,8 +59,8 @@ pub const HASHER_MRUPDATE_ID_COL_IDX: usize = HASHER_TRACE_OFFSET + hasher::MRUP pub const HASHER_IS_BOUNDARY_COL_IDX: usize = HASHER_TRACE_OFFSET + hasher::IS_BOUNDARY_COL_IDX; /// The index of the hasher's direction_bit column in the execution trace. pub const HASHER_DIRECTION_BIT_COL_IDX: usize = HASHER_TRACE_OFFSET + hasher::DIRECTION_BIT_COL_IDX; -/// The index of the hasher's perm_seg column in the execution trace. -pub const HASHER_PERM_SEG_COL_IDX: usize = HASHER_TRACE_OFFSET + hasher::PERM_SEG_COL_IDX; +/// The index of the hasher's s_perm column in the execution trace. +pub const HASHER_S_PERM_COL_IDX: usize = HASHER_TRACE_OFFSET + hasher::S_PERM_COL_IDX; // --- GLOBALLY-INDEXED CHIPLET COLUMN ACCESSORS: BITWISE ----------------------------------------- diff --git a/air/src/trace/main_trace.rs b/air/src/trace/main_trace.rs index 4a72966fff..933b2e9299 100644 --- a/air/src/trace/main_trace.rs +++ b/air/src/trace/main_trace.rs @@ -17,7 +17,7 @@ use super::{ chiplets::{ BITWISE_A_COL_IDX, BITWISE_B_COL_IDX, BITWISE_OUTPUT_COL_IDX, HASHER_DIRECTION_BIT_COL_IDX, HASHER_IS_BOUNDARY_COL_IDX, HASHER_MRUPDATE_ID_COL_IDX, HASHER_NODE_INDEX_COL_IDX, - HASHER_PERM_SEG_COL_IDX, HASHER_STATE_COL_RANGE, MEMORY_CLK_COL_IDX, MEMORY_CTX_COL_IDX, + HASHER_S_PERM_COL_IDX, HASHER_STATE_COL_RANGE, MEMORY_CLK_COL_IDX, MEMORY_CTX_COL_IDX, MEMORY_IDX0_COL_IDX, MEMORY_IDX1_COL_IDX, MEMORY_V_COL_RANGE, MEMORY_WORD_ADDR_HI_COL_IDX, MEMORY_WORD_ADDR_LO_COL_IDX, MEMORY_WORD_COL_IDX, NUM_ACE_SELECTORS, ace::{ @@ -753,9 +753,9 @@ impl MainTrace { self.get(i, CHIPLETS_OFFSET + 5) } - /// Returns `true` if a row is part of the hash chiplet. + /// Returns `true` if a row is part of the hash chiplet (controller or permutation). pub fn is_hash_row(&self, i: RowIndex) -> bool { - self.chiplet_selector_0(i) == ZERO + self.chiplet_selector_0(i) == ONE || self.chiplet_s_perm(i) == ONE } /// Returns the (full) state of the hasher chiplet at row i. @@ -789,9 +789,9 @@ impl MainTrace { self.get(i, HASHER_DIRECTION_BIT_COL_IDX) } - /// Returns the hasher's perm_seg column at row i (0=controller, 1=permutation segment). - pub fn chiplet_perm_seg(&self, i: RowIndex) -> Felt { - self.get(i, HASHER_PERM_SEG_COL_IDX) + /// Returns the hasher's s_perm column at row i (0=controller, 1=permutation segment). + pub fn chiplet_s_perm(&self, i: RowIndex) -> Felt { + self.get(i, HASHER_S_PERM_COL_IDX) } /// Returns the memory's word address low 16-bit limb at row i. @@ -805,8 +805,11 @@ impl MainTrace { } /// Returns `true` if a row is part of the bitwise chiplet. + /// Active when virtual s0=1 (s_ctrl=0, s_perm=0) and s1=0. pub fn is_bitwise_row(&self, i: RowIndex) -> bool { - self.chiplet_selector_0(i) == ONE && self.chiplet_selector_1(i) == ZERO + self.chiplet_selector_0(i) == ZERO + && self.chiplet_s_perm(i) == ZERO + && self.chiplet_selector_1(i) == ZERO } /// Returns the bitwise column holding the aggregated value of input `a` at row i. @@ -825,8 +828,10 @@ impl MainTrace { } /// Returns `true` if a row is part of the memory chiplet. + /// Active when virtual s0=1 (s_ctrl=0, s_perm=0) and s1=1, s2=0. pub fn is_memory_row(&self, i: RowIndex) -> bool { - self.chiplet_selector_0(i) == ONE + self.chiplet_selector_0(i) == ZERO + && self.chiplet_s_perm(i) == ZERO && self.chiplet_selector_1(i) == ONE && self.chiplet_selector_2(i) == ZERO } @@ -877,8 +882,10 @@ impl MainTrace { } /// Returns `true` if a row is part of the ACE chiplet. + /// Active when virtual s0=1 (s_ctrl=0, s_perm=0) and s1=1, s2=1, s3=0. pub fn is_ace_row(&self, i: RowIndex) -> bool { - self.chiplet_selector_0(i) == ONE + self.chiplet_selector_0(i) == ZERO + && self.chiplet_s_perm(i) == ZERO && self.chiplet_selector_1(i) == ONE && self.chiplet_selector_2(i) == ONE && self.chiplet_selector_3(i) == ZERO @@ -989,8 +996,10 @@ impl MainTrace { } /// Returns `true` if a row is part of the kernel chiplet. + /// Active when virtual s0=1 (s_ctrl=0, s_perm=0) and s1=1, s2=1, s3=1, s4=0. pub fn is_kernel_row(&self, i: RowIndex) -> bool { - self.chiplet_selector_0(i) == ONE + self.chiplet_selector_0(i) == ZERO + && self.chiplet_s_perm(i) == ZERO && self.chiplet_selector_1(i) == ONE && self.chiplet_selector_2(i) == ONE && self.chiplet_selector_3(i) == ONE @@ -1041,8 +1050,8 @@ impl MainTrace { /// These rows appear during the old-path leg of a Merkle root update (MRUPDATE). Each /// MV input row inserts a sibling into the virtual sibling table via the hash_kernel bus. pub fn f_mv(&self, i: RowIndex) -> bool { - self.chiplet_selector_0(i) == ZERO // hasher chiplet - && self.chiplet_perm_seg(i) == ZERO // controller region + self.chiplet_selector_0(i) == ONE // s_ctrl=1 (controller row) + && self.chiplet_s_perm(i) == ZERO // controller region && self.chiplet_selector_1(i) == ONE // s0=1 (input row) && self.chiplet_selector_2(i) == ONE // s1=1 (MR_UPDATE_OLD) && self.chiplet_selector_3(i) == ZERO // s2=0 @@ -1054,8 +1063,8 @@ impl MainTrace { /// MU input row removes a sibling from the virtual sibling table via the hash_kernel bus. /// The sibling table balance ensures the old and new paths use the same siblings. pub fn f_mu(&self, i: RowIndex) -> bool { - self.chiplet_selector_0(i) == ZERO // hasher chiplet - && self.chiplet_perm_seg(i) == ZERO // controller region + self.chiplet_selector_0(i) == ONE // s_ctrl=1 (controller row) + && self.chiplet_s_perm(i) == ZERO // controller region && self.chiplet_selector_1(i) == ONE // s0=1 (input row) && self.chiplet_selector_2(i) == ONE // s1=1 (MR_UPDATE_NEW) && self.chiplet_selector_3(i) == ONE // s2=1 diff --git a/air/src/trace/mod.rs b/air/src/trace/mod.rs index 8b3d66036c..9845240e6d 100644 --- a/air/src/trace/mod.rs +++ b/air/src/trace/mod.rs @@ -188,11 +188,11 @@ pub const MAX_MESSAGE_WIDTH: usize = 16; /// Bus message coefficient indices. /// /// These define the standard positions for encoding bus messages using the pattern: -/// `alpha + sum(beta_powers\[i\] * elem\[i\])` where: -/// - `alpha` is the randomness base (accessed directly as `.alpha`) +/// `bus_prefix[bus] + sum(beta_powers\[i\] * elem\[i\])` where: +/// - `bus_prefix[bus]` is the per-bus domain-separated base (see [`bus_types`]) /// - `beta_powers\[i\] = beta^i` are the powers of beta /// -/// These indices refer to positions in the `beta_powers` array, not including alpha. +/// These indices refer to positions in the `beta_powers` array, not including the bus prefix. /// /// This layout is shared between: /// - AIR constraint builders (symbolic expressions): `Challenges` @@ -232,3 +232,37 @@ pub mod bus_message { /// block messages). pub const CAPACITY_DOMAIN_IDX: usize = CAPACITY_START_IDX + 1; } + +/// Bus interaction type constants for domain separation. +/// +/// Each constant identifies a distinct bus interaction type. When encoding a message, +/// the bus index is passed to [`Challenges::encode`] or [`Challenges::encode_sparse`], +/// which uses `bus_prefix[bus]` as the additive base instead of bare `alpha`. +/// +/// This ensures messages from different buses are always distinct, even if they share +/// the same coefficient layout and labels. This is a prerequisite for a future unified bus. +pub mod bus_types { + /// All chiplet interactions: hasher, bitwise, memory, ACE, kernel ROM. + pub const CHIPLETS_BUS: usize = 0; + /// Block stack table (decoder p1): tracks control flow block nesting. + pub const BLOCK_STACK_TABLE: usize = 1; + /// Block hash table (decoder p2): tracks block digest computation. + pub const BLOCK_HASH_TABLE: usize = 2; + /// Op group table (decoder p3): tracks operation batch consumption. + pub const OP_GROUP_TABLE: usize = 3; + /// Stack overflow table. + pub const STACK_OVERFLOW_TABLE: usize = 4; + /// Sibling table: shares Merkle tree sibling nodes between old/new root computations. + pub const SIBLING_TABLE: usize = 5; + /// Log-precompile transcript: tracks capacity state transitions for LOGPRECOMPILE. + pub const LOG_PRECOMPILE_TRANSCRIPT: usize = 6; + /// Range checker bus (LogUp): verifies values are in the valid range. + pub const RANGE_CHECK_BUS: usize = 7; + /// ACE wiring bus (LogUp): verifies arithmetic circuit wire connections. + pub const ACE_WIRING_BUS: usize = 8; + /// Hasher perm-link bus: links hasher controller rows to permutation segment rows on + /// `v_wiring`. + pub const HASHER_PERM_LINK: usize = 9; + /// Total number of distinct bus interaction types. + pub const NUM_BUS_TYPES: usize = 10; +} diff --git a/crates/lib/core/Cargo.toml b/crates/lib/core/Cargo.toml index 9d8807d433..5753a5737c 100644 --- a/crates/lib/core/Cargo.toml +++ b/crates/lib/core/Cargo.toml @@ -28,6 +28,7 @@ path = "tests/main.rs" [features] default = ["std"] std = ["miden-assembly/std", "miden-utils-sync/std"] +constraints-tools = ["std", "dep:miden-air", "dep:miden-ace-codegen", "dep:miden-utils-testing"] [dependencies] # Miden dependencies @@ -36,6 +37,9 @@ miden-core.workspace = true miden-crypto.workspace = true miden-processor.workspace = true miden-utils-sync.workspace = true +miden-air = { workspace = true, optional = true } +miden-ace-codegen = { workspace = true, optional = true } +miden-utils-testing = { workspace = true, optional = true } # External dependencies thiserror.workspace = true @@ -63,3 +67,8 @@ env_logger.workspace = true fs-err = { version = "3.1" } miden-assembly = { workspace = true, features = ["std"] } miden-package-registry = { workspace = true, features = ["resolver"] } + +[[bin]] +name = "regenerate-constraints" +path = "src/bin/regenerate-constraints.rs" +required-features = ["constraints-tools"] diff --git a/crates/lib/core/asm/stark/constants.masm b/crates/lib/core/asm/stark/constants.masm index 2fae66bed9..2578d7f207 100644 --- a/crates/lib/core/asm/stark/constants.masm +++ b/crates/lib/core/asm/stark/constants.masm @@ -91,6 +91,11 @@ const TMP2 = 3223322684 const TMP3 = 3223322688 const TMP4 = 3223322692 +### gamma = beta^MAX_MESSAGE_WIDTH for per-bus domain separation. +### Stored as [gamma0, gamma1, 0, 0] (one extension field element, word-aligned). +### Computed once in generate_aux_randomness, read by reduce_kernel_digests. +const BUS_GAMMA_PTR = 3223322696 + ### Address to the word holding the non-deterministically loaded 2 random challenges, which will be ### checked for correctness once we receive the commitment to the auxiliary trace and are able to ### generate the auxiliary randomness @@ -457,6 +462,10 @@ pub proc random_coin_output_len_ptr push.RANDOM_COIN_OUTPUT_LEN_PTR end +pub proc bus_gamma_ptr + push.BUS_GAMMA_PTR +end + pub proc aux_rand_nd_ptr push.AUX_RAND_ND_PTR end diff --git a/crates/lib/core/asm/sys/vm/constraints_eval.masm b/crates/lib/core/asm/sys/vm/constraints_eval.masm index 306d3a4589..9cc4fd287c 100644 --- a/crates/lib/core/asm/sys/vm/constraints_eval.masm +++ b/crates/lib/core/asm/sys/vm/constraints_eval.masm @@ -12,7 +12,7 @@ use miden::core::stark::utils const NUM_INPUTS_CIRCUIT = 572 # Number of evaluation gates in the constraint evaluation circuit -const NUM_EVAL_GATES_CIRCUIT = 5612 +const NUM_EVAL_GATES_CIRCUIT = 5588 # Max cycle length for periodic columns const MAX_CYCLE_LEN_LOG = 4 @@ -76,7 +76,7 @@ proc load_ace_circuit_description adv.push_mapval exec.constants::ace_circuit_stream_ptr padw padw padw - repeat.777 + repeat.774 adv_pipe exec.poseidon2::permute end @@ -86,14 +86,9 @@ proc load_ace_circuit_description # => [] end - - # CONSTRAINT EVALUATION CIRCUIT DESCRIPTION # ================================================================================================= - - - adv_map CIRCUIT_COMMITMENT = [ 17293822565076172801,0,0,0,11529215043384115201,0,299140176084720,0, 1152921504339460096,0,72039928838487824,0,1152903912152367104,0,18374422528162594833,0, @@ -158,718 +153,715 @@ adv_map CIRCUIT_COMMITMENT = [ 18446743931975630881,0,1,0,65535,0,3,0, 9,0,27,0,81,0,243,0, 729,0,2187,0,16,0,8,0, - 7,0,4,0,2,0,18446462594437873665,0, - 18446744069414584320,0,281474976710656,0,4294967295,0,65536,0, - 128,0,32,0,64,0,5,0, - 6,0,14102670999874605824,0,15585654191999307702,0,940187017142450255,0, - 8747386241522630711,0,6750641561540124747,0,7440998025584530007,0,6136358134615751536,0, - 12413576830284969611,0,11675438539028694709,0,17580553691069642926,0,892707462476851331,0, - 15167485180850043744,0,17850970025369572891,0,0,1,28,0, + 7,0,4,0,18446462594437873665,0,18446744069414584320,0, + 281474976710656,0,2,0,4294967295,0,65536,0, + 128,0,5,0,6,0,14102670999874605824,0, + 15585654191999307702,0,940187017142450255,0,8747386241522630711,0,6750641561540124747,0, + 7440998025584530007,0,6136358134615751536,0,12413576830284969611,0,11675438539028694709,0, + 17580553691069642926,0,892707462476851331,0,15167485180850043744,0,17850970025369572891,0, + 0,1,32,0,64,0,28,0, 12,0,1073741824,0,1152921504606846976,0,94,0, 19,0,41,0,33,0,23,0, 31,0,87,0,84,0,85,0, 108,0,4294967294,0,2147483648,0,88,0, 92,0,104,0,35,0,20,0, - 48,0,0,0,1152927853642258209,2305849033979074329,1152927528298485537,2305849031831590681, - 1152927526151001889,2305849029684107033,1152927524003518241,2305849027536623385,1152927521856034593,2305849025389139737,1152927519708550945,2305849023241656089, - 1152927517561067297,2305849021094172441,1152927515413583649,2305849018946688793,1152927513266100001,2305849016799205145,1152927511118616353,2305849014651721497, - 1152927508971132705,2305849012504237849,1152927506823649057,2305849010356754201,1152927504676165409,2305849008209270553,1152927502528681761,2305849006061786905, - 1152927500381198113,2305849003914303257,1152927836462389025,2305849001766819594,1152927496086230817,2305848999619335947,1152927493938747169,2305848997471852300, - 1152927491791263521,2305848995324368653,1152927489643779873,2305848993176885006,1152927487496296225,2305848991029401359,1152927485348812577,1152927484275070753, - 2305848987808175888,1152927482127587105,2305848985660692241,1152927479980103457,2305848983513208594,1152927477832619809,2305848981365724947,1152927475685136161, - 2305848979218241300,1152927473537652513,2305848977070757653,1152927471390168865,2305848974923274006,1152927469242685217,2305848972775790359,1152927820356261665, - 2305848970628306683,1152927464947717921,2305848968480823036,1152927462800234273,2305848966333339389,1152927460652750625,2305848964185855742,1152927458505266977, - 2305848962038372095,1152927456357783329,2305848959890888448,1152927454210299681,2305848957743404825,1152927452062816033,2305848955595921153,1152927449915332385, - 2305848953448437506,1152927447767848737,2305848951300953859,1152927445620365089,2305848949153470212,1152927443472881441,2305848947005986565,1152927441325397793, - 2305848944858502918,1152927439177914145,2305848942711019271,1152927437030430497,2305848940563535624,1152927810692585249,2305848938416051970,1152927432735463201, - 2305848936268568306,1152927430587979553,2305848934121084676,1152927428440495905,2305848931973601011,1152927426293012257,2305848929826117382,1152927424145528609, - 2305848927678633716,1152927421998044961,2305848925531150069,1152927419850561313,2305848923383666422,1152927417703077665,2305848921236182779,1152927415555594017, - 2305848919088699127,1152927413408110369,2305848916941215485,1152927411260626721,2305848914793731832,1152927409113143073,2305848912646248191,1152927406965659425, - 2305848910498764537,1152927404818175777,2305848908351280921,1152927793512716065,2305848906203797218,1152927400523208481,2305848904056313571,1152927398375724833, - 2305848901908829924,1152927396228241185,2305848899761346277,1152927394080757537,2305848897613862630,1152927391933273889,2305848895466378983,1152927389785790241, - 2305848893318895336,1152927387638306593,2305848891171411689,1152927385490822945,2305848889023928042,1152927383343339297,2305848886876444395,1152927381195855649, - 2305848884728960748,1152927379048372001,2305848882581477101,1152927376900888353,2305848880433993454,1152927374753404705,2305848878286509807,1152927372605921057, - 2305848876139026160,1152927776332846881,2305848873991542482,1152927368310953761,2305848871844058835,1152927366163470113,2305848869696575188,1152927364015986465, - 2305848867549091541,1152927361868502817,2305848865401607894,1152927359721019169,2305848863254124247,1152927357573535521,2305848861106640600,1152927355426051873, - 2305848858959156953,1152927353278568225,2305848856811673306,1152927351131084577,2305848854664189659,1152927348983600929,2305848852516706012,1152927346836117281, - 2305848850369222365,1152927344688633633,2305848848221738718,1152927342541149985,2305848846074255071,1152927340393666337,2305848843926771424,1152927759152977697, - 2305848841779287746,1152927336098699041,2305848839631804099,1152927333951215393,2305848837484320452,1152927331803731745,2305848835336836805,1152927329656248097, - 2305848833189353158,1152927327508764449,2305848831041869511,1152927325361280801,2305848828894385864,1152927323213797153,2305848826746902217,1152927321066313505, - 2305848824599418570,1152927318918829857,2305848822451934923,1152927316771346209,2305848820304451276,1152927314623862561,2305848818156967629,1152927312476378913, - 2305848816009483982,1152927310328895265,2305848813862000335,1152927308181411617,2305848811714516688,1152927741973108513,2305848809567033010,1152927303886444321, - 2305848807419549363,1152927301738960673,2305848805272065716,1152927299591477025,2305848803124582069,1152927297443993377,2305848800977098422,1152927295296509729, - 2305848798829614775,1152927293149026081,2305848796682131128,1152927291001542433,2305848794534647481,1152927288854058785,2305848792387163834,1152927286706575137, - 2305848790239680187,1152927284559091489,2305848788092196540,1152927282411607841,2305848785944712893,1152927280264124193,2305848783797229246,1152927278116640545, - 2305848781649745599,1152927275969156897,2305848779502261952,1152927724793239329,2305848777354778274,1152927271674189601,2305848775207294627,1152927269526705953, - 2305848773059810980,1152927267379222305,2305848770912327333,1152927265231738657,2305848768764843686,1152927263084255009,2305848766617360039,1152927260936771361, - 2305848764469876392,1152927258789287713,2305848762322392745,1152927256641804065,2305848760174909098,1152927254494320417,2305848758027425451,1152927252346836769, - 2305848755879941804,1152927250199353121,2305848753732458157,1152927248051869473,2305848751584974510,1152927245904385825,2305848749437490863,1152927243756902177, - 2305848747290007216,1152927707613370145,2305848745142523538,1152927239461934881,2305848742995039891,1152927237314451233,2305848740847556244,1152927235166967585, - 2305848738700072597,1152927233019483937,2305848736552588950,1152927230872000289,2305848734405105303,1152927228724516641,2305848732257621656,1152927226577032993, - 2305848730110138009,1152927224429549345,2305848727962654362,1152927222282065697,2305848725815170715,1152927220134582049,2305848723667687068,1152927217987098401, - 2305848721520203421,1152927215839614753,2305848719372719774,1152927213692131105,2305848717225236127,1152927211544647457,2305848715077752480,1152927690433500961, - 2305848712930268802,1152927207249680161,2305848710782785155,1152927205102196513,2305848708635301508,1152927202954712865,2305848706487817861,1152927200807229217, - 2305848704340334214,1152927198659745569,2305848702192850567,1152927196512261921,2305848700045366920,1152927194364778273,2305848697897883273,1152927192217294625, - 2305848695750399626,1152927190069810977,2305848693602915979,1152927187922327329,2305848691455432332,1152927185774843681,2305848689307948685,1152927183627360033, - 2305848687160465038,1152927181479876385,2305848685012981391,1152927179332392737,2305848682865497744,1152927673253631777,2305848680718014066,1152927175037425441, - 2305848678570530419,1152927172889941793,2305848676423046772,1152927170742458145,2305848674275563125,1152927168594974497,2305848672128079478,1152927166447490849, - 2305848669980595831,1152927164300007201,2305848667833112184,1152927162152523553,2305848665685628537,1152927160005039905,2305848663538144890,1152927157857556257, - 2305848661390661243,1152927155710072609,2305848659243177596,1152927153562588961,2305848657095693949,1152927151415105313,2305848654948210302,1152927149267621665, - 2305848652800726655,1152927147120138017,2305848650653243008,1152927656073762593,2305848648505759330,1152927142825170721,2305848646358275683,1152927140677687073, - 2305848644210792036,1152927138530203425,2305848642063308389,1152927136382719777,2305848639915824742,1152927134235236129,2305848637768341095,1152927132087752481, - 2305848635620857448,1152927129940268833,2305848633473373801,1152927127792785185,2305848631325890154,1152927125645301537,2305848629178406507,1152927123497817889, - 2305848627030922860,1152927121350334241,2305848624883439213,1152927119202850593,2305848622735955566,1152927117055366945,2305848620588471919,1152927114907883297, - 2305848618440988272,1152927638893893409,2305848616293504594,1152927110612916001,2305848614146020947,1152927108465432353,2305848611998537300,1152927106317948705, - 2305848609851053653,1152927104170465057,2305848607703570006,1152927102022981409,2305848605556086359,1152927099875497761,2305848603408602712,1152927097728014113, - 2305848601261119065,1152927095580530465,2305848599113635418,1152927093433046817,2305848596966151771,1152927091285563169,2305848594818668124,1152927089138079521, - 2305848592671184477,1152927086990595873,2305848590523700830,1152927084843112225,2305848588376217183,1152927082695628577,2305848586228733536,1152927621714024225, - 2305848584081249858,1152927078400661281,2305848581933766211,1152927076253177633,2305848579786282564,1152927074105693985,2305848577638798917,1152927071958210337, - 2305848575491315270,1152927069810726689,2305848573343831623,1152927067663243041,2305848571196347976,1152927065515759393,2305848569048864329,1152927063368275745, - 2305848566901380682,1152927061220792097,2305848564753897035,1152927059073308449,2305848562606413388,1152927056925824801,2305848560458929741,1152927054778341153, - 2305848558311446094,1152927052630857505,2305848556163962447,1152927050483373857,2305848554016478800,1152927604534155041,2305848551868995122,1152927046188406561, - 2305848549721511475,1152927044040922913,2305848547574027828,1152927041893439265,2305848545426544181,1152927039745955617,2305848543279060534,1152927037598471969, - 2305848541131576887,1152927035450988321,2305848538984093240,1152927033303504673,2305848536836609593,1152927031156021025,2305848534689125946,1152927029008537377, - 2305848532541642299,1152927026861053729,2305848530394158652,1152927024713570081,2305848528246675005,1152927022566086433,2305848526099191358,1152927020418602785, - 2305848523951707711,1152927018271119137,2305848521804224064,1152927862232192801,1152927603460412428,2305848518582998576,1152927012902409228,2305848516435514928, - 1152927010754925580,2305848514288031280,1152927008607441932,2305848512140547632,1152927006459958284,2305848509993063984,1152927004312474636,2305848507845580336, - 1152927002164990988,2305848505698096688,1152927595944219660,2305848503550613034,1152926997870023692,2305848501403129387,1152926995722540044,2305848499255645744, - 1152926993575056396,2305848497108162092,1152926991427572748,2305848494960678445,1152926989280089100,2305848492813194798,1152926987132605452,2305848490665711151, - 1152928096307910432,2305849099477325819,5478230792083,1152926981763897118,1152926983911380771,2305848484223259628,1152928085570492402,6579889903144, - 1152928065169396712,1152926975321445353,6584184870440,6583111128616,1152926972100219877,1152926971026479090,1152928066243139569,1152926968878994402, - 2305848472412099558,5478230792082,1152926965657768927,1152926964584027934,1152926978542671651,2305848467043390428,6582037386792,1152926960289060849, - 1152926959215317991,1152926958141577106,1152926957067835166,1152926961362802467,2305848459527197653,2305848462748423142,2305848457379714016,6580963644968, - 1152926950625383385,1152928065169397744,1152926948477899727,2305848452011004881,5441723569704,6590627321746,1152926944182932427,1152926943109191454, - 1152926953846609699,2305848445568553928,6576668678033,1152926938814223327,1152926937740482334,1152926939887965987,2305848440199844803,6575594936208, - 1152926933445514207,1152926932371773214,1152926934519256867,2305848434831135678,6574521194383,1152926928076805087,1152926927003064094,1152926929150547747, - 2305848429462426553,6573447452558,1152926922708095967,1152926921634354974,1152926923781838627,2305848424093717428,2305848452011004895,5412732540456, - 6589553579921,1152926915191903152,1152926914118162206,1152926918413129507,2305848416577524653,6588479838096,1152926909823194032,1152926908749453086, - 1152926910896936739,2305848411208815528,6587406096271,1152926904454484912,1152926903380743966,1152926905528227619,2305848405840106403,6586332354446, - 1152926899085775792,1152926898012034846,1152926900159518499,2305848400471397278,1152928042620819232,1152926894790809379,2305848397250171803,6089189889993, - 1152926890495842079,1152926891569583907,2305848392955204503,6538013972321,6090263630740,1152926885127132052,6088116147092,1152926882979648402, - 6087042405268,1152926880832164752,6085968663444,1152926878684681102,6084894921620,1152926876537197452,6083821179796,1152926874389713802, - 6082747437972,1152926872242230152,6081673696148,1152926870094746502,1152926869021005598,1152926887274616611,2305848371480368003,6578816161320, - 1152926864726037480,6577742419496,1152926862578553808,1152926861504811903,1152926860431070169,1152926859357328356,1152926858283586533,1152926959215319027, - 1152928082349265792,1152926855062361064,1152926853988619128,2305848357521724281,1152926972100220916,1152926850767393753,1152926950625384415,1152926848619910002, - 2305848352153015156,1152928087717975013,1152926845398685682,1152926844324942705,2305848347858047855,1152928087717976052,1152926841103718386,1152926840029975409, - 2305848343563080555,1152926864726038512,1152926862578554865,1152926835735008102,1152926834661267442,1152926833587525619,1152926832513783796,2305848336046887783, - 1152926948477899736,2305848333899404128,1152926948477899753,2305848331751920478,2305848330678178790,6571299968552,1152926823923848141,2305848327456953179, - 1152928083423007720,1152926820702622589,1152926819628880857,1152926818555139044,1152926817481397221,1152926835735008127,1152926815333913561,1152926814260172787, - 1152926813186430964,1152926815333914610,1152926811038946276,1152926809965205492,2305848313498309455,1152926836808749949,1152926806743978969,1152926805670237156, - 1152926804596496372,2305848308129600331,1152926805670238195,1152926801375270900,2305848304908374854,1152926806743980018,1152926798154044388,1152926797080303604, - 2305848300613407555,1152926798154045427,1152926793859078132,2305848297392182079,1152926834661266393,1152926790637852659,1152926789564110836,2305848293097214780, - 2305848292023472979,1152926820702622565,1152926785269142489,1152926784195400676,1152926783121659892,2305848286654763831,1152926785269143538,1152926779900433380, - 1152926778826692596,2305848282359796530,1152926779900434419,1152926775605467124,2305848279138571054,1152926775605466085,2305848276991087403,1152926848619910114, - 1152926850767394802,1152926769163015025,2305848272696120104,2305848271622378281,1152928075906814925,2305848269474894628,1152926960289059811,1152926762720564193, - 2305848266253669154,2305848265179927520,2305848264106185560,1152926758425597813,1152928064095654744,1152928063021912862,2305848259811218203,5249523782428, - 1152926753056888606,1152926865799780131,2305848255516250903,5352602997628,2305848253368767320,5311800808278,2305848251221283614,2305848250147541779, - 1152928083423008752,1152926743393211261,1152926743393211237,2305848245852574478,1152926841103717337,1152926739098244065,2305848242631349004,1152926813186429925, - 1152926809965204453,2305848239410123528,1152926804596495333,2305848237262639878,1152926801375269861,2305848235115156228,1152926797080302565,2305848232967672578, - 1152926793859077093,2305848230820188928,1152926789564109797,2305848228672705278,2305848227598963465,2305848226525221648,1152926720844633972,1152926747688179676, - 1152928061948171025,2305848222230254328,1152926721918375901,2305848220082770678,5209795334905,1152926713328441118,1152926749835663139,2305848215787803378, - 1152926814260171748,1152926709033472997,2305848212566577939,1152928082349265791,1152926705812247504,2305848209345352429,1152926972100219881,1152926702591021942, - 1152928087717975017,1152926700443538294,2305848203976643304,2305848202902901521,1152926784195401715,1152926696148571109,2305848199681676004,5307505840865, - 2305848197534192362,1152926959215317988,1152926690779861878,2305848194312966907,2305848193239225055,1152926687558637427,1152926703664764891,1152928060874429152, - 2305848188944257753,1152926688632379356,2305848186796774103,5176509338330,1152926680042444574,1152926710107215651,2305848182501806803,2305848208271610704, - 5304284615392,2305848179280581328,5231270171356,2305848177133097678,1152926671452510066,1152926675747477466,1152928059800687311,2305848172838130378, - 1152926672526251995,2305848170690646728,5160403210955,1152926663936317214,1152926676821219107,2305848166395679428,2305848180354323277,1152926811038947315, - 2305848163174453953,1152926833587524580,2305848161026970303,1152926790637851620,1152926654272641012,2305848157805744829,1152926949551641575,2305848155658261178, - 1152926778826691557,2305848153510777551,5298915906230,2305848151363293880,5230196429517,2305848149215810228,1152926643535222641,1152926649977673689, - 1152928058726945461,2305848144920842928,1152926644608964570,2305848142773359278,5132485923505,1152926636019029790,1152926660715091747,2305848138478391978, - 2305848154584519496,5295694680757,2305848135257166503,5228048945843,2305848133109682853,1152926627429095280,1152926631724062680,1152928057653203622, - 2305848128814715553,1152926628502837209,2305848126667231903,5116379796130,1152926619912902430,1152926632797804323,2305848122372264603,2305848136330908485, - 5291399713446,2305848119151039128,5225901462180,2305848117003555478,1152926611322967919,1152926615617935319,1152928056579461783,2305848112708588178, - 1152926612396709848,2305848110561104528,5100273668755,1152926603806775070,1152926616691676963,2305848106266137228,2305848120224781121,5288178487959, - 2305848103044911753,5223753978517,2305848100897428103,1152926595216840558,1152926599511807958,1152928055505719944,2305848096602460803,1152926596290582487, - 2305848094454977153,5084167541380,1152926587700647710,1152926600585549603,2305848090160009853,2305848104118653758,1152926654272639973,2305848086938784378, - 1152926656420123621,5075577606776,1152926696148572148,2305848082643817096,5283883520628,2305848080496333430,5221606494854,2305848078348849778, - 1152926572668262253,1152926579110713301,1152928054431978099,2305848074053882478,1152926573742004182,2305848071906398828,5061618963055,1152926565152069406, - 1152926584479422243,2305848067611431528,2305848083717559098,2305848065463947891,5219459011185,2305848063316464228,1152926557635876716,1152926560857102292, - 1152928053358236275,2305848059021496928,1152926558709618645,2305848056874013278,5046586577505,1152926550119683870,1152926561930843939,2305848052579045978, - 1152927941689086562,1152928053358236261,1152928052284494451,2305848048284078678,1152926558709618644,2305848046136595028,5035849159255,1152926539382265630, - 1152926546898458403,2305848041841627728,1152927940615344738,1152928052284494437,1152928051210752627,2305848037546660428,1152928053358236259,2305848035399176778, - 5025111741005,1152926528644847390,1152926536161040163,2305848031104209478,1152926656420124660,5019743031909,2305848027882984055,1152926762720564081, - 2305848025735500353,2305848024661758579,2305848023588016739,1152926517907429225,1152926520054912977,1152928050137010803,2305848019293049403,1152928052284494435, - 2305848017145565753,5006858129980,1152926510391236382,1152926525423621923,2305848012850598453,1152927938467861053,1152928050137010751,1152928049063268979, - 2305848008555631153,1152928051210752611,2305848006408147503,4996120711730,1152926499653818142,1152926507170010915,2305848002113180203,1152927937394119229, - 1152928049063268927,1152928047989527155,2305847997818212903,1152928050137010787,2305847995670729253,4985383293480,1152926488916399902,1152926496432592675, - 2305847991375761953,2305848024661758563,1152926484621432678,1152928047989527103,1152928049063268963,2305847986007052828,4975719617053,1152926479252723486, - 1152926485695174435,2305847981712085528,6080599955405,1152926474957756192,1152926476031498019,2305847977417118228,1152926474957756191,1152926471736530723, - 2305847974195892753,1152928045842044704,1152926468515305251,2305847970974667278,1152928045842044703,1152926465294079779,2305847967753441803,6542308939621, - 2305848462748423135,4955318523432,2305849578366179303,1152926457777886157,4952097296902,1152926455630402056,1152926862578554863,1152926453482918888, - 1152926853988620273,1152926451335436274,2305847954868539904,2305847953794798373,1152926950625384434,1152926447040467918,2305847950573572604,2305847949499831075, - 2305847948426089248,1152928044768301589,1152926441671758327,2305847945204863490,1152926453482919920,2305847943057380106,2305847941983638237,4931696202228, - 6080599955301,1152926434155565575,2305847937688670704,1152926432008083230,1152926462072854307,2305847934467445228,4937064912424,1152926427713114645, - 1152926428786857763,2305847930172477928,6591701063524,1152926423418147313,1152926422344406814,1152926424491890467,2305847924803768803,1152926427713114615, - 1152926418049439590,1152926416975697694,1152926419123181347,2305847919435059678,1152926742319469529,1152926412680729572,1152926411606987749,1152926410533246837, - 1152926409459504926,1152926413754472227,2305847911918866903,1152926411606988788,6559488808821,1152926404090794452,1152926403017053982,1152926406238279459, - 2305847905476415953,1152926412680730611,1152926398722085861,6558415066997,1152926396574601677,1152926395500861214,1152926399795828515,2305847897960223178, - 1152926398722086900,6557341325173,1152926390132150727,1152926389058410270,1152926392279635747,2305847891517772228,1152926742319470578,1152926384763442148, - 1152926383689700325,6556267583349,1152926381542216127,1152926380468475678,1152926385837184803,2305847882927837628,1152926383689701364,6555193841525, - 1152926375099765177,1152926374026024734,1152926377247250211,2305847876485386678,1152926384763443187,1152926369731056613,6554120099701,1152926367583572402, - 1152926366509831966,1152926370804799267,2305847868969193903,1152926369731057652,6553046357877,1152926361141121452,1152926360067381022,1152926363288606499, - 2305847862526742953,1152926741245727705,1152926355772412900,1152926354698671077,6551972616053,1152926352551186852,1152926351477446430,1152926356846155555, - 2305847853936808353,1152926354698672116,6549825132405,1152926346108735902,1152926345034995486,1152926348256220963,2305847847494357403,1152926355772413939, - 1152926340740027365,6547677648757,1152926338592543127,1152926337518802718,1152926341813770019,2305847839978164628,1152926340740028404,6545530165109, - 1152926332150092177,1152926331076351774,1152926334297577251,2305847833535713678,1152926741245728754,1152926326781383652,1152926325707641829,6543382681461, - 1152926323560157577,1152926322486417182,1152926327855126307,2305847824945779078,1152926326781384691,1152926318191450100,6591701063541,1152926316043964802, - 1152926314970224414,1152926319265191715,2305847817429586303,1152926396574601966,1152926310675257118,1152926311748998947,2305847813134619003,6559488808820, - 1152926306380288750,1152926305306547998,1152926307454031651,2305847807765909878,1152926390132151048,1152926301011580702,1152926302085322531,2305847803470942578, - 1152926381542216455,1152926296716613406,1152926297790355235,2305847799175975278,1152926375099765509,1152926292421646110,1152926293495387939,2305847794881007978, - 1152926367583572739,1152926288126678814,1152926289200420643,2305847790586040678,1152926361141121793,1152926283831711518,1152926284905453347,2305847786291073378, - 1152926352551187199,1152926279536744222,1152926280610486051,2305847781996106078,6550898874229,1152926275241775869,1152926274168035102,1152926276315518755, - 2305847776627396953,6559488808819,1152926269873066831,1152926268799325982,1152926270946809635,2305847771258687828,6559488808818,1152926264504357708, - 1152926263430616862,1152926265578100515,2305847765889978703,6559488808817,1152926259135648583,1152926258061907742,1152926260209391395,2305847760521269578, - 6559488808816,1152926253766939460,1152926252693198622,1152926254840682275,2305847755152560453,6559488808815,1152926248398230336,1152926247324489502, - 1152926249471973155,2305847749783851328,6559488808814,1152926243029521213,1152926241955780382,1152926244103264035,2305847744415142203,6559488808813, - 1152926237660812089,1152926236587071262,1152926238734554915,2305847739046433078,1152926375099765369,1152926232292103966,1152926233365845795,2305847734751465778, - 6554120099700,1152926227997135481,1152926226923394846,1152926229070878499,2305847729382756653,6553046357875,1152926222628426361,1152926221554685726, - 1152926223702169379,2305847724014047528,6551972616050,1152926217259717241,1152926216185976606,1152926218333460259,2305847718645338403,1152926259135648377, - 1152926211891009310,1152926212964751139,2305847714350371103,6558415066992,1152926207596040825,1152926206522300190,1152926208669783843,2305847708981661978, - 6557341325167,1152926202227331705,1152926201153591070,1152926203301074723,2305847703612952853,6556267583342,1152926196858622585,1152926195784881950, - 1152926197932365603,2305847698244243728,1152926275241775735,1152926191489914654,1152926192563656483,2305847693949276428,6549825132404,1152926187194946167, - 1152926186121205534,1152926188268689187,2305847688580567303,6548751390579,1152926181826237047,1152926180752496414,1152926182899980067,2305847683211858178, - 6547677648754,1152926176457527927,1152926175383787294,1152926177531270947,2305847677843149053,1152926237660811895,1152926171088819998,1152926172162561827, - 2305847673548181753,6558415066988,1152926166793851511,1152926165720110878,1152926167867594531,2305847668179472628,6557341325163,1152926161425142391, - 1152926160351401758,1152926162498885411,2305847662810763503,6556267583338,1152926156056433271,1152926154982692638,1152926157130176291,2305847657442054378, - 6546603906933,1152926150687724099,1152926149613983518,1152926151761467171,2305847652073345253,6545530165108,1152926145319014979,1152926144245274398, - 1152926146392758051,2305847646704636128,6544456423283,1152926139950305859,1152926138876565278,1152926141024048931,2305847641335927003,6543382681458, - 1152926134581596739,1152926133507856158,1152926135655339811,2305847635967217878,6559488808809,1152926129212887619,1152926128139147038,1152926130286630691, - 2305847630598508753,6558415066984,1152926123844178499,1152926122770437918,1152926124917921571,2305847625229799628,6557341325159,1152926118475469379, - 1152926117401728798,1152926119549212451,2305847619861090503,6556267583334,1152926113106760259,1152926112033019678,1152926114180503331,2305847614492381378, - 1152926832513782757,1152926107738050907,1152926106664310558,1152926108811794211,2305847609123672253,1152926107738050825,1152926102369343262,1152926103443085091, - 2305847604828704953,1152926107738050820,1152926098074375966,1152926099148117795,2305847600533737653,1152926107738050815,1152926093779408670,1152926094853150499, - 2305847596238770353,6546603906929,1152926089484439743,1152926088410699550,1152926090558183203,2305847590870061228,6545530165104,1152926084115730623, - 1152926083041990430,1152926085189474083,2305847585501352103,6544456423279,1152926078747021503,1152926077673281310,1152926079820764963,2305847580132642978, - 6543382681454,1152926073378312383,1152926072304572190,1152926074452055843,2305847574763933853,1152926107738050872,1152926068009604894,1152926069083346723, - 2305847570468966553,1152926107738050806,1152926063714637598,1152926064788379427,2305847566173999253,1152926107738050801,1152926059419670302,1152926060493412131, - 2305847561879031953,1152926107738050796,1152926055124703006,1152926056198444835,2305847557584064653,6555193841513,1152926050829734079,1152926049755993886, - 1152926051903477539,2305847552215355528,6554120099688,1152926045461024959,1152926044387284766,1152926046534768419,2305847546846646403,6553046357863, - 1152926040092315839,1152926039018575646,1152926041166059299,2305847541477937278,6551972616038,1152926034723606719,1152926033649866526,1152926035797350179, - 2305847536109228153,6090263631837,1152926029354899421,1152926028281156322,1152926030428641059,2305847530740519028,1152928061948172253,6559488808488, - 1152926022912448476,2305847526445551729,4516158117749,1152926019691221730,1152926018617480990,1152926025059931939,2305847521076842603,1152928063021914077, - 1152926022912448475,2305847517855617128,4507568183156,1152926011101287138,1152926010027546398,1152926015396255523,2305847512486908003,1152926028281156213, - 1152926006806320931,2305847509265682528,1152928058726946781,2305847507118198895,4496830764917,1152926000363868789,1152925999290128158,1152926003585095459, - 2305847501749489753,1152928057653204957,2305847499602006119,4489314572148,1152925992847676021,1152925991773935390,1152925996068902691,2305847494233296978, - 1152928056579463133,1152926022912448474,2305847491012071503,4480724637555,1152925984257741429,1152925983184000798,1152925988552709923,2305847485643362378, - 1152928055505721309,1152926022912448473,2305847482422136903,4472134702962,1152925975667806837,1152925974594066206,1152925979962775331,2305847477053427778, - 1152926022912448472,2305847474905944168,4464618510193,1152925968151614069,1152925967077873438,1152925971372840739,2305847469537235003,1152926022912448471, - 2305847467389751409,4457102317424,1152925960635421301,1152925959561680670,1152925963856647971,2305847462021042228,1152928060874430429,1152926022912448470, - 2305847458799816753,4448512382831,1152925952045486709,1152925950971746078,1152925956340455203,2305847453431107628,1152928059800688605,1152926022912448469, - 2305847450209882153,4439922448238,1152925943455552117,1152925942381811486,1152925947750520611,2305847444841173028,1152926029354898259,1152925939160586019, - 2305847441619947553,1152926709033474036,6589553579893,1152925933791875102,1152925932718135070,1152925935939360547,2305847435177496603,6588479838068, - 1152925928423165982,1152925927349425950,1152925929496909603,2305847429808787478,6587406096243,1152925923054456862,1152925921980716830,1152925924128200483, - 2305847424440078353,6586332354418,1152925917685747742,1152925916612007710,1152925918759491363,2305847419071369228,1152926318191449061,6542308939637, - 1152925911243296777,1152925910169556766,1152925913390782243,2305847412628918278,1152926447040467943,6550898874221,1152925904800845827,1152925906948331299, - 2305847407260209153,6549825132396,1152925900505878531,1152925901579622179,2305847402965241853,6548751390571,1152925896210911235,1152925897284654883, - 2305847398670274553,6547677648746,1152925891915943939,1152925892989687587,2305847394375307253,2305849088739907537,4383014131561,1152925886547234819, - 1152925888694720291,2305847389006598128,2305849088739907536,4377645422440,1152925881178525699,1152925883326011171,2305847383637889003,6544456423271, - 1152925876883558403,1152925877957302051,2305847379342921703,6543382681446,1152925872588591107,1152925873662334755,2305847375047954403,1152926849693651937, - 1152925868293624275,1152925869367367459,2305847370752987103,6558415066996,1152925863998656480,1152925865072400163,2305847366458019803,6557341325171, - 1152925859703689184,1152925860777432867,2305847362163052503,6556267583346,1152925855408721888,1152925856482465571,2305847357868085203,6555193841521, - 1152925851113754592,1152925852187498275,2305847353573117903,6554120099696,1152925846818787296,1152925847892530979,2305847349278150603,6553046357871, - 1152925842523820000,1152925843597563683,2305847344983183303,6551972616046,1152925838228852704,1152925839302596387,2305847340688216003,1152925868293623810, - 1152925835007629091,2305847337466990528,1152925868293623806,1152925831786403619,2305847334245765053,1152925868293623802,1152925828565178147,2305847331024539578, - 1152925868293623798,1152925825343952675,2305847327803314103,6546603906921,1152925821048983520,1152925822122727203,2305847323508346803,6545530165096, - 1152925816754016224,1152925817827759907,2305847319213379503,1152928079128041451,1152928078054299626,1152925811385308701,2305847314918412204,1152925809237825487, - 1152928078054299627,2305847311697186727,1152925806016600014,1152925804942857757,2305847308475961256,1152928064095655915,2305847306328477603,2305847305254737884, - 4294967302119,1152925798500405216,1152925813532792611,2305847300959768478,1152925806016600015,1152925809237825486,2305847297738543003,1152928064095655914, - 2305847295591059353,4285303625702,1152925788836728800,1152925795279181603,2305847291296092053,1152925809237825515,1152925806016600042,1152925783468021277, - 2305847287001124754,1152925781320538087,1152925809237825514,1152925806016600043,2305847282706157453,1152925777025570790,1152925775951828509,2305847279484931982, - 1152925809237825499,2305847277337448328,1152928060874430443,2305847275189964678,2305847274116224985,4263828789225,1152925767361892320,1152925785615505187, - 2305847269821255553,1152925777025570791,1152925781320538086,2305847266600030078,1152925806016600027,2305847264452546428,1152928060874430442,2305847262305062778, - 4252017629160,1152925755550732256,1152925764140668707,2305847258010095478,1152925781320538089,1152925777025570792,1152925750182024733,2305847253715128179, - 1152925809237825496,2305847251567644528,1152928057653204971,2305847249420160878,2305847248346421206,4238058985319,1152925741592088544,1152925752329508643, - 2305847244051451753,1152925777025570793,1152925781320538088,2305847240830226278,1152925806016600024,2305847238682742628,1152928057653204970,2305847236535258978, - 4226247825254,1152925729780928480,1152925738370864931,2305847232240291678,1152926845398684633,1152925725485962209,1152925724412219859,1152925726559704867, - 2305847226871582553,1152925724412219356,1152925721190995747,2305847223650357078,1152925724412219352,1152925717969770275,2305847220429131603,1152925724412219348, - 1152925714748544803,2305847217207906128,1152925724412219344,1152925711527319331,2305847213986680653,1152925724412219340,1152925708306093859,2305847210765455178, - 1152925724412219336,1152925705084868387,2305847207544229703,1152925724412219332,1152925701863642915,2305847204323004228,1152925724412219394,1152925698642417443, - 2305847201101778753,1152925724412219390,1152925695421191971,2305847197880553278,1152925724412219386,1152925692199966499,2305847194659327803,1152925724412219382, - 1152925688978741027,2305847191438102328,1152925724412219316,1152925685757515555,2305847188216876853,1152925724412219312,1152925682536290083,2305847184995651378, - 1152928063021914090,1152925678241322525,2305847181774426018,2305847180700684195,2305847179626944475,4169339508711,1152925672872611674,1152925679315064611, - 2305847175331974953,1152928063021914091,2305847173184491416,2305847172110749593,2305847171037009882,4160749574118,1152925664282677082,1152925669651388195, - 2305847166742040353,1152925809237825511,1152925806016600038,1152925658913969693,2305847162447073054,1152928059800688619,1152928058726946794,1152925654619002397, - 2305847158152105754,2305847157078363931,2305847156004624343,4145717188455,1152925649250291546,1152925661061453603,2305847151709654803,1152925806016600039, - 1152925809237825510,2305847148488429328,1152928058726946795,1152928059800688618,2305847145267203853,2305847144193462030,2305847143119722454,4132832286566, - 1152925636365389658,1152925646029068067,2305847138824752903,1152926783121658853,1152927948131538801,6443524689667,1152925629922938628,1152925633144166179, - 2305847132382301953,1152927947057796976,6442450947838,1152925624554229508,1152925626701715235,2305847127013592828,1152927945984055151,6441377206009, - 1152925619185520388,1152925621333006115,2305847121644883703,1152927944910313326,6440303464180,1152925613816811268,1152925615964296995,2305847116276174578, - 2305849451664643953,2305847114128693103,2305847113054951278,6090263629549,1152925606300618500,1152925610595587875,2305847108759981803,1152927581985576809, - 1152927580911834992,2305847105538756328,2305847104465016687,1152927944910312998,2305847102317530853,4092030097364,1152925595563200260,1152925603079395107, - 2305847098022563553,1152927579838093168,2305847095875082097,1152927578764351343,2305847093727596253,1152927577690609518,2305847091580112603,4081292679020, - 1152925584825782020,1152925592341976867,2305847087285145303,1152928053358237548,4075923970023,1152925579457072900,1152925581604558627,2305847081916436178, - 1152928073759332327,6090263629519,1152925574088363780,1152925576235849507,2305847076547727053,1152928073759332304,4065186551787,1152925568719654660, - 1152925570867140387,2305847071179017928,1152928073759332303,4059817842666,1152925563350945540,1152925565498431267,2305847065810308803,4304630978537, - 1152925559055978244,1152925560129722147,2305847061515341503,4301409753064,1152925554761010948,1152925555834754851,2305847057220374203,1152927580911834997, - 2305849566555019229,4044785454776,6557341325277,1152925547244820459,6556267583452,1152925545097336810,1152925544023594525,2305847047556697780, - 4037269262006,1152925540802367236,1152925551539787555,2305847043261730478,1152927580911834996,2305849565481277404,4030826811051,1152925547244820458, - 1152925545097336811,2305847036819279528,4026531843753,1152925530064948996,1152925537581143843,2305847032524312228,1152927580911834995,2305849562260051929, - 4020089392801,6553046357977,1152927579838093291,1152925521475014302,6551972616152,1152927579838093290,1152925518253788827,1152925517180048925, - 2305847020713152156,4010425716383,1152925513958821636,1152925526843725603,2305847016418184853,1152927580911834994,2305849561186310104,4003983265426, - 1152925518253788830,1152925519327530653,2305847009975733903,3999688298128,1152925503221403396,1152925510737598243,2305847005680766603,1152927580911834984, - 2305849454885869429,3993245847176,6445672175477,1152925495705212905,6444598433652,1152925493557729256,1152925492483986973,2305846996017090180, - 3985729654406,1152925489262759684,1152925500000180003,2305846991722122878,1152927580911834983,2305849453812127604,3979287203451,1152925495705212904, - 1152925493557729257,2305846985279671928,3974992236153,1152925478525341444,1152925486041536291,2305846980984704628,1152927948131538909,1152927947057797081, - 2305846977763479153,1152927945984055259,2305846975615995503,1152927944910313431,2305846973468511853,3963181078482,1152925466714181380,1152925475304118051, - 2305846969173544553,1152927948131538908,1152927947057797080,2305846965952319078,1152927945984055258,2305846963804835428,1152927944910313430,2305846961657351778, - 3951369918417,1152925454903021316,1152925463492957987,2305846957362384478,1152928053358237651,3946001209197,1152925449534312196,1152925451681797923, - 2305846951993675353,1152927943836571501,3940632500074,1152925444165603076,1152925446313088803,2305846946624966228,6543382681451,6079526211153, - 1152925438796893956,1152925440944379683,2305846941256257103,6550898874217,1152925434501926660,1152925435575670563,2305846936961289803,1152926818555140083, - 1152925430206960613,2305849567628761053,3923452630901,1152925426985733703,1152925425911994142,1152925431280703267,2305846928371355203,1152926859357329395, - 1152925421617026021,2305849568702502773,1152925419469540927,1152925418395801374,1152925422690768675,2305846920855162428,1152925430206961652,4509715666805, - 1152925413027089977,1152925411953350430,1152925415174575907,2305846914412711478,1152925421617027060,1152928064095655797,6090263629362,1152925405510897203, - 1152925404437157662,1152925408732124963,2305846906896518703,1152926860431071218,1152925400142189540,1152925399068447717,6090263630291,1152925396920962602, - 1152925395847223070,1152925401215932195,2305846898306584103,1152925399068448756,1152925391552254069,1152925392625997603,2305846894011616803,6090263629374, - 1152925387257286180,1152925386183546654,1152925388331030307,2305846888642907678,1152926819628881906,1152925381888578532,1152925380814836709,1152925379741094005, - 1152925382962321187,2305846882200456728,6090263631836,1152925375446128604,1152925374372384281,1152925376519870243,2305846876831747603,1152925379741093432, - 1152925370077419294,1152925371151161123,2305846872536780303,1152925380814837748,1152925365782450293,1152925366856193827,2305846868241813003,1152925365782449684, - 1152925362561226531,2305846865020587528,4509715664454,3853659412341,1152925357192515084,1152925356118775582,1152925359340001059,2305846858578136578, - 1152926817481398260,6558415067101,1152925350750066549,1152925349676322303,1152925348602582814,1152925352897550115,2305846851061943803,1152925350750066667, - 3839700768296,3838627026805,1152925342160129535,1152925341086390046,1152925345381357347,2305846843545751028,1152926858283587572,1152925336791420466, - 1152925335717680926,1152925337865164579,2305846838177041903,4297114785320,3826815866741,1152925330348969457,1152925329275229982,1152925332496455459, - 2305846831734590953,1152926658567608308,1152928063021914076,3819299673972,1152925322832776678,1152925321759037214,1152925326054004515,2305846824218398178, - 6090263631851,1152925375446128501,3811783478751,1152925315316583910,1152925314242844446,1152925318537811747,2305846816702205403,1152928061948172267, - 3805341030259,1152925308874132966,1152925307800393502,1152925311021618979,2305846810259754453,4005057009626,6447819656658,1152925302431682022, - 1152925301357942558,1152925304579168035,2305846803817303503,6090263631733,1152925297062975349,1152925295989231078,1152925294915491614,1152925298136717091, - 2305846797374852553,1152926404090794683,1152925290620524318,1152925291694266147,2305846793079885253,1152925863998657211,1152925286325557022,1152925287399298851, - 2305846788784917953,1152928060874430428,1152925282030589469,2305846785563693169,3775276259187,1152925278809363131,1152925277735622430,1152925283104331555, - 2305846780194983353,2305849565481277403,1152925273440652870,4519379340725,3777423740340,3765612582770,1152925269145686715,1152925268071946014, - 1152925274514396963,2305846770531306928,1152926447040467940,1152925263776977782,2305846767310082781,2305846766236340966,1152927575543125992,2305846764088858601, - 3753801422359,1152925257334527975,3751653938728,1152927575543125994,2305846758720149483,1152925253039558053,1152925251965816234,1152925264850720547, - 2305846754425179553,1152926949551641572,1152925247670850422,2305846751203955421,2305846750130213608,2305846749056470444,2305846747982729958,3748432713589, - 1152925241228397977,1152925240154658590,1152925248744593187,2305846742614019478,3753801422708,1152925235859688857,1152925234785949470,1152925236933433123, - 2305846737245310353,1152927577690609640,1152928076980557560,2305846734024084899,2305846732950343054,3722662909917,1152925226196013789,1152925231564724003, - 2305846728655375753,3723736649286,1152925221901045149,1152925222974789411,2305846724360408453,2305846932666324955,3723736649090,1152925216532337384, - 1152925218679822115,2305846718991699328,1152926949551642611,1152925212237370230,2305849455959611357,1152927952426505976,3704409296251,3703335557084, - 1152925206868659580,1152925205794920222,1152925213311112995,2305846708254281078,1152925211163626955,1152925201499952926,1152925202573694755,2305846703959313778, - 3748432713588,1152925197204983164,1152925196131243806,1152925198278727459,2305846698590604653,3722662908008,1152925191836274092,1152925192910018339, - 2305846694295637353,2305847518929360859,3722662907238,1152925186467566310,1152925188615051043,2305846688926928228,1152926447040468979,1152925182172599158, - 1152927951352764381,2305846684631963509,3674344527836,1152925177877630304,1152925176803890974,1152925183246341923,2305846679263251803,6446745917404, - 3748432711000,1152925171435179360,1152925170361440030,1152925173582665507,2305846672820800853,6447819659229,2305846763015116328,3660385881426, - 1152925163918986592,1152925162845247262,1152925167140214563,2305846665304608078,3753801422709,1152925158550279029,1152925157476538142,1152925159624021795, - 2305846659935898953,1152925197204984693,1152925153181570846,1152925154255312675,2305846655640931653,1152928072685590304,1152925149960345379,2305846652419706178, - 6090263631845,1152925145665378277,1152925146739119907,2305846648124738878,6456409593384,1152925141370409836,1152925140296668958,1152925142444152611, - 2305846642756029753,1152925141370409823,1152925136001701662,1152925137075443491,2305846638461062453,6090263631860,1152925131706734580,1152925132780476195, - 2305846634166095153,6090263631859,1152925127411767283,1152925128485508899,2305846629871127853,6090263631858,1152925123116799986,1152925124190541603, - 2305846625576160553,6090263631857,1152925118821832689,1152925119895574307,2305846621281193253,6090263631856,1152925114526865392,1152925115600607011, - 2305846616986225953,6090263631855,1152925110231898095,1152925111305639715,2305846612691258653,6090263631854,1152925105936930798,1152925107010672419, - 2305846608396291353,1152926855062362096,3597035116511,1152925102715705123,2305846604101324053,1152928082349266927,3592740149214,1152925098420737827, - 2305846599806356753,1152926853988620276,1152925094125770531,2305846596585131278,1152925097346996212,1152925090904545059,2305846593363905803,1152925097346996211, - 1152925087683319587,2305846590142680328,6090263631842,1152925083388352482,1152925084462094115,2305846585847713028,6090263631841,1152925079093385185, - 1152925080167126819,2305846581552745728,6090263631840,1152925074798417888,1152925075872159523,2305846577257778428,1152926028281156389,1152925071577192227, - 2305846574036552953,1152928076980556576,1152925068355966755,2305846570815327478,1152926761646823400,1152925065134741283,2305846567594102003,1152928074833072928, - 1152925061913515811,2305846564372876528,1152928073759331104,1152925058692290339,2305846561151651053,1152926022912446970,1152925055471064867,2305846557930425578, - 6572373710376,1152925051176096250,1152925052249839395,2305846553635458278,1152928064095654691,1152925047954872099,2305846550414232803,6469294495272, - 1152925043659904906,1152927953500247944,1152925041512418527,1152925040438678477,6576668678021,1152925038291193052,1152925037217453854,1152925044733646627, - 2305846539676814553,6575594936196,1152925032922483932,1152925031848744734,1152925033996228387,2305846534308105428,6574521194371,1152925027553774812, - 1152925026480035614,1152925028627519267,2305846528939396303,6573447452546,1152925022185065692,1152925021111326494,1152925023258810147,2305846523570687178, - 6572373710721,1152925016816356572,1152925015742617374,1152925017890101027,2305846518201978053,1152927973901342602,1152925011447647454,3505767061032, - 1152925009300165469,1152925008226424606,1152925012521391907,2305846510685785278,6455335852004,1152925003931457509,6090263628987,1152925001783971002, - 1152925000710231838,1152925005005199139,2305846503169592503,5233417655848,1152924996415261882,1152924995341522925,1152924994267780894,1152924997489006371, - 2305846496727141553,2305848333899404140,2305846494579659530,1152924988899069113,1152924987825329950,1152924991046555427,2305846490284690603,6470368237096, - 1152924983530360032,1152924982456618206,1152924983530362761,1152924980309134558,2305846483842239654,1152924978161650875,1152924977087911710,1152924984604104483, - 2305846479547272353,1152928071611847629,1152924973866686243,2305846476326046878,1152927961016440805,3499324610088,1152924968497974427,2305846472031079597, - 1152927574469384069,3460669904877,1152927976048825883,2305846467736115084,1152927974975084060,2305846465588628628,1152927973901342238,2305846463441144978, - 1152927972827600415,2305846461293661328,1152927573395642247,2305846459146177678,1152927572321900422,2305846456998694028,3446711258262,1152924950244363416, - 1152924949170624286,1152924970645460771,2305846451629984903,1152924978161653733,1152924944875657197,1152924943801915166,1152924945949398819,2305846446261275778, - 1152927958868954286,1152924939506947870,1152924940580689699,2305846441966308478,5233417653435,1152924935211980773,1152924934138238843,1152924933064496926, - 1152924936285722403,2305846435523857528,3430605133352,1152924928769526939,6565931259771,6090263628915,1152924925548301428,1152924924474562334, - 1152924929843271459,2305846426933922928,6090263631843,1152924920179595235,6076304988131,1152924918032108652,6088116148195,1152924915884625002, - 6077378729955,1152924913737141352,6066641311715,1152924911589657702,6065567569891,1152924909442174052,6078452471779,1152924907294690402, - 6079526213603,1152924905147206752,1152924921253336867,2305846407606570078,6564857517608,1152924900852242401,1152924899778500576,6563783775784, - 1152924897631013979,1152924896557275104,2305846400090377305,6562710033960,1152924893336046682,2305846396869151829,2305846395795412962,3385507974318, - 1152924901925984035,2305846392574184528,3485365966376,2305849572997470178,2305846389352962016,1152924883672370253,1152924886893598499,2305846386131733578, - 1152924891188565993,1152924880451147555,2305846382910508103,1152924891188565992,1152924877229922083,2305846379689282628,1152924891188565991,1152924874008696611, - 2305846376468057153,1152924891188565990,1152924870787471139,2305846373246831678,1152924894409791467,1152924867566245667,2305846370025606203,1152924894409791466, - 1152924864345020195,2305846366804380728,1152924898704758764,1152924861123794723,2305846363583155253,6585258612621,1152924856828827621,1152924855755085598, - 1152924857902569251,2305846358214446128,6076304985138,1152924851460117343,1152924850386376478,1152924852533860131,2305846352845737003,1152928089865458525, - 1152924847165151011,2305846349624511528,6568078743080,1152926848619911154,2305846346403288014,2305846345329546016,2305846344255804384,2305846343182062551, - 2305846342108320742,3331820882981,1152924843943925539,2305846338887093278,6090263631816,1152924832132765640,1152924833206507299,2305846334592125978, - 6090263631815,1152924827837798343,1152924826764056520,1152924828911540003,2305846329223416853,6090263631814,1152924822469089222,1152924821395347399, - 1152924820321605576,1152924823542830883,2305846322780965903,6090263631813,1152924816026638277,1152924814952896454,1152924813879154631,1152924812805412808, - 1152924817100379939,2305846315264773128,6090263631812,1152924808510445508,1152924807436703685,1152924806362961862,1152924805289220039,1152924804215478216, - 1152924809584187171,2305846306674838528,6536940230496,1152924799920510920,1152924798846768926,1152924800994252579,2305846301306129403,6535866488671, - 1152924794551801799,1152924793478059976,1152924792404317982,1152924795625543459,2305846294863678453,6534792746846,1152924788109350854,1152924787035609031, - 1152924785961867208,1152924784888125214,1152924789183092515,2305846287347485678,6533719005021,1152924780593158085,1152924779519416262,1152924778445674439, - 1152924777371932616,1152924776298190622,1152924781666899747,2305846278757551078,6532645263196,1152924772003223492,1152924770929481669,1152924769855739846, - 1152924768781998023,1152924767708256200,1152924766634514206,1152924773076965155,2305846269093874653,6536940230184,6515465393704,1152924761265802202, - 1152924760192063431,1152924759118318615,1152924763413288739,2305846261577681878,1152924760192063430,1152924754823351314,1152924755897095971,2305846257282714578, - 1152924760192063429,1152924750528384012,1152924751602128675,2305846252987747278,3257732699688,1152924746233419700,1152924747307161379,2305846248692779978, - 1152928020072238042,6090263631796,1152924740864707527,1152924743012194083,2305846243324070853,6425271080488,1152924736569740250,1152924735496001460, - 6403796244008,1152924733348514752,1152924732274775838,1152924737643484963,2305846234734136253,1152924735495998425,1152924727979808588,2305848971702048206, - 2305846230439171475,2305846229365429621,1152924723684838329,1152924722611099422,1152924729053550371,2305846225070459828,3231962895912,1152924718316129242, - 1152924717242390452,1152924716168645558,1152924715094906654,1152924719389873955,2305846217554267053,1152924717242387417,1152924710799939358,1152924711873681187, - 2305846213259299753,1152924723684838343,6519760361296,1152924705431227302,1152924704357488414,1152924707578713891,2305846206816848803,6535866488360, - 1152924700062518234,1152924698988779462,1152928022219721630,1152924701136262947,2305846200374397853,1152928022219721671,1152924694693812003,2305846197153172378, - 1152928021145979806,1152924691472586531,2305846193931946903,1152928021145979847,1152924688251361059,2305846190710721428,6534792746536,1152924683956393927, - 6533719004712,1152924681808907152,1152924680735165400,1152924679661426613,1152924685030135587,2305846182120786828,1152924683956390816,1152924675366456207, - 1152924674292714456,1152924673218975669,1152924676440200995,2305846175678335878,1152924675366459333,1152924668924005336,1152924667850266550,1152924666776524725, - 1152924669997750051,2305846169235884928,1152924762339547079,1152924662481557430,6090263631798,1152924660334070652,1152924663555299107,2305846162793433978, - 1152924683956390815,1152924656039106486,1152924654965361531,1152924657112848163,2305846157424724853,1152924759118321503,1152924650670397214,1152924651744139043, - 2305846153129757553,1152924759118321502,1152924646375429918,1152924647449171747,2305846148834790253,1152924761265805255,6090263628650,1152924641006717914, - 1152924639932978976,1152924643154204451,2305846142392339303,1152924700062518232,1152924635638008721,6424197338664,1152924633490525119,6423123596840, - 1152924631343041377,1152924630269299555,1152924629195560734,1152924636711753507,2305846131654921053,1152924635638011846,1152924624900590527,1152924623826851679, - 1152924622753109790,1152924625974335267,2305846125212470103,1152924623826848608,1152924618458142494,1152924619531884323,2305846120917502803,5930276099624, - 5898063842128,1152924613089433524,1152924612015691719,1152924610941949726,1152924615236917027,2305846113401310028,1152924614163175348,1152924606646982598, - 1152924605573240606,1152924607720724259,2305846108032600903,1152924606646982597,1152924601278273310,1152924602352015139,2305846103737633603,1152928020072240590, - 2305849538637731778,2305846100516408127,2305846099442666302,2305849538637731777,2305849540785215428,2305846096221440828,2305846095147699005,2305849534342764478, - 2305846093000215352,2305846091926473527,2305849534342764477,2305849536490248128,2305846088705248053,2305846087631506230,2305846086557764409,2305849530047797178, - 2305846084410280752,2305846083336538927,2305849530047797177,2305849532195280828,2305846080115313453,2305846079041571630,2305846077967829809,2305846076894087993, - 2305846075820348669,1152924570139757351,1152924569066015527,1152924569066015526,1152924566918531877,2305846070451637027,2305846096221440827,2305846068304153377, - 2305849540785215427,2305846066156669759,2305846065082927904,2305846064009186106,2305846088705248052,2305846061861702427,2305849536490248127,2305846059714218808, - 2305846058640476954,2305846057566735155,2305846056492993308,2305846080115313452,2305846054345509652,2305849532195280827,2305846052198026032,2305846051124284179, - 2305846050050542379,2305846048976800533,2305846047903058716,2305846046829319511,1152924541148728076,1152924540074986252,1152924540074986251,1152924537927502602, - 2305846057566735133,2305846040386865936,2305846039313124125,2305846038239384889,1152924532558793476,1152924531485051652,1152924531485051651,1152924529337568002, - 2305846032870673160,2305846031796931362,2305846031796931327,2305846029649447677,2305846032870673152,2305846065082927929,2305846058640476978,2305846025354480378, - 2305846051124284202,2305846023206996728,2305846022133254906,2305846021059515675,1152924515378924276,1152924514305182452,1152924514305182451,1152924512157698802, - 2305846015690804003,2305846014617062139,2305846013543320316,2305846012469578494,2305846076894087986,2305846010322097285,1152924504641506026,1152924503567764202, - 1152924503567764201,1152924501420280552,2305846004953385702,2305846047903058710,2305846002805904607,1152924497125313251,1152924496051571427,1152924496051571426, - 1152924493904087777,2305846039313124119,2305845996363453633,1152924490682862301,1152924489609120477,1152924489609120476,1152924487461636827,2305845990994741983, - 2305845989921000165,2305845989921000152,2305845987773516502,2305845990994741977,2305846022133254905,2305845984552293539,1152924478871702226,1152924477797960402, - 1152924477797960401,1152924475650476752,2305845979183581926,2305845978109840084,2305845977036098261,2305845975962356439,2305845974888614636,2305846076894087978, - 2305845972741133325,1152924467060542151,1152924465986800327,1152924465986800326,1152924463839316677,2305845967372421827,2305846047903058703,2305845965224940647, - 1152924459544349376,1152924458470607552,1152924458470607551,1152924456323123902,2305846039313124112,2305845958782489673,1152924453101898426,1152924452028156602, - 1152924452028156601,1152924449880672952,2305845953413778108,2305845952340036290,2305845952340036277,2305845950192552627,2305845953413778102,2305846022133254903, - 2305845946971329579,1152924441290738351,1152924440216996527,1152924440216996526,1152924438069512877,2305845941602618051,2305845940528876209,2305845939455134386, - 2305845938381392564,2305845937307650761,2305845936233908972,2925946476380,1152924429479578432,1152924428405839646,1152924598057047843,2305845930865199778, - 2305845975962356461,2305845928717716136,2305845927643974381,2917356541787,1152924420889643840,1152924419815905054,1152924425184614179,2305845922275265178, - 2305846014617062127,2305845920127781527,2305845919054039806,2305845917980297966,2305845978109840077,2305845915832814227,2305845914759072471,2305845913685330636, - 2305845912611588756,2305845940528876202,2305845910464105102,2305845909390363316,2305845908316621481,2305845907242879631,2305845906169137812,2895881705306, - 1152924399414807360,1152924398341068574,1152924416594679587,2305845900800428678,2305845913685330581,2305845898652945036,2305845897579203221,2887291770713, - 1152924390824872768,1152924389751133982,1152924395119843107,2305845892210494078,2305845936233908938,2880849319768,1152924384382421824,1152924383308683038, - 1152924386529908515,2305845885768043128,2305845927643974347,2874406868823,1152924377939970880,1152924376866232094,1152924380087457571,2305845879325592178, - 2305845906169137808,2867964417878,1152924371497519936,1152924370423781150,1152924373645006627,2305845872883141228,2305845897579203217,2861521966933, - 1152924365055068992,1152924363981330206,1152924367202555683,2305845866440690278,2305845936233908903,2855079515988,1152924358612618048,1152924357538879262, - 1152924360760104739,2305845859998239328,2305845927643974312,2848637065043,1152924352170167104,1152924351096428318,1152924354317653795,2305845853555788378, - 2305845906169137803,2842194614098,1152924345727716160,1152924344653977374,1152924347875202851,2305845847113337428,2305845897579203212,2835752163153, - 1152924339285265216,1152924338211526430,1152924341432751907,2305845840670886478,1152928020072240561,2305849538637731069,1152924332842814026,1152924331769072202, - 1152924331769072201,1152924329621588552,2305845833154693702,2305849541858956631,1152924326400363076,1152924325326621252,1152924325326621251,1152924323179137602, - 2305849540785214777,1152924321031653951,1152924319957912127,1152924319957912126,1152924317810428477,2305845821343533632,2305845820269791813,2305845820269791802, - 2305845818122308152,2305845821343533627,2305849539711472923,1152924310294235701,1152924309220493877,1152924309220493876,1152924307073010227,2305845810606115398, - 2305845809532373558,2305845808458631735,2305845807384889913,2305849534342763653,1152924300630559276,1152924299556817452,1152924299556817451,1152924297409333802, - 2305845800942438952,2305849537563989215,1152924294188108326,1152924293114366502,1152924293114366501,1152924290966882852,2305849536490247361,1152924288819399201, - 1152924287745657377,1152924287745657376,1152924285598173727,2305845789131278882,2305845788057537063,2305845788057537052,2305845785910053402,2305845789131278877, - 2305849535416505507,1152924278081980951,1152924277008239127,1152924277008239126,1152924274860755477,2305845778393860648,2305845777320118808,2305845776246376985, - 2305845775172635163,2305845774098893357,2305849530047796237,1152924267344562701,1152924266270820877,1152924266270820876,1152924264123337227,2305845767656442377, - 2305849533269021799,1152924260902111751,1152924259828369927,1152924259828369926,1152924257680886277,2305849532195279945,1152924255533402626,1152924254459660802, - 1152924254459660801,1152924252312177152,2305845755845282307,2305845754771540488,2305845754771540477,2305845752624056827,2305845755845282302,2305849531121538091, - 1152924244795984376,1152924243722242552,1152924243722242551,1152924241574758902,2305845745107864073,2305845744034122233,2305845742960380410,2305845741886638588, - 2305845740812896782,2305845739739154989,2729451722588,1152924232984824395,1152924231911085854,1152924334990300963,2305845734370445803,2305845775172635182, - 2305845732222962161,2305845731149220398,2720861787995,1152924224394889803,1152924223321151262,1152924228689860387,2305845725780511203,2305845809532373552, - 2305845723633027552,2305845722559285817,2305845721485543983,2305845777320118802,2305845719338060252,2305845718264318491,2305845717190576657,2305845716116834781, - 2305845744034122227,2305845713969351127,2305845712895609340,2305845711821867506,2305845710748125656,2305845709674383837,2699386951514,1152924202920053323, - 1152924201846314782,1152924220099925795,2305845704305674703,2305845717190576606,2305845702158191061,2305845701084449246,2690797016921,1152924194330118731, - 1152924193256380190,1152924198625089315,2305845695715740103,2305845739739154959,2684354565976,1152924187887667787,1152924186813929246,1152924190035154723, - 2305845689273289153,2305845731149220368,2677912115031,1152924181445216843,1152924180371478302,1152924183592703779,2305845682830838203,2305845709674383833, - 2671469664086,1152924175002765899,1152924173929027358,1152924177150252835,2305845676388387253,2305845701084449242,2665027213141,1152924168560314955, - 1152924167486576414,1152924170707801891,2305845669945936303,2305845739739154928,2658584762196,1152924162117864011,1152924161044125470,1152924164265350947, - 2305845663503485353,2305845731149220337,2652142311251,1152924155675413067,1152924154601674526,1152924157822900003,2305845657061034403,2305845709674383828, - 2645699860306,1152924149232962123,1152924148159223582,1152924151380449059,2305845650618583453,2305845701084449237,2639257409361,1152924142790511179, - 1152924141716772638,1152924144937998115,2305845644176132503,1152928020072240531,2817498552263,1152924136348060052,1152924135274321694,1152924138495547171, - 2305845637733681553,1152927569100675015,2305849540785215431,2305845634512459714,2305845633438717889,2305845632364976064,2305845631291234239,2305845630217492414, - 2305845629143750589,2305845628070008764,2305845626996266939,2305845625922525114,2305845624848783289,2305845623775037838,2305845622701299001,1152924117020707201, - 1152924115946965377,1152924115946965376,1152924113799481727,2608118896582,1152924111651998100,1152924110578259742,1152924132053096227,2305845613037619578, - 1152927569100675014,1152927568026933187,2305845609816394115,2305845608742655942,1152927566953191362,2305845606595168643,2305845605521426804,1152927565879449537, - 2305845603373943171,2305845602300201329,1152927564805707712,2305845600152717699,2305845599078975854,1152927563731965887,2305845596931492227,2305845595857750379, - 1152927562658224062,2305845593710266755,2305845592636524904,1152927561584482237,2305845590489041283,2305845589415299429,1152927560510740412,2305845587267815811, - 2305845586194073954,1152927559436998587,2305845584046590339,2305845582972848479,1152927558363256762,2305845580825364867,2305845579751623004,1152927557289514937, - 2305845577604139395,2305845576530397529,2305845575456655735,2305845574382916891,1152924068702325076,1152924067628583252,1152924067628583251,1152924065481099602, - 2559800514501,1152924063333616020,1152924062259877662,1152924107357034275,2305845564719237453,1152927569100675013,1152924104135808527,2305845561498011990, - 2305845560424273861,1152924100914583054,2305845558276786518,2305845557203044679,1152924097693357581,2305845555055561046,2305845553981819204,1152924094472132108, - 2305845551834335574,2305845550760593729,1152924091250906635,2305845548613110102,2305845547539368254,1152924088029681162,2305845545391884630,2305845544318142779, - 1152924084808455689,2305845542170659158,2305845541096917304,1152924081587230216,2305845538949433686,2305845537875691829,1152924078366004743,2305845535728208214, - 2305845534654466354,1152924075144779270,2305845532506982742,2305845531433240879,1152924071923553797,2305845529285757270,2305845528212015404,2305845527138273610, - 2516850841436,1152924020383943060,1152924019310204702,1152924059038652195,2305845521769564453,1152924055817426447,2305845519622080809,2509334648667, - 1152924012867750292,1152924011794011934,1152924016088979235,2305845514253371678,1152924052596200974,2305845512105888041,2501818455898,1152924005351557524, - 1152924004277819166,1152924008572786467,2305845506737178903,1152924049374975501,2305845504589695273,2494302263129,1152923997835364756,1152923996761626398, - 1152924001056593699,2305845499220986128,1152924046153750028,2305845497073502505,2486786070360,1152923990319171988,1152923989245433630,1152923993540400931, - 2305845491704793353,1152924042932524555,2305845489557309737,2479269877591,1152923982802979220,1152923981729240862,1152923986024208163,2305845484188600578, - 1152924039711299082,2305845482041116969,2471753684822,1152923975286786452,1152923974213048094,1152923978508015395,2305845476672407803,1152924036490073609, - 2305845474524924201,2464237492053,1152923967770593684,1152923966696855326,1152923970991822627,2305845469156215028,1152924033268848136,2305845467008731433, - 2456721299284,1152923960254400916,1152923959180662558,1152923963475629859,2305845461640022253,1152924030047622663,2305845459492538665,2449205106515, - 1152923952738208148,1152923951664469790,1152923955959437091,2305845454123829478,1152924026826397190,2305845451976345897,2441688913746,1152923945222015380, - 1152923944148277022,1152923948443244323,2305845446607636703,1152924023605171717,2305845444460153129,2434172720977,1152923937705822612,1152923936632084254, - 1152923940927051555,2305845439091443928,1152928020072240501,2305849060822620100,1152923931263371476,1152923930189629652,1152923930189629651,1152923928042146002, - 2422361561031,1152923925894662357,1152923924820924190,1152923933410858787,2305845427280283853,2305845602300204285,1152923920525953226,1152923919452211402, - 1152923919452211401,1152923917304727752,2305845420837832902,2305845622701299031,1152923914083502276,1152923913009760452,1152923913009760451,1152923910862276802, - 2305845608742655289,1152923908714793151,1152923907641051327,1152923907641051326,1152923905493567677,2305845409026672832,2305845407952931013,2305845407952931002, - 2305845405805447352,2305845409026672827,2305845605521429787,1152923897977374901,1152923896903633077,1152923896903633076,1152923894756149427,2305845398289254598, - 2305845397215512758,2305845396141770935,2305845395068029113,2305845589415302277,1152923888313698476,1152923887239956652,1152923887239956651,1152923885092473002, - 2305845388625578152,2305845599078978783,1152923881871247526,1152923880797505702,1152923880797505701,1152923878650022052,2305845595857753281,1152923876502538401, - 1152923875428796577,1152923875428796576,1152923873281312927,2305845376814418082,2305845375740676263,2305845375740676252,2305845373593192602,2305845376814418077, - 2305845592636527779,1152923865765120151,1152923864691378327,1152923864691378326,1152923862543894677,2305845366076999848,2305845365003258008,2305845363929516185, - 2305845362855774363,2305845361782032557,2305845576530400269,1152923855027701901,1152923853953960077,1152923853953960076,1152923851806476427,2305845355339581577, - 2305845586194076775,1152923848585250951,1152923847511509127,1152923847511509126,1152923845364025477,2305845582972851273,1152923843216541826,1152923842142800002, - 1152923842142800001,1152923839995316352,2305845343528421507,2305845342454679688,2305845342454679677,2305845340307196027,2305845343528421502,2305845579751625771, - 1152923832479123576,1152923831405381752,1152923831405381751,1152923829257898102,2305845332791003273,2305845331717261433,2305845330643519610,2305845329569777788, - 2305845328496035982,2305845327422294189,2317134862172,1152923820667963605,1152923819594225438,1152923921599698723,2305845322053585003,2305845362855774382, - 2305845319906101361,2305845318832359598,2308544927579,1152923812078029013,1152923811004290846,1152923816372999971,2305845313463650403,2305845397215512752, - 2305845311316166752,2305845310242425017,2305845309168683183,2305845365003258002,2305845307021199452,2305845305947457691,2305845304873715857,2305845303799973981, - 2305845331717261427,2305845301652490327,2305845300578748540,2305845299505006706,2305845298431264856,2305845297357523037,2287070091098,1152923790603192533, - 1152923789529454366,1152923807783065379,2305845291988813903,2305845304873715806,2305845289841330261,2305845288767588446,2278480156505,1152923782013257941, - 1152923780939519774,1152923786308228899,2305845283398879303,2305845327422294159,2272037705560,1152923775570806997,1152923774497068830,1152923777718294307, - 2305845276956428353,2305845318832359568,2265595254615,1152923769128356053,1152923768054617886,1152923771275843363,2305845270513977403,2305845297357523033, - 2259152803670,1152923762685905109,1152923761612166942,1152923764833392419,2305845264071526453,2305845288767588442,2252710352725,1152923756243454165, - 1152923755169715998,1152923758390941475,2305845257629075503,2305845327422294128,2246267901780,1152923749801003221,1152923748727265054,1152923751948490531, - 2305845251186624553,2305845318832359537,2239825450835,1152923743358552277,1152923742284814110,1152923745506039587,2305845244744173603,2305845297357523028, - 2233382999890,1152923736916101333,1152923735842363166,1152923739063588643,2305845238301722653,2305845288767588437,2226940548945,1152923730473650389, - 1152923729399912222,1152923732621137699,2305845231859271703,1152924733348514776,6518686619471,1152927927730444127,6422049855016,1152923721883715602, - 1152927910550571024,2215129384979,1152923718662490132,1152923717588752158,1152923726178686755,2305845220048111628,1152928023293463495,1152923713293784862, - 1152923714367526691,2305845215753144328,1152924733348514753,1152924631343044447,1152923707925071889,1152923706851330053,6405943727656,1152923704703846402, - 6524055328596,1152923702556362752,1152923701482624798,1152923710072559395,2305845203941984253,6522981586771,1152923697187653632,1152923696113915678, - 1152923698261399331,2305845198573275128,6521907844946,1152923691818944512,1152923690745206558,1152923692892690211,2305845193204566003,6520834103121, - 1152923686450235392,1152923685376497438,1152923687523981091,2305845187835856878,1152924673218975672,1152923682155271971,2305845184614631403,2305849542932699078, - 1152928038325852102,2172179711976,1152923675712821191,1152923674639076312,1152927912698058267,2167884748728,6516539131874,1152923670344108004, - 1152923669270370078,1152923678934046499,2305845171729729503,1152923673565337525,6516539135528,1152923663901657052,1152923662827919134,1152923666049144611, - 2305845165287278553,1152924679661426616,1152923658532951838,1152923659606693667,2305845160992311253,1152924675366456280,6517612877352,1152923653164238802, - 2305849431263549278,1152927926656702302,2145336166351,1152923648869275487,1152923647795529680,1152923646721788837,1152923645648049950,1152923655311726371, - 2305845148107409353,1152923673565337532,1152923641353082654,1152923642426824483,2305845143812442053,1152923673565337531,1152923637058115358,1152923638131857187, - 2305845139517474753,1152923673565337530,1152923632763148062,1152923633836889891,2305845135222507453,1152923673565337529,1152923628468180766,1152923629541922595, - 2305845130927540153,1152923651016755152,6404869986229,1152923623099467702,1152923622025729822,1152923625246955299,2305845124485089203,6420976113496, - 1152923617730762677,2305845121263864803,1152923615583274934,1152923614509537054,1152923618804504355,2305845116968896428,6531571521371,6419902371671, - 1152923609140828085,2305845112673929129,1152923606993340342,1152923605919602462,1152923611288311587,2305845108378961828,6530497779546,6418828629846, - 1152923600550893493,2305845104083994529,1152923598403405750,1152923597329667870,1152923602698376995,2305845099789027228,6529424037721,6417754888021, - 1152923591960958901,2305845095494059929,1152923589813471158,1152923588739733278,1152923594108442403,2305845091199092628,1152924700062521288,1152923584444766150, - 1152923583371021330,1152923585518507811,2305845085830383503,1152923584444765168,6423123597254,1152923578002311052,1152923580149798691,2305845080461674378, - 1152923584444766147,6090263631811,1152923572633601927,1152923574781089571,2305845075092965253,1152923584444766146,6090263631810,1152923567264892802, - 1152923569412380451,2305845069724256128,1152923584444766145,6090263631809,1152923561896183677,1152923564043671331,2305845064355547003,1152923584444766144, - 6090263631808,1152923556527474552,1152923558674962211,2305845058986837878,1152923584444766143,6090263631807,1152923551158765427,1152923553306253091, - 2305845053618128753,1152923584444766142,6090263631806,1152923545790056302,1152923547937543971,2305845048249419628,1152923584444766141,6090263631805, - 1152923540421347177,1152923542568834851,2305845042880710503,1152923584444766140,6090263631804,1152923535052638052,1152923537200125731,2305845037512001378, - 1152923584444765182,2305849537563989952,2305845034290780097,2305845033217034077,2305845032143296450,2305845031069550427,2305845029995812803,2019708377029, - 1152923523241477983,1152923531831416611,2305845025700841303,2305849533269022652,2305845023553361853,2305845022479615827,2305845021405878206,2305845020332132177, - 2305845019258394559,2008970958788,1152923512504059743,1152923520020256547,2305845014963423053,1152923530757674939,1152923509282838307,2305845011742197578, - 1152928038325851679,2305849425894840152,2305845008520976217,2305845007447230277,2305845006373492570,2305845005299746627,2305845004226008923,2305845003152262983, - 1992864831325,1152923496397932428,1152923506061612835,2305844998857295678,1152928037252109855,2305849421599872852,2305844995636074325,2305844994562328377, - 2305844993488590678,2305844992414844727,2305844991341107031,2305844990267361083,1979979929436,1152923483513030540,1152923493176710947,2305844985972393778, - 6521907844947,1152923479218063244,1152923480291809059,2305844981677426478,1152928027588433439,1152928028662175680,2305844978456201002,1152928029735917505, - 2305844976308717353,2305844975234975527,1152928030809659330,2305844973087491878,2305844972013750052,1152928031883401155,2305844969866266403,2305844968792524587, - 2305849533269022656,1968168765215,2305844965571299102,2305849534342764481,2305844976308717352,1953136379676,2305844961276331805,2305844960202589977, - 2305849535416506306,2305844973087491877,1947767670551,2305844955907622680,2305844954833880852,2305849536490248131,2305844969866266402,1942398961426, - 2305844950538913555,1959578830607,1152923443784587206,2305844947317688096,1937030256570,1152923440563357585,1152923475996841763,2305844943022720778, - 1152928040473335752,1152923436268391313,1152923435194652613,1152923434120907788,1152923437342136099,2305844936580269828,1152923435194652612,1152923429825940485, - 1152923430899685155,2305844932285302528,1152923435194652609,1152923425530972028,1152923426604717859,2305844927990335228,1152923435194652608,1152923421236004727, - 1152923422309750563,2305844923695367928,1152923429825943489,1152923418014783267,2305844920474142453,1152923429825943488,1152923414793557795,2305844917252916978, - 1152928021145982486,2305844915105437622,1152923409424848412,1903744260034,1152923407277360902,1152923411572332323,2305844909736724203,1152923584444766047, - 1152923402982394720,1152923401908655902,6420976113192,1152923399761168401,6416681145896,6417754887720,1152923396539942627,1890859357736, - 1152923394392458980,2305844897925568349,1152923392244975334,1152923391171237718,1152923404056139555,2305844893630596828,1152923397613688665,1882269423144, - 1152923385802524388,2305844889335633757,1152923383655040742,1152923382581303125,1152923387950012195,2305844885040662228,1152923396539946840,1873679488552, - 1152923377212589796,2305844880745699165,1152923375065106150,1152923373991368532,1152923379360077603,2305844876450727628,1152927921287993177,1865089553960, - 1152923368622655204,2305844872155764573,1152923366475171558,1152923365401433939,1152923370770143011,2305844867860793028,1152923436268391264,1152923361106466590, - 1152923610214569808,1152923358958978752,6090263627455,1152923356811495102,1152923362180208419,2305844859270858428,1854352135720,1152923352516527808, - 1152923351442786217,1152923353590273827,2305844853902149303,1152923601624635216,1152923347147818680,6090263627444,1152923345000335027,1152923348221564707, - 2305844847459698353,1842540975656,1152923340705367736,1152923339631626145,1152923341779113763,2305844842090989228,1152923358958978985,1152923347147818913, - 6527276554071,1152923333189174958,2305844836722280104,1152923331041691321,2305844834574796457,1152927913771800086,2305844832427317074,1822139877027, - 1152923325672982208,1152923336410404643,2305844828132345503,1152923340705367737,1816771172175,1152923320304273088,1152923322451760931,2305844822763636378, - 1152923360032724815,1152923333189179216,1810328720936,1152923313861822103,2305845226490563471,1152923311714338452,1152923317083051811,2305844814173701778, - 1152923360032720606,1152927911624316862,1801738786646,1152923305271887503,1152923308493117219,2305844807731250828,1152923360032720598,1152927911624316861, - 1795296335701,1152923298829436553,1152923302050666275,2305844801288799878,1152923360032720590,1152927911624316860,1788853884756,1152923292386985603, - 1152923295608215331,2305844794846348928,1152923360032720582,1152927911624316859,1782411433811,1152923285944534653,1152923289165764387,2305844788403897978, - 1152923436268394438,1152923281649568655,1152923280575829956,1152923279502085125,1152923282723313443,2305844781961447028,1152923280575829955,1152923275207116678, - 1152923276280862499,2305844777666479728,1152927926656702238,1152923270912149110,1152923269838411716,1152923271985895203,2305844772297770603,1152923721883719454, - 1152923265543439990,1152923264469702596,1152923263395960668,1152923266617186083,2305844765855319653,1152923279502088131,1152923260174735139,2305844762634094178, - 1152923264469698277,1152923255879768003,6419902371368,1152923253732279902,1152923256953509667,2305844756191643228,1152923280575829790,1152923721883719516, - 2305844752970422109,1152923248363575133,1741609240151,1152923245142345305,6531571521064,1152923242994861652,1152923250511058723,2305844745454224978, - 1152923255879763873,1152923239773640483,2305844742232999503,6528350295896,1152923235478668895,1152923236552415011,2305844737938032203,1152923242994865692, - 2305844735790553025,2305844734716811203,1724429375321,1152923227962476127,1152923232257447715,2305844730421839428,2305844747601708627,2305844728274360150, - 2305844727200618435,1716913182654,1152923220446283359,1152923224741254947,2305844722905646653,1152923242994861686,6526202812347,2305844719684425256, - 1152923214003832378,1152923217225062179,2305844716463195703,1152923242994861657,1152923253732284240,1152927919140509531,2305844712168228403,6519760356913, - 1152923205413897780,1152923210782611235,2305844707873261103,1152923275207120831,1152923201118930802,2305849536490247720,1152923198971446827,1152923202192676643, - 2305844701430810153,1152928031883401151,1152928023293466559,2305844698209589178,1152928023293466554,1152928025440950198,1152923190381516317,2305844693914617379, - 1683627181604,1152923187160286758,2305844690693391904,6525129066013,1152923183939061361,1152923195750225699,2305844686398424603,1152928031883401142, - 2305844684250945465,1152928026514692022,1152928023293466553,2305844681029715478,1670742279703,1152923174275384870,2305844677808490004,6524055324177, - 1152923171054159473,1152923180717840163,2305844673513522703,1152923244068607933,1152923167832938275,2305844670292297228,1152923244068607932,1152923164611712803, - 2305844667071071753,1152923244068607934,1152923161390487331,2305844663849846278,1152923435194652446,1152923721883719518,1152923156021773827,6090263631708, - 1152923153874290177,1152923158169261859,2305844656333653503,1152923281649571781,6532645262888,1152923148505581052,1152923147431843779,1152923146358097798, - 1152923150653069091,2305844648817460728,1152923253732280037,1152923142063130106,1152923140989388705,1152923139915650846,1152923143136876323,2305844642375009778, - 1152923140989388697,1152923135620683550,1152923136694425379,2305844638080042478,1152923140989388364,1152923131325716254,1152923132399458083,2305844633785075178, - 1152923140989388455,1152923127030748958,1152923128104490787,2305844629490107878,1152923399761172317,1152923122735777398,6090263631707,1152923120588293602, - 1152923119514556190,1152923123809523491,2305844621973915103,1152927555142031282,2305844619826436019,6090263627227,1152923113072105248,1152923116293330723, - 2305844615531464153,1152928015777273347,2305844613383985073,6090263627221,1152923106629654304,1152923109850879779,2305844609089013203,1152928013629789699, - 2305844606941534127,6090263627215,1152923100187203360,1152923103408428835,2305844602646562253,1152928011482306051,2305844600499083181,6090263627209, - 1152923093744752416,1152923096965977891,2305844596204111303,1152928007187338755,2305844594056632233,6090263627203,1152923087302301472,1152923090523526947, - 2305844589761660353,1152928005039855107,2305844587614181287,6090263627197,1152923080859850528,1152923084081076003,2305844583319209403,1152928009334822403, - 2305844581171730347,1152923075491141408,1152923077638625059,2305844577950500278,1152928002892371459,2305844575803021221,1152923070122432288,1152923072269915939, - 2305844572581791153,6368362759643,1152923065827464991,1152923066901206819,2305844568286823853,6367289017813,1152923061532497695,1152923062606239523, - 2305844563991856553,6366215275983,1152923057237530399,1152923058311272227,2305844559696889253,6365141534153,1152923052942563103,1152923054016304931, - 2305844555401921953,6364067792311,1152923048647595807,1152923049721337635,2305844551106954653,6362994050499,1152923044352628511,1152923045426370339, - 2305844546811987353,6361920308669,1152923040057661215,1152923041131403043,2305844542517020053,6360846566834,1152923035762693919,1152923036836435747, - 2305844538222052753,1152927897665672707,2305844536074573635,2305849601988499401,2305849601988499435,2305849601988499434,1152923027172754827,2305849601988499433, - 1152923025025271177,2305849601988499432,1152923022877787527,1152923021804045708,2305849601988499386,2305849601988499385,1152923018582820227,1152923017509078404, - 1152923016435336589,1152923016435336631,1509681005951,1152923017509078405,1152928043694556540,1506459780477,1152923017509078412,1152923008919147382, - 1152923007845401994,1152923006771660168,1152923005697918342,2305844509231023482,1152923007845401995,1152923002476692872,1152923001402951046,2305844504936056180, - 1152923002476692874,1152922998181725574,2305844501714830704,1152922998181725576,2305844499567347053,1152923020730304262,1152922992813016450,2305844496346121579, - 1152922992813016451,2305844494198637928,1152922988518053662,1152923032541468451,2305844490977412453,1152927899813156355,2305844488829933381,2305849601988499404, - 1152928098455394150,2305844485608703328,1152928098455394301,1152922978854377316,2305844482387477854,1152922976706892277,1152922978854377448,2305844479166252382, - 1152926441671758816,1152922972411921752,2305844475945026906,2305844477018771957,1464583853608,2305844472723801429,1152922967043212641,2305849601988499451, - 1152928098455394254,2305844468428834128,1152922978854377420,2305844466281350478,1152922960600764913,4931696203304,2305844463060125003,1152922957379536329, - 1451698947409,1152922955232057118,1152922985296828195,2305844457691415878,1152927906255607299,2305844455543936843,2305849601988499445,1152928098455394189, - 2305844452322706753,2305844451248964953,6570226226728,6569152480573,1152922943420896205,1152922942347150654,1152922978854377469,1152922940199671698, - 2305844443732772158,1152922940199671805,1152922936978446181,2305844440511546679,1152922936978446333,1152922933757220708,2305844437290321204,1152922933757220861, - 1152922930535995281,2305844434069095729,1152922930535995389,1152922927314769808,2305844430847870254,1152922927314769917,1152922924093544335,2305844427626644779, - 1152922924093544445,1152922920872318862,2305844424405419304,1152922918724833796,2305844422257935674,1152928098455394180,2305844420110452033,1152922914429866847, - 2305844417962968355,2305848333899404237,1406601795112,2305844414741742879,1152922909061154114,2305849601988499341,1152928098455394293,2305844410446775578, - 1152922904766190440,1152922904766190376,2305844407225550103,1152922904766190444,2305844405078066453,1152922904766190368,2305844402930582803,1152922978854377437, - 2305844400783099160,1152922895102513958,2305844398635615505,2305844411520517410,1152922891881288543,2305844395414390029,1152922940199671802,2305844393266906392, - 1152922936978446285,2305844391119422728,1152922933757220812,2305844388971939078,1152922930535995385,2305844386824455428,1152922927314769912,2305844384676971778, - 1152922924093544439,2305844382529488128,1152922920872318966,2305844380382004478,1152922874701419494,2305844378234520842,1152922874701419479,2305844376087037178, - 1152922936978446313,2305844373939553544,1152922933757220840,2305844371792069878,2305844370718328067,2305844369644586241,2305844368570844415,2305844367497102589, - 1152922861816517600,2305844365349618936,2305848274843603816,2305844363202138988,2305844362128397088,2305844361054655270,2305844359980913503,2305844358907171814, - 2305844357833429975,2305844356759688160,1346472252968,2305844354612200686,1152922848931612123,1343251023131,1152922846784132894,1152922952010831651, - 2305844349243491553,1152927904108123651,2305844347096012617,1152928098455394285,2305844344948524314,1152922978854377452,2305844342801040603,1152922940199671787, - 2305844340653556953,1152922936978446314,2305844338506073303,2305846485989723357,2305844336358591681,1326071158312,1152922829604259123,2305844333137364181, - 1152922930535995369,2305844330989880528,1152922825309295565,5442797311528,2305844327768655053,1152922822088066269,2305844337432331571,1152928098455394281, - 2305844323473687834,2305844322399946073,1152922940199671783,2305844320252462278,1152922936978446310,2305844318104978628,1152922812424389833,1152922811350651752, - 1152928064095655917,1152928076980555888,2305844312736269503,1152922807055685629,2305844310588785946,1152928064095655916,1152926022912448488,2305844307367560378, - 1152922801686971741,2305844305220076731,1152926022912448487,2305844303072595874,1152922797392004409,2305844300925109430,1152926022912448486,2305844298777628568, - 1152922793097037110,2305844296630142130,1152922790949557032,2305844294482658496,2305844337432331568,1152922787728332765,2305844291261436016,1152922785580847910, - 2305844289113949356,1152922787728331258,2305844286966465703,1152922832825488160,2305844284818982053,1152922832825488352,2305844282671498403,1152922832825488358, - 2305844280524014753,1152922832825488343,2305844278376531103,2305844363202138918,2305844276229050874,2305844275155309344,2305844274081567712,2305844273007825894, - 2305844271934084055,1261646648872,2305844269786596509,1152922764106008021,1258425418954,1152922761958528798,1152922843562907427,2305844264417887378, - 1152927901960640003,2305844262270408519,1152928098455394276,2305844260122920257,1152926738024503157,2305846455924952215,1152922752294849716,2305844255827952779, - 1152922750147364189,2305844253680469132,1152922747999882426,3498250868264,2305844250459243653,1152922744778654862,6090263631844,1152922742631176189, - 2305844246164276506,2305844245090534618,1152922739409947734,6076304988132,1152922737262467069,2305844240795567386,1152922978854377451,2305844238648083578, - 1152922732967494782,6088116148196,1152922730820016125,2305844234353116442,1152922978854377450,2305844232205632628,1152922726525043831,1152922725451304019, - 2305844228984407165,6077378729956,1152922722230081533,2305844225763181850,1152922978854377449,2305844223615698028,1152922717935109233,6066641311716, - 1152922715787630589,2305844219320730906,2305844218246989145,1152922712566400105,6065567569892,1152922710418921469,2305844213952021786,1152922978854377447, - 2305844211804537953,1152922706123949156,6078452471780,1152922703976470525,2305844207509570842,1152922978854377446,2305844205362087003,1152922699681498206, - 1152922698607761378,2305844202140861551,2305846396869151830,2305844199993382882,1189705946664,2305844197845894230,1152922692165305807,1186484716674, - 1152922690017826590,1152922758737303331,2305844192477185103,1152927895518189059,2305844190329706305,1152928098455394231,2305844188182222844,1152922978854377400, - 2305844186034734153,1152922927314769856,2305844183887250503,1152922924093544383,2305844181739766853,1152922920872318910,2305844179592283203,1152922920872318973, - 1152922672837957565,2305844176371057729,2305849417304905552,1165009885112,1163936142888,1152922667469243454,1152922940199671748,2305844169928606791, - 1152922936978446275,2305844167781123128,1152922933757220802,2305844165633639478,1152922930535995329,2305844163486155828,1152922657805567036,2305844161338672186, - 1152928039399593927,1152922654584346565,1152922653510601688,1152922652436857904,2305849058675136508,1152928098455394242,2305844153822479403,1152922978854377409, - 2305844151674995753,1152922940199671744,2305844149527512103,1152922936978446269,2305844147380028453,1152922933757220796,2305844145232544803,1152922930535995322, - 2305844143085061153,1152922927314769849,2305844140937577503,1152922635256989242,2305844138790093868,2305849057601394684,2305844136642610218,2305844135568868392, - 2305844134495126566,1152927551920805816,2305844132347647931,1152927550847059498,2305844130200159253,1152922624519570742,2305844128052675607,1152922622372087409, - 2305844125905191963,2305849054380169212,1152928098455394282,2305844122683966478,2305844121610224747,1152922940199671784,2305844119462741003,1152922936978446311, - 2305844117315257353,1152926844324942817,1152922610560926727,2305844114094031887,2305844157043705402,2305844111946548849,2305844110872806406,1100585375272, - 2305844108725322756,1152922603044734027,1152922654584343439,1152922600897252312,1152922599823508528,1152928098455394157,2305844102282871822,1152922978854377324, - 2305844100135388153,1152922940199671659,2305844097987904503,1152922936978446186,2305844095840420853,1152922590159832070,2305844093692937211,2305844104430355462, - 1082331764264,2305844090471711729,1152922584791123395,1079110534142,1152922582643644190,1152922686796601123,2305844085103002603,1152927893370705411, - 2305844082955523903,2305849053306427388,1152928098455394283,2305844079734293478,1152922940199671773,2305844077586809828,1152922936978446300,2305844075439326178, - 1152922933757220827,2305844073291842528,1152922930535995354,2305844071144358878,1152922927314769881,2305844068996875228,1152922924093544408,2305844066849391578, - 1152922920872318935,2305844064701907928,1152922672837957590,2305844062554424278,1152922672837957629,1152922555800098773,2305844059333198804,1152922555800098813, - 1152922552578873300,2305844056111973329,1152922552578873341,1152922549357647827,2305844052890747854,1152922549357647869,1152922546136422354,2305844049669522379, - 2305849052232685564,2305849583734887976,1152922541841455101,2305844045374555079,1152922940199671669,2305844043227071428,1152922936978446196,2305844041079587778, - 1152922933757220723,2305844038932104128,1152922930535995250,2305844036784620478,1152922927314769777,2305844034637136828,1152922924093544304,2305844032489653178, - 1152922920872318831,2305844030342169528,1152922672837957486,2305844028194685878,1152922555800098669,2305844026047202228,1152922552578873196,2305844023899718578, - 1152922549357647723,2305844021752234928,1152922546136422250,2305844019604751278,1152922513924162504,1152922512850424384,2305849601988498980,2305844015309784037, - 1152922978854377432,2305844013162300328,2305844012088558563,2305844011014816737,2305844009941074911,2305844008867333085,2305849051158943740,1152927580911835097, - 2305844005646112747,6090263626655,1152922498891782141,2305844002424882081,1152922940199671767,2305844000277398428,1152922936978446294,2305843998129914778, - 1152922933757220821,2305843995982431128,1152922930535995348,2305843993834947478,1152922488154358690,1152922487080620912,2305843990613722026,2305849050085201916, - 2305843988466238437,2305843987392496551,2305843986318754787,2305843985245012961,2305843984171271135,2305843983097529309,1152922477416940436,2305849049011460092, - 1152922499965523965,2305843978802561928,2305843977728820135,1152922940199671763,2305843975581336453,1152922936978446290,2305843973433852803,1152922933757220817, - 2305843971286369153,1152922930535995344,2305843969138885503,1152922463458296713,1152927581985576921,2305843965917665259,6090263626618,1152922459163334653, - 2305843962696434593,2305843961622692803,2305843960548950977,2305843959475209151,2305843958401467325,1152922452720878460,1152922451647140537,2305843955180241809, - 2305844080808035648,1152922940199671789,2305843951959016303,1152922936978446316,2305843949811532653,1152922933757220843,2305843947664049003,1152922930535995370, - 2305843945516565353,1152922927314769897,2305843943369081703,1152922924093544424,2305843941221598053,1152922920872318951,2305843939074114403,1152922672837957606, - 2305843936926630753,1152927543330866128,2305843934779147103,1152922429098562408,2305843932631663472,1152927542257124304,2305843930484179807,1152922424803595048, - 2305843928336696155,1152927541183382480,2305843926189212511,1152922420508627750,2305843924041728855,1152927540109640656,2305843921894245215,2305849601988498972, - 1152928098455394194,2305843918673019728,1152927539035899229,2305843916525536078,1152922940199671803,2305843914378052428,1152927537962157366,2305843912230568778, - 1152922406549979985,1152922405476242406,2305843909009343315,1152927536888415184,2305843906861859695,1152928098455394298,2305843904714376235,2305843903640634640, - 2305843902566892363,1152922936978446317,2305843900419408703,1152922933757220844,2305843898271925053,1152922930535995371,2305843896124441403,1152922927314769898, - 2305843893976957753,1152922388296368963,1152922387222631200,2305843890755732293,1152927535814673360,2305843888608248687,1152922382927659831,1152922381853918024, - 1152922380780180448,2305843884313281332,1152927534740931536,2305843882165797727,2305849601988498975,2305843880018314460,2305843878944572634,2305843877870830808, - 2305843876797088982,1152922371116499756,1152922370042762199,2305843873575863086,1152922431246046060,2305843871428379428,2305849038274041852,2305843869280896320, - 2305843868207154030,2305843867133412204,2305843866059670378,2305843864985928552,2305843863912186726,2305843862838444900,2305843861764703074,2305843860690961248, - 1152922355010376543,2305843858543477538,2305849594472306216,1152922351789152253,2305843855322252193,2305843854248510318,2305843853174768492,2305843852101026666, - 2305843851027284840,1152922345346700237,2305843848879801110,2305843904714376218,2305843846732317968,2305843845658575691,1152922936978446197,2305843843511091978, - 1152925400142190579,1152922336756766708,1152922335683019528,2305843839216124685,2305843904714376016,2305843837068641552,2305843835994899275,2305843834921157601, - 1152922329240572719,2305843832773673732,2305843843511092031,1152922933757220724,2305843829552448253,1152922930535995251,2305843827404964603,1152922927314769778, - 2305843825257480953,1152922319576896183,2305843823109997310,2305849037200300028,2305843820962513730,2305843819888772368,2305843818815030091,2305843817741288417, - 2305843816667546591,2305843815593804765,2305843814520062939,1152922308839478058,2305843812372579061,1152922978854377424,2305843810225095436,2305843809151353675, - 1152922936978446315,2305843807003869928,2305849554743858728,1152922300249539933,2305843803782644492,2305843802708902731,2305843801635161302,1152922295954572006, - 1152922294880833504,2305843798413935339,2305843810225095489,2305843796266451787,2305843795192709863,1152922933757220842,2305843793045226203,2305843791971484879, - 1152922927314769896,2305843789824000728,1152922284143415130,2305843787676517086,1152922978854377425,2305843785529033537,2305843784455291723,2305843783381549833, - 2305843782307807996,2305843781234066170,2305843780160324344,2305849086592423889,1152922273405994333,2305843776939098945,2305843775865357131,1152922936978446193, - 2305843773717873353,1152922933757220720,2305843771570389703,1152922930535995247,2305843769422906053,1152922927314769774,2305843767275422403,1152922261594833613, - 1152926739098243953,1152922259447349952,2305843762980455124,2305843785529033459,2305843760832971595,2305843759759229705,2305843758685487868,2305843757611746042, - 2305843756538004216,2305843776939098867,2305843754390520651,2305843753316778696,2305843752243036870,2305843751169295044,2305843750095553218,1152922244414964407, - 1152925725485962097,1152922242267480752,2305843745800585917,1152922936978444755,2305843743653102289,1152922933757218780,2305843741505618603,1152922930535993304, - 2305843739358134953,1152922927314767828,2305843737210651303,1152922936978444240,2305843735063167689,1152922933757218764,2305843732915684003,1152922930535993288, - 2305843730768200353,1152922927314767812,2305843728620716703,1152922222940127909,2305843810225095411,2305843725399491403,2305843724325749513,2305843723252007676, - 2305843722178265850,2305843721104524024,1152922215423935132,2305849086592423888,1152922213276452189,2305843716809556723,2305843715735814987,2305843714662073032, - 2305843713588331206,2305843712514589380,2305843711440847554,1152922205760258709,1152922204686520323,2305843708219622061,2305849601988498971,1152928098455394269, - 2305843704998396553,1152922978854377436,2305843702850912903,2305843701777171395,1152925381888579571,1152922195022844901,1152922193949098628,2305843697482203786, - 2305849601988498961,2305843695334720136,2305843694260978310,2305843693187236803,1152922195022845940,1152922186432905852,2305843689966011008,2305849601988498974, - 1152928098455394299,2305843686744785528,1152922978854377466,2305843684597301878,2305843683523560419,2305843682449818593,2305843681376076767,1152926769163015137, - 1152922174621745777,2305843678154850937,1152922555800098794,2305843676007367636,1152922552578873321,2305843673859883628,1152922549357647848,2305843671712399978, - 1152922546136422375,2305843669564916328,1152922163884327852,1152922162810586118,2305843666343690862,2305848025735500656,2305843664196211385,2305843663122469736, - 2305843662048727848,2305843660974986022,2305843659901244390,2305843658827502368,2305843657753760736,2305843656680018903,2305843655606276972,2305843654532535135, - 2305843653458793421,2305843652385047302,2305843651311309615,2305843650237567671,2305843649163825962,2305843648090083296,2305843647016341338,2305843645942596287, - 2305843644868854447,2305843643795116035,2305843642721370754,2305843641647628923,2305843640573887088,2305843639500145670,629212714536,2305843637352661603, - 1152922131672073191,1152928098455393262,2305843634131436518,2305843633057694777,2305843631983952951,2305843630910211125,2305843629836469299,2305843628762727494, - 2305843627688985668,2305843626615243842,2305843625541502015,1152922555800098748,2305843623394017853,1152922552578873275,2305843621246534203,1152922549357647802, - 2305843619099050553,1152922546136422329,2305843616951566903,1152924680735168438,1152922110197236277,2305843634131436321,2305843612656600121,2305843611582858295, - 2305843610509116469,2305843609435374643,2305843608361632838,2305843607287891012,2305843606214149186,2305843605140407359,1152923653164239758,1152922098386076202, - 2305843601919181363,2305843634131436457,2305843599771698248,2166811006504,1152922093017372612,1152923671417853888,2305843595476730403,1152922089796142393, - 2305843593329246757,1152922093017372611,1152923671417853887,2305843590108021278,1152922084427433270,2305843587960537631,1152922093017372610,1152923671417853886, - 2305843584739312153,1152922079058724147,2305843582591828506,1152922093017372609,1152923671417853885,2305843579370603028,1152922073690015024,2305843577223119381, - 1152924682882652101,1152922070468794294,1152922069395046928,2305843572928152103,2305843634131436432,2305843570780669000,2305843569706926624,2305843568633184795, - 2305843567559442966,2305843566485701137,1152922600897255350,1152922059731370502,2305843563264475660,2305843634131436424,2305843561116992584,2305843560043250208, - 2305843558969508379,2305843557895766550,2305843556822024721,1152922653510604726,1152922050067694077,2305843553600799235,2305843634131436449,2305843551453316168, - 2305843550379574329,2305843549305832503,2305843548232090677,2305843547158348851,1152922041477761928,2305843545010864634,2305843634131436487,2305843542863381561, - 2305843541789639735,2305843540715897909,2305843539642156083,2305843538568414278,2305843537494672452,2305843536420930626,2305843535347188799,2305843534273446460, - 2305843533199704634,2305843532125962808,2305843531052220982,1152924668924008374,1152922024297890277,2305843527830995442,1152922022150409176,1152924683956393499, - 1152928039399593489,2305843523536028128,2305843522462291964,1152928098455394245,2305843520314802653,1152922978854377412,2305843518167319003,1152922940199671738, - 2305843516019835353,5480378275368,1152922009265506193,1152922008191762903,2305843511724868065,1152923148505585180,1152927532593452996,2305843508503642578, - 1152922002823056271,1152927552994543099,1152927554068289476,2305843504208675278,1152921998528092101,2305843502061191631,2305843500987455484,1152928098455394243, - 2305843498839966153,1152928032957142555,2305843496692488130,2305843495618746305,1152921989938152797,2305843493471257031,1152922940199671743,2305843491323773378, - 6529424037416,1152921984569448382,6528350295592,1152921982421959102,1152921982421960488,2305843484881322428,1152921984569448380,1152921978126997440, - 2305843481660096954,1152928027588433857,1152921974905771968,2305843478438871479,1152921972758283574,2305843476291387840,1152921970610800123,1152922936978446270, - 2305843473070162368,1152922933757220797,2305843470922678703,1152922930535995324,2305843468775195053,1152922927314769851,2305843466627711403,1152921960947128260, - 2305843464480227761,1152921958799640326,2305843462332744147,1152928098455394240,2305843460185260664,1152922978854377410,2305843458037776803,1152922940199671745, - 2305843455890293153,2305849535416505896,2305849528974054952,443455373726,1152921946988479798,2305843450521584031,1152921948062221619,2305843448374100378, - 1152921942693512821,2305843446226616741,1152927531519711171,1152923242994865695,2305843443005391253,2305843441931655164,2305843440857908266,2305843439784166440, - 2305843438710424614,1152922936978446271,2305843436562940303,1152921930882352634,2305843434415456662,2305843602992923188,2305843432267973134,2305843431194231301, - 2305843430120489468,2305843429046750088,2305843427973005796,1152921922292419544,416611833384,503584915843,1930587799938,1774895235457, - 1642824991104,2305843420456812939,1152921914776225213,409095635527,1152921912628746014,1152922579422418723,2305843415088103803,1152927891223221763, - 2305843412940625725,1565515579767,2305849601988499392,2305843409719395370,1152922978854377406,2305843407571911028,1152922940199671741,2305843405424427378, - 1152922936978446268,2305843403276943728,1152922978854377403,2305843401129460084,2305843400055718360,1152922936978446265,2305843397908234603,1152921892227645806, - 2305843408645653576,1152922940199671735,2305843393613267303,1152922936978446262,2305843391465783653,1152921885785194856,1152921884711453046,1152921885785194857, - 1152921882563975093,1152921885785194862,1152921880416491446,2305843383949590879,1152921878269003347,375809638751,386547056986,1152921875047782339, - 2305843378580881755,368293445985,1152921871826552438,1152921870752814878,1152921909407520547,2305843373212172628,2305849601988499382,2305849601988499381, - 1152921865384100177,1152928021145982492,2305843367843469308,1152921862162874703,1152921861089132918,1152921862162874704,1152921862162874705,2305843362474754378, - 2305843361401012559,2305843360327270731,1152921854646683398,1152921853572945694,1152921867531589411,2305843356032303428,1152928098455394244,2305843353884825596, - 1152922978854377411,2305843351737336128,1152922940199671746,2305843349589852478,1152922936978446273,2305843347442368828,1152922933757220800,2305843345294885178, - 1152922930535995327,2305843343147401528,1152922927314769854,2305843340999917878,1152922924093544381,2305843338852434228,1152922920872318908,2305843336704950578, - 1152922672837957563,2305843334557466928,1152922555800098746,2305843332409983278,1152922552578873273,2305843330262499628,1152921824581910902,2305849601988498984, - 2305843327041274177,2305843325967532351,2305843324893790525,2305843323820048699,2305843322746306873,2305843321672565047,2305843320598823221,2305843319525081395, - 2305843318451339569,2305843317377597743,2305843316303855917,2305843315230114091,1152921809549525289,1152924596983306168,302795197290,1152921806328299804, - 300647711003,1152924700062518233,1152921803107077009,3219077994024,1152921800959596468,1152921799885854648,294205260053,1152921797738365226, - 292057776407,1152921795590884314,1775968982568,1930587799821,3257732694284,1152921791295914358,2305843294829019406,1152921789148436254, - 1152921850351720227,2305843291607793928,6634650736605,1152921784853468960,1152921785927210787,2305843287312826628,6633576994780,1152921780558501664, - 1152921781632243491,2305843283017859328,6632503252955,1152921776263534368,1152921777337276195,2305843278722892028,6631429511130,1152921771968567072, - 1152921773042308899,2305843274427924728,6630355769305,1152921767673599776,1152921768747341603,2305843270132957428,6629282027480,1152921763378632480, - 1152921764452374307,2305843265837990128,6628208285655,1152921759083665184,1152921760157407011,2305843261543022828,6627134543830,1152921754788697888, - 1152921755862439715,2305843257248055528,6626060802005,1152921750493730592,1152921751567472419,2305843252953088228,6624987060180,1152921746198763296, - 1152921747272505123,2305843248658120928,6623913318355,1152921741903796000,1152921742977537827,2305843244363153628,6622839576530,1152921737608828704, - 1152921738682570531,2305843240068186328,6621765834705,1152921733313861408,1152921734387603235,2305843235773219028,6620692092880,1152921729018894112, - 1152921730092635939,2305843231478251728,6619618351055,1152921724723926816,1152921725797668643,2305843227183284428,6618544609230,1152921720428959520, - 1152921721502701347,2305843222888317128,6617470867421,1152921716133992223,1152921717207734051,2305843218593349828,6616397125596,1152921711839024927, - 1152921712912766755,2305843214298382528,6615323383771,1152921707544057631,1152921708617799459,2305843210003415228,6614249641946,1152921703249090335, - 1152921704322832163,2305843205708447928,6613175900121,1152921698954123039,1152921700027864867,2305843201413480628,6612102158296,1152921694659155743, - 1152921695732897571,2305843197118513328,6611028416471,1152921690364188447,1152921691437930275,2305843192823546028,6609954674646,1152921686069221151, - 1152921687142962979,2305843188528578728,6608880932821,1152921681774253855,1152921682847995683,2305843184233611428,6607807190996,1152921677479286559, - 1152921678553028387,2305843179938644128,6606733449171,1152921673184319263,1152921674258061091,2305843175643676828,6605659707346,1152921668889351967, - 1152921669963093795,2305843171348709528,6604585965521,1152921664594384671,1152921665668126499,2305843167053742228,6603512223696,1152921660299417375, - 1152921661373159203,2305843162758774928,6602438481871,1152921656004450079,1152921657078191907,2305843158463807628,6601364740046,1152921651709482783, - 1152921652783224611,2305843154168840328,6350109153058,1152927855789741850,1152927856863483675,141733926690,1152921646340773659,1152921645267031835, - 138512701218,1152921643119548187,1152921642045806363,135291475746,1152921639898322715,1152921638824580891,132070250274,1152921636677097243, - 1152921635603355419,128849024802,1152921633455871771,1152921632382129947,125627799330,1152921630234646299,1152921629160904475,122406573858, - 1152921627013420827,1152921625939679003,1152928000744887811,2305843126251558819,1152927998597404163,2305843124104075169,1152927996449920515,2305843121956591519, - 1152927994302436867,2305843119809107869,1152927992154953219,2305843117661624219,1152927990007469571,2305843115514140569,1152927987859985923,2305843113366656919, - 1152927985712502275,2305843111219173269,1152921640972058754,1152921604464836732,1152921603391094905,1152921602317353078,1152921601243611251,1152921600169869424, - 1152921599096133404,1152921598022385772,1152921640972058757,1152921595874902140,1152921594801160313,1152921593727418486,1152921592653676659,1152921591579934832, - 1152921590506193027,1152921589432451178,2305843092965556310,1152921644193284229,1152921586211225724,1152921585137483897,1152921584063742070,1152921582990000243, - 1152921581916258416,1152921580842516608,1152921579768774760,2305843083301879885,1152921586211225727,1152921576547549305,1152921575473807478,1152921574400065651, - 1152921573326323824,1152921572252582013,1152921571178840166,2305843074711945284,1152921576547549308,1152921567957614710,1152921566883872883,1152921565810131056, - 1152921564736389242,1152921563662647396,2305843067195752508,1152921567957614713,1152921560441421939,1152921559367680112,1152921558293938295,1152921557220196450, - 2305843060753301557,1152921560441421942,1152921553998970992,1152921552925229172,1152921551851487328,2305843055384592431,1152921553998970995,1152921548630261873, - 1152921547556520030,2305843051089625130,6090263631650,1152921544335294502,38654705798,1152927871895869227,1152921541114074921,1152921540040333096, - 1152921538966591270,1152921537892849445,1152928143552550909,2305843040352212988,1152928142478804317,2305843038204723228,1152928141405062457,2305843036057239578, - 1152928140331320630,2305843033909755928,1152921528229167134,1152921527155426318,1152928104897845245,2305843029614789646,1152928103824098653,2305843027467304978, - 1152928102750356793,2305843025319821328,1152928101676614966,2305843023172337678,1152928100602871820,11811160084,2305849370060265255,1152927857937225501, - 1152927857937219594,1152921513196781577,2305843016729886755,2305843014582403078,1152921508901814276,1152921507828072451,1152921506754330626,1152921505680588801 + 48,0,10,0,1152927827872454409,2305849008209270529,1152927502528681737,2305849006061786881, + 1152927500381198089,2305849003914303233,1152927498233714441,2305849001766819585,1152927496086230793,2305848999619335937,1152927493938747145,2305848997471852289, + 1152927491791263497,2305848995324368641,1152927489643779849,2305848993176884993,1152927487496296201,2305848991029401345,1152927485348812553,2305848988881917697, + 1152927483201328905,2305848986734434049,1152927481053845257,2305848984586950401,1152927478906361609,2305848982439466753,1152927476758877961,2305848980291983105, + 1152927474611394313,2305848978144499457,1152927810692585225,2305848975997015794,1152927470316427017,2305848973849532147,1152927468168943369,2305848971702048500, + 1152927466021459721,2305848969554564853,1152927463873976073,2305848967407081206,1152927461726492425,2305848965259597559,1152927459579008777,1152927458505266953, + 2305848962038372088,1152927456357783305,2305848959890888441,1152927454210299657,2305848957743404794,1152927452062816009,2305848955595921147,1152927449915332361, + 2305848953448437500,1152927447767848713,2305848951300953853,1152927445620365065,2305848949153470206,1152927443472881417,2305848947005986559,1152927794586457865, + 2305848944858502883,1152927439177914121,2305848942711019236,1152927437030430473,2305848940563535589,1152927434882946825,2305848938416051942,1152927432735463177, + 2305848936268568295,1152927430587979529,2305848934121084648,1152927428440495881,2305848931973601025,1152927426293012233,2305848929826117353,1152927424145528585, + 2305848927678633706,1152927421998044937,2305848925531150059,1152927419850561289,2305848923383666412,1152927417703077641,2305848921236182765,1152927415555593993, + 2305848919088699118,1152927413408110345,2305848916941215471,1152927411260626697,2305848914793731824,1152927784922781449,2305848912646248170,1152927406965659401, + 2305848910498764506,1152927404818175753,2305848908351280876,1152927402670692105,2305848906203797211,1152927400523208457,2305848904056313582,1152927398375724809, + 2305848901908829916,1152927396228241161,2305848899761346269,1152927394080757513,2305848897613862622,1152927391933273865,2305848895466378979,1152927389785790217, + 2305848893318895327,1152927387638306569,2305848891171411685,1152927385490822921,2305848889023928032,1152927383343339273,2305848886876444391,1152927381195855625, + 2305848884728960737,1152927379048371977,2305848882581477121,1152927767742912265,2305848880433993418,1152927374753404681,2305848878286509771,1152927372605921033, + 2305848876139026124,1152927370458437385,2305848873991542477,1152927368310953737,2305848871844058830,1152927366163470089,2305848869696575183,1152927364015986441, + 2305848867549091536,1152927361868502793,2305848865401607889,1152927359721019145,2305848863254124242,1152927357573535497,2305848861106640595,1152927355426051849, + 2305848858959156948,1152927353278568201,2305848856811673301,1152927351131084553,2305848854664189654,1152927348983600905,2305848852516706007,1152927346836117257, + 2305848850369222360,1152927750563043081,2305848848221738682,1152927342541149961,2305848846074255035,1152927340393666313,2305848843926771388,1152927338246182665, + 2305848841779287741,1152927336098699017,2305848839631804094,1152927333951215369,2305848837484320447,1152927331803731721,2305848835336836800,1152927329656248073, + 2305848833189353153,1152927327508764425,2305848831041869506,1152927325361280777,2305848828894385859,1152927323213797129,2305848826746902212,1152927321066313481, + 2305848824599418565,1152927318918829833,2305848822451934918,1152927316771346185,2305848820304451271,1152927314623862537,2305848818156967624,1152927733383173897, + 2305848816009483946,1152927310328895241,2305848813862000299,1152927308181411593,2305848811714516652,1152927306033927945,2305848809567033005,1152927303886444297, + 2305848807419549358,1152927301738960649,2305848805272065711,1152927299591477001,2305848803124582064,1152927297443993353,2305848800977098417,1152927295296509705, + 2305848798829614770,1152927293149026057,2305848796682131123,1152927291001542409,2305848794534647476,1152927288854058761,2305848792387163829,1152927286706575113, + 2305848790239680182,1152927284559091465,2305848788092196535,1152927282411607817,2305848785944712888,1152927716203304713,2305848783797229210,1152927278116640521, + 2305848781649745563,1152927275969156873,2305848779502261916,1152927273821673225,2305848777354778269,1152927271674189577,2305848775207294622,1152927269526705929, + 2305848773059810975,1152927267379222281,2305848770912327328,1152927265231738633,2305848768764843681,1152927263084254985,2305848766617360034,1152927260936771337, + 2305848764469876387,1152927258789287689,2305848762322392740,1152927256641804041,2305848760174909093,1152927254494320393,2305848758027425446,1152927252346836745, + 2305848755879941799,1152927250199353097,2305848753732458152,1152927699023435529,2305848751584974474,1152927245904385801,2305848749437490827,1152927243756902153, + 2305848747290007180,1152927241609418505,2305848745142523533,1152927239461934857,2305848742995039886,1152927237314451209,2305848740847556239,1152927235166967561, + 2305848738700072592,1152927233019483913,2305848736552588945,1152927230872000265,2305848734405105298,1152927228724516617,2305848732257621651,1152927226577032969, + 2305848730110138004,1152927224429549321,2305848727962654357,1152927222282065673,2305848725815170710,1152927220134582025,2305848723667687063,1152927217987098377, + 2305848721520203416,1152927681843566345,2305848719372719738,1152927213692131081,2305848717225236091,1152927211544647433,2305848715077752444,1152927209397163785, + 2305848712930268797,1152927207249680137,2305848710782785150,1152927205102196489,2305848708635301503,1152927202954712841,2305848706487817856,1152927200807229193, + 2305848704340334209,1152927198659745545,2305848702192850562,1152927196512261897,2305848700045366915,1152927194364778249,2305848697897883268,1152927192217294601, + 2305848695750399621,1152927190069810953,2305848693602915974,1152927187922327305,2305848691455432327,1152927185774843657,2305848689307948680,1152927664663697161, + 2305848687160465002,1152927181479876361,2305848685012981355,1152927179332392713,2305848682865497708,1152927177184909065,2305848680718014061,1152927175037425417, + 2305848678570530414,1152927172889941769,2305848676423046767,1152927170742458121,2305848674275563120,1152927168594974473,2305848672128079473,1152927166447490825, + 2305848669980595826,1152927164300007177,2305848667833112179,1152927162152523529,2305848665685628532,1152927160005039881,2305848663538144885,1152927157857556233, + 2305848661390661238,1152927155710072585,2305848659243177591,1152927153562588937,2305848657095693944,1152927647483827977,2305848654948210266,1152927149267621641, + 2305848652800726619,1152927147120137993,2305848650653242972,1152927144972654345,2305848648505759325,1152927142825170697,2305848646358275678,1152927140677687049, + 2305848644210792031,1152927138530203401,2305848642063308384,1152927136382719753,2305848639915824737,1152927134235236105,2305848637768341090,1152927132087752457, + 2305848635620857443,1152927129940268809,2305848633473373796,1152927127792785161,2305848631325890149,1152927125645301513,2305848629178406502,1152927123497817865, + 2305848627030922855,1152927121350334217,2305848624883439208,1152927630303958793,2305848622735955530,1152927117055366921,2305848620588471883,1152927114907883273, + 2305848618440988236,1152927112760399625,2305848616293504589,1152927110612915977,2305848614146020942,1152927108465432329,2305848611998537295,1152927106317948681, + 2305848609851053648,1152927104170465033,2305848607703570001,1152927102022981385,2305848605556086354,1152927099875497737,2305848603408602707,1152927097728014089, + 2305848601261119060,1152927095580530441,2305848599113635413,1152927093433046793,2305848596966151766,1152927091285563145,2305848594818668119,1152927089138079497, + 2305848592671184472,1152927613124089609,2305848590523700794,1152927084843112201,2305848588376217147,1152927082695628553,2305848586228733500,1152927080548144905, + 2305848584081249853,1152927078400661257,2305848581933766206,1152927076253177609,2305848579786282559,1152927074105693961,2305848577638798912,1152927071958210313, + 2305848575491315265,1152927069810726665,2305848573343831618,1152927067663243017,2305848571196347971,1152927065515759369,2305848569048864324,1152927063368275721, + 2305848566901380677,1152927061220792073,2305848564753897030,1152927059073308425,2305848562606413383,1152927056925824777,2305848560458929736,1152927595944220425, + 2305848558311446058,1152927052630857481,2305848556163962411,1152927050483373833,2305848554016478764,1152927048335890185,2305848551868995117,1152927046188406537, + 2305848549721511470,1152927044040922889,2305848547574027823,1152927041893439241,2305848545426544176,1152927039745955593,2305848543279060529,1152927037598471945, + 2305848541131576882,1152927035450988297,2305848538984093235,1152927033303504649,2305848536836609588,1152927031156021001,2305848534689125941,1152927029008537353, + 2305848532541642294,1152927026861053705,2305848530394158647,1152927024713570057,2305848528246675000,1152927578764351241,2305848526099191322,1152927020418602761, + 2305848523951707675,1152927018271119113,2305848521804224028,1152927016123635465,2305848519656740381,1152927013976151817,2305848517509256734,1152927011828668169, + 2305848515361773087,1152927009681184521,2305848513214289440,1152927007533700873,2305848511066805793,1152927005386217225,2305848508919322146,1152927003238733577, + 2305848506771838499,1152927001091249929,2305848504624354852,1152926998943766281,2305848502476871205,1152926996796282633,2305848500329387558,1152926994648798985, + 2305848498181903911,1152926992501315337,2305848496034420264,1152927836462389001,1152927577690608628,2305848492813194776,1152926987132605428,2305848490665711128, + 1152926984985121780,2305848488518227480,1152926982837638132,2305848486370743832,1152926980690154484,2305848484223260184,1152926978542670836,2305848482075776536, + 1152926976395187188,2305848479928292888,1152927570174415860,2305848477780809234,1152926972100219892,2305848475633325587,1152926969952736244,2305848473485841944, + 1152926967805252596,2305848471338358292,1152926965657768948,2305848469190874645,1152926963510285300,2305848467043390998,1152926961362801652,2305848464895907351, + 6064493828016,1152926958141577136,6064493827996,1152926955994093468,1152926957067835147,2305848458453455828,2305849498909284272,6064493827025, + 1152926950625383377,1152926952772867851,2305848453084746703,2305849387240134472,6064493827020,1152926945256675248,1152926944182933254,1152926947404158731, + 2305848446642295753,1152927904108124060,1152926939887965958,1152926940961707787,2305848442347328453,5447092278800,1152926935592998728,1152926934519256838, + 1152926936666740491,2305848436978619328,1152926935592998708,1152926930224289542,1152926931298031371,2305848432683652028,6064493828015,1152926925929322415, + 1152926924855579586,1152926927003064075,2305848427314942903,1152928014703530946,6064493828014,1152926919486871470,1152926918413128628,1152926921634354955, + 2305848420872491953,1152928013629789108,6064493828013,1152926913044420525,1152926911970677678,1152926915191904011,2305848414430041003,1152928012556047278, + 6064493828012,1152926906601969580,1152926905528226728,1152926908749453067,2305848407987590053,6510096684871,1152926901233259444,1152926900159518470, + 1152926902307002123,2305848402618880928,6509022943046,1152926895864550318,1152926894790809350,1152926896938293003,2305848397250171803,6507949201221, + 1152926890495841192,1152926889422100230,1152926891569583883,2305848391881462678,1152928011482305448,6506875459396,1152926884053390227,1152926882979649286, + 1152926886200874763,2305848385439011728,1152927834314905520,1152926879758423819,2305848382217786253,1152927834314905500,1152926876537198347,2305848378996560778, + 1152927834314904505,1152926873315972875,2305848375775335303,1152927834314904499,1152926870094747403,2305848372554109828,1152927834314904493,1152926866873521931, + 2305848369332884353,1152927834314904487,1152926863652296459,2305848366111658878,1152928070538106632,1152926860431070987,2305848362890433403,2305849575144953360, + 5351529256827,1152926855062361862,1152926857209845515,2305848357521724278,6554120099344,1152928060874430425,1152926849693651827,1152928039399592817, + 6557341324816,1152926846472426354,6558415066640,1152926844324942702,1152926843251201991,2305848346784306032,5351529256826,1152926840029975402, + 1152926838956234502,1152926851841136395,2305848341415596903,6556267582992,1152926834661267417,1152926833587524467,1152926832513783750,1152926831440041850, + 1152926830366299910,1152926835735009035,2305848332825662303,2305848336046887792,2305848330678178667,6555193841168,1152926823923848036,1152926822850107352, + 1152926821776365510,2305848325309469531,5315022034448,6564857517946,1152926817481397077,1152926816407656198,1152926827145074443,2305848318867018578, + 6550898874233,1152926812112687978,1152926811038947078,1152926813186430731,2305848313498309453,6549825132408,1152926806743978858,1152926805670237958, + 1152926807817721611,2305848308129600328,6548751390583,1152926801375269738,1152926800301528838,1152926802449012491,2305848302760891203,6547677648758, + 1152926796006560618,1152926794932819718,1152926797080303371,2305848297392182078,2305848325309469546,5286031005200,6563783776121,1152926788490367802, + 1152926787416626950,1152926791711594251,2305848289875989303,6562710034296,1152926783121658682,1152926782047917830,1152926784195401483,2305848284507280178, + 6561636292471,1152926777752949562,1152926776679208710,1152926778826692363,2305848279138571053,6560562550646,1152926772384240442,1152926771310499590, + 1152926773457983243,2305848273769861928,1152928016851015432,1152926768089274123,2305848270548636453,6063420086193,1152926763794306823,1152926764868048651, + 2305848266253669153,6512244168521,6064493826846,1152926758425596702,6062346343198,1152926756278113052,6061272601374,1152926754130629402, + 6060198859550,1152926751983145752,6059125117726,1152926749835662102,6058051375902,1152926747688178452,6056977634078,1152926745540694802, + 6055903892254,1152926743393211152,1152926742319470342,1152926760573081355,2305848244778832653,6553046357520,1152926738024502131,6551972615696, + 1152926735877018377,1152926822850106223,1152926733729534727,1152926732655793005,1152928056579461898,1152926730508309363,1152926833587525595,1152926728360825602, + 2305848231893930756,1152926733729535964,1152926725139601351,1152926823923849178,1152926722992117723,1152926721918374765,1152926720844634055,2305848224377737981, + 2305848223303996159,1152926721918375900,1152926716549666759,1152926738024503256,1152926714402181896,1152928061948171122,1152926712254698227,1152926711180957660, + 2305848214714061557,1152926833587525592,1152926707959732166,1152926849693652952,1152926705812248518,2305848209345352429,2305848208271610607,2305848207197868791, + 6545530164752,1152926700443538263,2305848203976643440,2305848202902901480,1152928057653203827,1152926696148570888,1152926695074829062,1152926694001087341, + 1152926728360825607,1152926734803276654,2305848195386708703,1152926713328440070,1152926822850107355,1152926687558636275,2305848191091741404,2305848190017999581, + 1152926722992116591,1152926683263668979,1152926713328440059,2305848185723032278,1152926713328440065,2305848183575548628,2305848182501806808,1152926676821219292, + 2305848180354323168,1152926833587524463,1152926673599992546,1152926672526251996,1152926695074829166,1152926670378768348,2305848173911872204,2305848172838130383, + 1152926695074829042,1152926666083799917,1152926666083801052,2305848168543163078,1152926683263669101,1152926661788833735,1152926683263670236,1152926659641350087, + 2305848163174453954,2305848162100712132,2305848161026970312,1152928050137011031,1152926673599992685,1152926653198899143,2305848156732003004,2305848155658261355, + 2305848154584519357,2305848153510777572,1152926647830189917,1152928038325850852,1152928037252108983,2305848149215810228,5138928374453,1152926642461480710, + 1152926739098244875,2305848144920842928,1152926732655794140,2305848142773359364,1152926687558636295,1152926636019028845,2305848139552133804,1152926636019029980, + 2305848137404650153,1152926683263668999,1152926630650319725,2305848134183424679,1152926630650320860,2305848132035941028,1152926721918374663,1152926625281610605, + 2305848128814715554,1152926625281611740,2305848126667231903,5226975203997,2305848124519748324,1152926694001088476,2305848122372264672,1152926687558636258, + 1152926615617934189,2305848119151039129,1152926615617935324,2305848117003555478,1152926683263668962,1152926610249225069,2305848113782330004,1152926610249226204, + 2305848111634846353,1152926695074829051,1152926604880515949,2305848108413620879,1152926604880517084,2305848106266137228,5188320498314,2305848104118653623, + 2305848103044911771,1152928057653204952,1152926596290581256,1152926595216839430,1152926594143097709,1152926594143098844,2305848096602460803,1152926595216839387, + 1152926589848130413,2305848093381235329,1152926589848131548,2305848091233751678,1152926595216839383,1152926584479421293,2305848088012526204,1152926584479422428, + 2305848085865042553,1152926595216839419,1152926579110712173,2305848082643817079,1152926579110713308,2305848080496333428,1152926595216839374,1152926573742003053, + 2305848077275107954,1152926573742004188,2305848075127624303,1152926595216839425,1152926568373293933,2305848071906398829,1152926568373295068,2305848069758915178, + 1152926595216839534,1152926563004584813,2305848066537689704,1152926563004585948,2305848064390206053,1152926595216839410,1152926557635875693,2305848061168980579, + 1152926557635876828,2305848059021496928,1152926728360826844,1152926552267167687,2305848055800271454,1152926676821218157,2305848053652787803,2305848052579046023, + 1152926546898458460,1152926618839160772,1152928036178367112,2305848048284078678,1152926547972200389,2305848046136595028,5035849159255,1152926539382265606, + 1152926639240255243,2305848041841627728,1152926673599992583,1152926535087297389,1152926729434567514,2305848037546660428,2305848036472918683,1152926695074829057, + 1152926529718588269,1152926729434567534,2305848032177951303,1152926712254698242,2305848030030467653,1152926691853604828,5018669290051,2305848026809242248, + 2305848025735500361,1152926673599992578,2305848023588016729,2305848022514274879,1152926516833687387,1152926530792331203,1152928035104625216,2305848018219307578, + 1152926517907429316,2305848016071823928,5005784388155,1152926509317494534,1152926536161040139,2305848011776856628,2305848035399176927,1152926690779863004, + 4999341938432,2305848007481889344,2305848006408147505,1152926691853603693,4995046971136,2305848003186922045,2305848002113180205,1152926496432592730, + 1152926505022527426,1152928034030883374,2305847997818212903,1152926497506334659,2305847995670729253,4985383293480,1152926488916399878,1152926506096269067, + 2305847991375761953,1152926712254698247,2305847989228278494,1152926713328440174,1152926673599992563,1152926481400207324,2305847984933311004,2305847983859569181, + 1152926822850106227,1152926477105240006,2305847980638343704,2305847979564601905,1152926670378767213,1152926688632379356,4967129682451,2305847975269634606, + 2305847974195892756,1152926690779861869,4962834716416,2305847970974667306,2305847969900925455,1152926464220338009,1152926473884014529,1152928032957141520, + 2305847965605958153,1152926465294079938,2305847963458474503,4953171038730,1152926456704145158,1152926485695174411,2305847959163507203,2305847978490860252, + 1152926686484895708,4946728589056,2305847954868539920,2305847953794798080,1152926688632378221,4942433621760,2305847950573572620,2305847949499830780, + 1152926443819243352,1152926452409178048,1152928031883399677,2305847945204863478,1152926444892985281,2305847943057379828,4932769944055,1152926436303050502, + 1152926453482919691,2305847938762412528,2305847957016023770,1152926682189928412,4926327494400,2305847934467445245,2305847933393703405,1152926686484894573, + 4922032527104,2305847930172477945,2305847929098736105,1152926423418148695,1152926432008083391,1152928030809657834,2305847924803768803,1152926424491890624, + 2305847922656285153,4912368849380,1152926415901955846,1152926433081825035,2305847918361317853,2305847936614929110,1152926681116186588,4905926399744, + 2305847914066350570,2305847912992608730,1152926682189927277,4901631432448,2305847909771383270,2305847908697641430,1152926403017054038,1152926411606988734, + 1152928029735915991,2305847904402674128,1152926404090795967,2305847902255190478,4891967754705,1152926395500861190,1152926412680730379,2305847897960223178, + 1152926481400206189,2305847895812739797,4977867100614,2305847893665255898,1152926529718589404,1152926678968702940,4881230336451,2305847889370288599, + 2305847888296546756,1152926681116185453,4876935370496,2305847885075321299,2305847884001579455,1152926378320992085,1152926387984668605,1152928028662174144, + 2305847879706612153,1152926379394734014,2305847877559128503,4867271692730,1152926370804799238,1152926392279635723,2305847873264161203,2305847892591514323, + 2305847871116677568,1152926678968701805,4859755501312,2305847867895452092,2305847866821710255,1152926361141122900,1152926366509832124,1152928027588432320, + 2305847862526742953,1152926362214864829,2305847860379259303,4850091823530,1152926353624930054,1152926367583573771,2305847856084292003,1152927915919282603, + 1152928027588432304,1152928026514690496,2305847851789324703,1152926362214864828,2305847849641841053,4839354405280,1152926342887511814,1152926350403704587, + 2305847845346873753,1152927914845540779,1152928026514690480,1152928025440948672,2305847841051906453,1152928027588432300,2305847838904422803,4828616987030, + 1152926332150093574,1152926339666286347,2305847834609455503,1152926733729534829,1152926327855126471,2305847831388230172,1152926482473949148,4820027052426, + 2305847828167004592,2305847827093262784,2305847826019520940,1152926320338933585,1152926322486417337,1152928024367206848,2305847821724553603,1152928026514690476, + 2305847819577069953,4809289634180,1152926312822740742,1152926328928868107,2305847815282102653,1152927912698057093,1152928024367206791,1152928023293465024, + 2305847810987135353,1152928025440948652,2305847808839651703,4798552215930,1152926302085322502,1152926309601515275,2305847804544684403,1152927911624315269, + 1152928023293464967,1152928022219723200,2305847800249717103,1152928024367206828,2305847798102233453,4787814797680,1152926291347904262,1152926298864097035, + 2305847793807266153,2305847827093262764,1152926287052937038,1152928022219723143,1152928023293465004,2305847788438557028,4778151121253,1152926281684227846, + 1152926288126678795,2305847784143589728,6054830151605,1152926277389260552,1152926278463002379,2305847779848622428,1152926277389260551,1152926274168035083, + 2305847776627396953,1152928020072240904,1152926270946809611,2305847773406171478,1152928020072240903,1152926267725584139,2305847770184946003,6516539135821, + 2305848336046887786,4757750027792,2305849552596375503,1152926260209390423,4754528801102,1152926258061906256,1152926735877019607,1152926255914423155, + 1152926729434568665,1152926253766940634,2305847757300044104,2305847756226302655,1152926722992117720,1152926249471973318,2305847753005077180,2305847751931335354, + 2305847750857593156,1152928018998497629,1152926244103262527,2305847747636367690,1152926255914424280,2305847745488884316,2305847744415142462,4734127706428, + 6054830151501,1152926236587069775,2305847740120174904,1152926234439587590,1152926264504358667,2305847736898949428,4739496416784,1152926230144618845, + 1152926231218362123,2305847732603982128,6565931259724,1152926225849651513,1152926224775911174,1152926226923394827,2305847727235273003,1152926245177005902, + 1152926220480942385,1152926219407202054,1152926221554685707,2305847721866563878,1152926593069356893,1152926215112234758,1152926216185976587,2305847717571596578, + 6533719005021,1152926210817266306,1152926209743525638,1152926211891009291,2305847712202887453,6532645263197,1152926205448557183,1152926204374816518, + 1152926206522300171,2305847706834178328,6531571521373,1152926200079848061,1152926199006107398,1152926201153591051,2305847701465469203,6530497779549, + 1152926194711138938,1152926193637398278,1152926195784881931,2305847696096760078,6529424037725,1152926189342429816,1152926188268689158,1152926190416172811, + 2305847690728050953,6528350295901,1152926183973720693,1152926182899980038,1152926185047463691,2305847685359341828,6527276554077,1152926178605011571, + 1152926177531270918,1152926179678754571,2305847679990632703,6526202812253,1152926173236302448,1152926172162561798,1152926174310045451,2305847674621923578, + 6524055328605,1152926167867593326,1152926166793852678,1152926168941336331,2305847669253214453,6521907844957,1152926162498884203,1152926161425143558, + 1152926163572627211,2305847663884505328,6519760361309,1152926157130175081,1152926156056434438,1152926158203918091,2305847658515796203,6517612877661, + 1152926151761465958,1152926150687725318,1152926152835208971,2305847653147087078,6565931259741,1152926146392756831,1152926145319016198,1152926147466499851, + 2305847647778377953,1152926205448557132,1152926141024048902,1152926142097790731,2305847643483410653,6533719005020,1152926136729080396,1152926135655339782, + 1152926137802823435,2305847638114701528,1152926200079847980,1152926131360372486,1152926132434114315,2305847633819734228,1152926194711138830,1152926127065405190, + 1152926128139147019,2305847629524766928,1152926189342429691,1152926122770437894,1152926123844179723,2305847625229799628,1152926183973720552,1152926118475470598, + 1152926119549212427,2305847620934832328,1152926178605011413,1152926114180503302,1152926115254245131,2305847616639865028,1152926173236302270,1152926109885536006, + 1152926110959277835,2305847612344897728,6525129070429,1152926105590567342,1152926104516826886,1152926106664310539,2305847606976188603,6533719005019, + 1152926100221858370,1152926099148117766,1152926101295601419,2305847601607479478,6533719005018,1152926094853149232,1152926093779408646,1152926095926892299, + 2305847596238770353,6533719005017,1152926089484440082,1152926088410699526,1152926090558183179,2305847590870061228,6533719005016,1152926084115730943, + 1152926083041990406,1152926085189474059,2305847585501352103,6533719005015,1152926078747021804,1152926077673281286,1152926079820764939,2305847580132642978, + 6533719005014,1152926073378312665,1152926072304572166,1152926074452055819,2305847574763933853,6533719005013,1152926068009603522,1152926066935863046, + 1152926069083346699,2305847569395224728,1152926189342429639,1152926062640895750,1152926063714637579,2305847565100257428,6528350295900,1152926058345927111, + 1152926057272186630,1152926059419670283,2305847559731548303,6527276554075,1152926052977217991,1152926051903477510,1152926054050961163,2305847554362839178, + 6526202812250,1152926047608508871,1152926046534768390,1152926048682252043,2305847548994130053,1152926089484440007,1152926042239801094,1152926043313542923, + 2305847544699162753,6532645263192,1152926037944832455,1152926036871091974,1152926039018575627,2305847539330453628,6531571521367,1152926032576123335, + 1152926031502382854,1152926033649866507,2305847533961744503,6530497779542,1152926027207414215,1152926026133673734,1152926028281157387,2305847528593035378, + 1152926482473948013,1152926021838704829,1152926020764964614,1152926022912448267,2305847523224326253,6524055328604,1152926016469995631,1152926015396255494, + 1152926017543739147,2305847517855617128,6522981586779,1152926011101286511,1152926010027546374,1152926012175030027,2305847512486908003,6521907844954, + 1152926005732577391,1152926004658837254,1152926006806320907,2305847507118198878,1152926021838704794,1152926000363869958,1152926001437611787,2305847502823231578, + 6532645263188,1152925996068900975,1152925994995160838,1152925997142644491,2305847497454522453,6531571521363,1152925990700191855,1152925989626451718, + 1152925991773935371,2305847492085813328,6530497779538,1152925985331482735,1152925984257742598,1152925986405226251,2305847486717104203,6520834103133, + 1152925979962773897,1152925978889033478,1152925981036517131,2305847481348395078,6519760361308,1152925974594064777,1152925973520324358,1152925975667808011, + 2305847475979685953,6518686619483,1152925969225355657,1152925968151615238,1152925970299098891,2305847470610976828,6517612877658,1152925963856646537, + 1152925962782906118,1152925964930389771,2305847465242267703,6533719005009,1152925958487937417,1152925957414196998,1152925959561680651,2305847459873558578, + 6532645263184,1152925953119228297,1152925952045487878,1152925954192971531,2305847454504849453,6531571521359,1152925947750519177,1152925946676778758, + 1152925948824262411,2305847449136140328,6530497779534,1152925942381810057,1152925941308069638,1152925943455553291,2305847443767431203,1152926711180956525, + 1152925937013100733,1152925935939360518,1152925938086844171,2305847438398722078,1152925937013100650,1152925931644393222,1152925932718135051,2305847434103754778, + 1152925937013100645,1152925927349425926,1152925928423167755,2305847429808787478,1152925937013100640,1152925923054458630,1152925924128200459,2305847425513820178, + 6520834103129,1152925918759489568,1152925917685749510,1152925919833233163,2305847420145111053,6519760361304,1152925913390780448,1152925912317040390, + 1152925914464524043,2305847414776401928,6518686619479,1152925908022071328,1152925906948331270,1152925909095814923,2305847409407692803,6517612877654, + 1152925902653362208,1152925901579622150,1152925903727105803,2305847404038983678,1152925937013100698,1152925897284654854,1152925898358396683,2305847399744016378, + 1152925937013100631,1152925892989687558,1152925894063429387,2305847395449049078,1152925937013100626,1152925888694720262,1152925889768462091,2305847391154081778, + 1152925937013100621,1152925884399752966,1152925885473494795,2305847386859114478,6529424037713,1152925880104783904,1152925879031043846,1152925881178527499, + 2305847381490405353,6528350295888,1152925874736074784,1152925873662334726,1152925875809818379,2305847376121696228,6527276554063,1152925869367365664, + 1152925868293625606,1152925870441109259,2305847370752987103,6526202812238,1152925863998656544,1152925862924916486,1152925865072400139,2305847365384277978, + 6064493828037,1152925858629949381,1152925857556206151,1152925856482465542,1152925859703691019,2305847358941827028,1152928036178368453,6533719004688, + 1152925851113756612,2305847354646859729,4344359425885,1152925847892529735,1152925846818789126,1152925853261240075,2305847349278150603,1152928037252110277, + 1152925851113756611,2305847346056925128,4335769491292,1152925839302595143,1152925838228854534,1152925843597563659,2305847340688216003,1152925857556206019, + 1152925833933887238,1152925835007629067,2305847336393248703,1152928032957142981,2305847334245765071,4323958331229,1152925827491434947,1152925826417694470, + 1152925830712661771,2305847328877055928,1152928031883401157,2305847326729572295,4316442138460,1152925819975242179,1152925818901501702,1152925823196469003, + 2305847321360863153,1152928030809659333,1152925851113756610,2305847318139637678,4307852203867,1152925811385307587,1152925810311567110,1152925815680276235, + 2305847312770928553,1152928029735917509,1152925851113756609,2305847309549703078,4299262269274,1152925802795372995,1152925801721632518,1152925807090341643, + 2305847304180993953,1152925851113756608,2305847302033510344,4291746076505,1152925795279180227,1152925794205439750,1152925798500407051,2305847296664801178, + 1152925851113756607,2305847294517317585,4284229883736,1152925787762987459,1152925786689246982,1152925790984214283,2305847289148608403,1152928035104626629, + 1152925851113756606,2305847285927382928,4275639949143,1152925779173052867,1152925778099312390,1152925783468021515,2305847280558673803,1152928034030884805, + 1152925851113756605,2305847277337448328,4267050014550,1152925770583118275,1152925769509377798,1152925774878086923,2305847271968739203,1152925858629948128, + 1152925765214410502,1152925766288152331,2305847267673771903,1152926535087298524,6563783776093,1152925759845699452,1152925758771959558,1152925761993185035, + 2305847261231320953,6562710034268,1152925754476990332,1152925753403250438,1152925755550734091,2305847255862611828,6561636292443,1152925749108281212, + 1152925748034541318,1152925750182024971,2305847250493902703,6560562550618,1152925743739572092,1152925742665832198,1152925744813315851,2305847245125193578, + 6516539135837,1152925738370863713,1152925737297123078,1152925739444606731,2305847239756484453,1152926722992116595,1152925733002155974,1152925731928413958, + 6525129070421,1152925729780928352,1152925734075897611,2305847232240291678,6524055328596,1152925725485961056,1152925726559704843,2305847227945324378, + 6522981586771,1152925721190993760,1152925722264737547,2305847223650357078,6521907844946,1152925716896026464,1152925717969770251,2305847219355389778, + 2305849062970103737,4207994214225,1152925711527317344,1152925713674802955,2305847213986680653,2305849062970103736,4202625505104,1152925706158608224, + 1152925708306093835,2305847208617971528,6518686619471,1152925701863640928,1152925702937384715,2305847204323004228,6517612877646,1152925697568673632, + 1152925698642417419,2305847200028036928,1152926673599993820,1152925693273708487,1152926210817267462,1152925691126222652,1152925694347450123,2305847193585585978, + 6532645263196,1152925686831257350,1152925685757513532,1152925687904999179,2305847188216876853,6531571521371,1152925681462548230,1152925680388804412, + 1152925682536290059,2305847182848167728,6530497779546,1152925676093839110,1152925675020095292,1152925677167580939,2305847177479458603,6529424037721, + 1152925670725129990,1152925669651386172,1152925671798871819,2305847172110749478,6528350295896,1152925665356420870,1152925664282677052,1152925666430162699, + 2305847166742040353,6527276554071,1152925659987711750,1152925658913967932,1152925661061453579,2305847161373331228,6526202812246,1152925654619002630, + 1152925653545258812,1152925655692744459,2305847156004622103,1152925729780930310,1152925649250291516,1152925650324035339,2305847151709654803,1152925725485963014, + 1152925644955324220,1152925646029068043,2305847147414687503,1152925721190995718,1152925640660356924,1152925641734100747,2305847143119720203,1152925716896028422, + 1152925636365389628,1152925637439133451,2305847138824752903,6520834103121,1152925632070424326,1152925630996680508,1152925633144166155,2305847133456043778, + 6519760361296,1152925626701715206,1152925625627971388,1152925627775457035,2305847128087334653,1152928053358237651,1152928052284495826,1152925620259264005, + 2305847123792367354,1152925618111780791,1152928052284495827,2305847120571141877,1152925614890555318,1152925613816813061,2305847117349916406,1152928038325852115, + 2305847115202432753,2305847114128693188,4103841257423,1152925607374360380,1152925622406747915,2305847109833723628,1152925614890555319,1152925618111780790, + 2305847106612498153,1152928038325852114,2305847104465014503,4094177581006,1152925597710683964,1152925604153136907,2305847100170047203,1152925618111780819, + 1152925614890555346,1152925592341976581,2305847095875079904,1152925590194493391,1152925618111780818,1152925614890555347,2305847091580112603,1152925585899526094, + 1152925584825783813,2305847088358887132,1152925618111780803,2305847086211403478,1152928035104626643,2305847084063919828,2305847082990180289,4072702744529, + 1152925576235847484,1152925594489460491,2305847078695210703,1152925585899526095,1152925590194493390,2305847075473985228,1152925614890555331,2305847073326501578, + 1152928035104626642,2305847071179017928,4060891584464,1152925564424687420,1152925573014624011,2305847066884050628,1152925590194493393,1152925585899526096, + 1152925559055980037,2305847062589083329,1152925618111780800,2305847060441599678,1152928031883401171,2305847058294116028,2305847057220376510,4046932940623, + 1152925550466045702,1152925549392301884,1152925561203463947,2305847051851665078,1152925585899526097,1152925590194493392,2305847048630439603,1152925614890555328, + 2305847046482955953,1152928031883401170,2305847044335472303,4034048038734,1152925537581143814,1152925536507399996,1152925546171078411,2305847038966763178, + 1152926728360825709,1152925532212434887,1152925531138690875,1152925533286176523,2305847033598054053,1152925531138690870,1152925527917467403,2305847030376828578, + 1152925531138690865,1152925524696241931,2305847027155603103,1152925531138690860,1152925521475016459,2305847023934377628,1152925531138690855,1152925518253790987, + 2305847020713152153,1152925531138690850,1152925515032565515,2305847017491926678,1152925531138690845,1152925511811340043,2305847014270701203,1152925531138690840, + 1152925508590114571,2305847011049475728,1152925531138690836,1152925505368889099,2305847007828250253,1152925531138690832,1152925502147663627,2305847004607024778, + 1152925531138690828,1152925498926438155,2305847001385799303,1152925531138690824,1152925495705212683,2305846998164573828,1152925531138690819,1152925492483987211, + 2305846994943348353,1152925531138690814,1152925489262761739,2305846991722122878,1152928037252110290,1152925484967794181,2305846988500897520,2305846987427155697, + 2305846986353416131,3976065980367,1152925479599083174,1152925486041536267,2305846982058446453,1152928037252110291,2305846979910962918,2305846978837221095, + 2305846977763481538,3967476045774,1152925471009148582,1152925476377859851,2305846973468511853,1152925618111780815,1152925614890555342,1152925465640441349, + 2305846969173544554,1152928034030884819,1152928032957142994,1152925461345474053,2305846964878577254,2305846963804835431,2305846962731095999,3952443660111, + 1152925455976765190,1152925454903021222,1152925467787925259,2305846957362384478,1152925614890555343,1152925618111780814,2305846954141159003,1152928032957142995, + 1152928034030884818,2305846950919933528,2305846949846191705,2305846948772452286,3938485016398,1152925442018121478,1152925440944377510,1152925451681797899, + 2305846943403740753,1152926672526250861,6064493827929,1152925435575670617,1152925434501926478,1152925437723154187,2305846936961289803,6064493827928, + 1152925430206961496,1152925429133217358,1152925431280703243,2305846931592580678,6064493827927,1152925424838252375,1152925423764508238,1152925425911994123, + 2305846926223871553,6064493827926,1152925419469543254,1152925418395799118,1152925420543285003,2305846920855162428,2305849425894840153,2305846918707681111, + 2305846917633939286,6064493825591,1152925410879606350,1152925415174575883,2305846913338969653,1152927556215773009,2305849425894840152,2305846910117746519, + 1152927919140509198,2305846907970260528,2305846906896518706,3896609085372,1152925400142188110,1152925407658383115,2305846902601551403,1152927555142031192, + 2305846900454070105,1152927554068289367,2305846898306584103,1152927552994547542,2305846896159100453,3885871667028,1152925389404769870,1152925396920964875, + 2305846891864133153,1152928027588433748,3880502958031,1152925384036060750,1152925386183546635,2305846886495424028,1152928047989528527,6064493825561, + 1152925378667351630,1152925380814837515,2305846881126714903,1152928047989528504,3869765539795,1152925373298642510,1152925375446128395,2305846875758005778, + 1152928047989528503,3864396830674,1152925367929933390,1152925370077419275,2305846870389296653,4113504933841,1152925363634966094,1152925364708710155, + 2305846866094329353,4110283708368,1152925359339998798,1152925360413742859,2305846861799362053,2305849431263549277,2305849540785215429,6531571521477, + 1152925352897550291,6530497779652,1152925350750066642,1152925349676324357,2305846853209427455,2305846852135685633,3841848249858,1152925345381355086, + 1152925356118775563,2305846847840718328,2305849430189807452,2305849539711473604,1152925352897550290,1152925350750066643,2305846842472009203,2305846841398267380, + 3831110831605,1152925334643936846,1152925342160131851,2305846837103300078,2305849429116065627,2305849536490248129,6527276554177,1152927555142031315, + 1152925327127743977,6526202812352,1152927555142031314,1152925323906518502,1152925322832778757,2305846826365881831,2305846825292140010,3815004704235, + 1152925318537809486,1152925331422713611,2305846820997172703,2305849428042323802,2305849535416506304,1152925323906518505,1152925324980260328,2305846815628463578, + 2305846814554721755,3804267285980,1152925307800391246,1152925315316586251,2305846810259754453,2305849417304905552,2305849429116065629,6419902371677, + 1152925301357942737,6418828629852,1152925299210459088,1152925298136716805,2305846801669819855,2305846800596078033,3790308642258,1152925293841747534, + 1152925304579168011,2305846796301110728,2305849416231163727,2305849428042323804,1152925301357942736,1152925299210459089,2305846790932401603,2305846789858659780, + 3779571224005,1152925283104329294,1152925290620524299,2305846785563692478,1152927922361735109,1152927921287993281,2305846782342467003,1152927920214251459, + 2305846780194983353,1152927919140509631,2305846778047499703,3767760066490,1152925271293169230,1152925279883106059,2305846773752532403,1152927922361735108, + 1152927921287993280,2305846770531306928,1152927920214251458,2305846768383823278,1152927919140509630,2305846766236339628,3755948906425,1152925259482009166, + 1152925268071945995,2305846761941372328,1152928027588433851,3750580197205,1152925254113300046,1152925256260785931,2305846756572663203,1152927918066767701, + 3745211488082,1152925248744590926,1152925250892076811,2305846751203954078,2305849062970103734,3739842778963,1152925243375881806,1152925245523367691, + 2305846745835244953,6525129070417,1152925239080914510,1152925240154658571,2305846741540277653,2305849541858957253,3730179102557,1152925233712206487, + 1152925232638465798,1152925235859691275,2305846735097826703,2305849542932698973,1152925228343497386,1152925227269756678,1152925229417240331,2305846729729117578, + 4337916974941,1152925222974788245,1152925221901047558,1152925224048531211,2305846724360408453,1152928038325851997,6064493825410,1152925216532337320, + 1152925215458596614,1152925218679822091,2305846717917957503,2305849542932698640,3706556782429,1152925210089886373,1152925209016145670,1152925212237371147, + 2305846711475506553,1152925857556206243,1152925205794920203,2305846708254281078,6064493825420,1152925201499952902,1152925200426209955,1152925202573694731, + 2305846702885571953,1152925857556206226,1152925197204985611,2305846699664346478,6064493828036,1152925192910018500,1152925191836275346,1152925193983760139, + 2305846694295637353,1152925222974789382,1152925187541308050,1152925188615051019,2305846690000670053,1152925857556206224,1152925184320083723,2305846686779444578, + 1152925191836275344,1152925181098858251,2305846683558219103,4337916972434,3672197044061,1152925175730149126,1152925174656406160,1152925177877632779, + 2305846677115768153,1152926617765418758,6532645263301,1152925169287698269,1152925168213953878,1152925171435181835,2305846670673317203,1152925169287698387, + 3659312141840,3658238400349,1152925161771502934,1152925164992730891,2305846664230866253,1152926638166513414,1152925157476535682,1152925158550279947, + 2305846659935898953,4105988740624,3648574723933,1152925152107826506,1152925154255312651,2305846654567189828,1152926484621432796,1152925147812861702, + 1152928037252110276,3641058531164,1152925144591633728,1152925148886603531,2305846647050997053,1152925192910018397,2305846644903515664,3634616080339, + 1152925138149182784,1152925141370410763,2305846640608546103,1152928036178368467,3629247371099,1152925132780473664,1152925134927959819,2305846635239836978, + 1152927551920805722,2305846633092355933,3622804920258,1152925126338022720,1152925129559250699,2305846628797386028,6064493827933,1152925122043058013, + 1152925120969313600,1152925123116799755,2305846623428676903,1152926480326465286,1152925116674347295,1152925117748090635,2305846619133709603,1152925116674346807, + 1152925113453123339,2305846615912484128,1152928035104626628,1152925109158155781,2305846612691259345,3602403825499,1152925105936928036,1152925110231897867, + 2305846608396291353,2305849539711473603,1152925101641960850,4347580648725,3604551306516,3593813890906,1152925097346993444,1152925102715705099, + 2305846599806356753,1152926683263668994,2305846597658874430,2305846596585132612,1152927549773322192,2305846594437650385,3584150214143,1152925087683319759, + 3582002730512,1152927549773322194,2305846589068941267,1152925083388349703,1152925082314607884,1152925094125770507,2305846584773971203,1152926729434567430, + 2305846582626488894,2305846581552747078,2305846580479003918,2305846579405263428,1152925073724675846,3578781505373,1152925071577189627,1152925079093384971, + 2305846574036552953,3584150214492,1152925067282222331,1152925068355966731,2305846569741585653,1152927552994547664,1152928051210753760,2305846566520360197, + 2305846565446618354,3555159185349,1152925058692289086,1152925064060999435,2305846561151651053,3556232924562,1152925054397320448,1152925055471064843, + 2305846556856683753,2305846739392796611,3556232924390,1152925049028612678,1152925051176097547,2305846551487974628,1152926687558636290,1152925044733646598, + 2305849430189807557,1152927926656702176,3536905571551,3535831832516,1152925039364934880,1152925045807388427,2305846541824298203,1152925043659902248, + 1152925036143712011,2305846538603072728,3578781505372,1152925031848742112,1152925032922486539,2305846534308105428,3555159183304,1152925027553774862, + 1152925028627519243,2305846530013138128,2305847347130668995,3555159182541,1152925022185067076,1152925024332551947,2305846524644429003,1152926721918374658, + 1152925017890100998,1152927925582960581,2305846520349464413,3510062028740,1152925013595131079,1152925018963842827,2305846516054494403,6420976113604, + 3578781502656,1152925008226421959,1152925010373908235,2305846510685785278,6422049855429,2305846593363908112,3498250865851,1152925001783971015, + 1152925005005199115,2305846504243334328,1152926727287084806,3584150214493,1152924996415261877,1152924998562748171,2305846498874625203,1152924997489003733, + 1152924993194039051,2305846495653399728,1152928046915786504,1152924989972813579,2305846492432174253,6064493828045,1152924985677846477,1152924986751588107, + 2305846488137206953,6064493827941,1152924981382877945,1152924980309137158,1152924982456620811,2305846482768497828,1152924981382877933,1152924976014169862, + 1152924977087911691,2305846478473530528,6064493828060,1152924971719202780,1152924972792944395,2305846474178563228,6064493828059,1152924967424235483, + 1152924968497977099,2305846469883595928,6064493828058,1152924963129268186,1152924964203009803,2305846465588628628,6064493828057,1152924958834300889, + 1152924959908042507,2305846461293661328,6064493828056,1152924954539333592,1152924955613075211,2305846456998694028,6064493828055,1152924950244366295, + 1152924951318107915,2305846452703726728,6064493828054,1152924945949398998,1152924947023140619,2305846448408759428,1152926730508310488,3437047584711, + 1152924942728173323,2305846444113792128,1152928056579463127,3432752617414,1152924938433206027,2305846439818824828,6534792746966,6535866485881, + 1152924931990755292,1152924934138238731,2305846434450115703,1152928063021914054,1152924928769529611,2305846431228890228,1152928061948172230,1152924925548304139, + 2305846428007664753,1152925857556206271,1152924922327078667,2305846424786439278,1152928051210752698,1152924919105853195,2305846421565213803,1152926652125157328, + 1152924915884627723,2305846418343988328,1152928049063269050,1152924912663402251,2305846415122762853,1152928047989527226,1152924909442176779,2305846411901537378, + 1152925858629947714,1152924906220951307,2305846408680311903,6064493828049,1152924901925982530,1152924902999725835,2305846404385344603,1152928038325852112, + 1152924897631015767,1152924898704758539,2305846400090377303,1152926820702623494,1152927947057796958,6443524691472,1152927949205277778,1152924890114821203, + 1152924889041079380,6550898874221,1152924886893595727,1152924894409791243,2305846389352959053,6549825132396,1152924882598628431,1152924883672373003, + 2305846385057991753,6548751390571,1152924878303661135,1152924879377405707,2305846380763024453,6547677648746,1152924874008693839,1152924875082438411, + 2305846376468057153,6546603906921,1152924869713726543,1152924870787471115,2305846372173089853,1152927949205280625,1152924865418759251,6064493825081, + 1152924863271277291,1152924862197536518,1152924866492503819,2305846364656897078,1152928046915786502,6429566048204,6064493825074,1152924855755082802, + 1152924854681340979,1152924858976311051,2305846357140704303,5046586578448,1152924850386376661,1152924849312631858,1152924848238890035,1152924851460118283, + 2305846350698253353,2305848211492836089,2305846348550771292,1152924842870180913,1152924841796441862,1152924845017667339,2305846344255802403,6444598433296, + 1152924837501471826,1152924836427730003,1152924837501474673,1152924834280246355,2305846337813351454,1152924832132762674,1152924831059023622,1152924838575216395, + 2305846333518384153,1152928045842043735,1152924827837798155,2305846330297158678,1152927935246637005,3352221980176,1152924822469086227,2305846326002191397, + 1152927548699580269,3314641016789,2305849449517160302,2305849450590899213,2305846320633482252,2305846319559743344,2305846318485998602,2305846317412259697, + 2305846316338514952,2305846315264776050,2305846314191031302,2305849454885866501,2305846312043547652,2305849455959608323,3300682370062,1152924804215475216, + 1152924803141736198,1152924824616572683,2305846305601096703,1152924832132765653,1152924798846769101,1152924797773027078,1152924799920510731,2305846300232387578, + 1152927933099150374,1152924793478059782,1152924794551801611,2305846295937420278,5046586575922,1152924789183092579,1152924788109350861,1152924787035608838, + 1152924790256834315,2305846289494969328,3284576245264,2305849549375149584,3277060052835,1152924780593155053,1152924779519416165,1152924778445674445, + 1152924777371932422,1152924783814383371,2305846279831292903,6064493828043,1152924773076965323,6047313958859,1152924770929478627,6062346344395, + 1152924768781994977,6051608926155,1152924766634511327,6043018991563,1152924764487027677,6041945249739,1152924762339544027,6052682667979, + 1152924760192060377,6053756409803,1152924758044576727,1152924774150706955,2305846260503940053,6064493828042,1152924753749612490,1152924754823354123, + 2305846256208972753,6064493828041,1152924749454645193,1152924750528386827,2305846251914005453,6064493828040,1152924745159677896,1152924746233419531, + 2305846247619038153,6539087713808,1152924740864710601,1152924739790968776,6538013971984,1152924737643482054,1152924736569743304,2305846240102845380, + 6536940230160,1152924733348514757,2305846236881619904,2305846235807881162,3225520442406,1152924741938452235,2305846232586652603,3339337078288, + 2305849547227666378,2305846229365430216,1152924723684838328,1152924726906066699,2305846226144201653,1152924731201034193,1152924720463615755,2305846222922976178, + 1152924731201034192,1152924717242390283,2305846219701750703,1152924731201034191,1152924714021164811,2305846216480525228,1152924731201034190,1152924710799939339, + 2305846213259299753,1152924734422259667,1152924707578713867,2305846210038074278,1152924734422259666,1152924704357488395,2305846206816848803,1152924738717226964, + 1152924701136262923,2305846203595623328,6559488808821,1152924696841295821,1152924695767553798,1152924697915037451,2305846198226914203,2305849568702502400, + 3186865739637,1152924690398843629,1152924689325102854,1152924692546328331,2305846191784463253,1152928064095654635,1152924686103877387,2305846188563237778, + 1152926722992117703,1152928039399593944,2305846185342012303,2305848156732003179,2305846183194528653,2305846182120788828,2305846181047048141,6064493824905, + 1152924682882651915,2305846177825819528,6064493826795,1152924671071491847,1152924672145233675,2305846173530852228,5904506295824,5872294038401, + 1152924665702782876,1152924664629041071,1152924667850266379,2305846167088401278,1152924666776524700,1152924660334073774,1152924661407815435,2305846162793433978, + 1152924660334073773,1152924657112848139,2305846159572208503,1152927994302436790,2305849512867927978,2305846156350983027,2305846155277241202,2305849512867927977, + 2305849515015411628,2305846152056015728,2305846150982273905,2305849508572960678,2305846148834790252,2305846147761048427,2305849508572960677,2305849510720444328, + 2305846144539822953,2305846143466081130,2305846142392339309,2305849504277993378,2305846140244855652,2305846139171113827,2305849504277993377,2305849506425477028, + 2305846135949888353,2305846134876146530,2305846133802404709,2305846132728662893,2305846131654923493,1152924625974332251,1152924624900590427,1152924624900590426, + 1152924622753106777,2305846126286211927,2305846152056015727,2305846124138728277,2305849515015411627,2305846121991244659,2305846120917502804,2305846119843761006, + 2305846144539822952,2305846117696277327,2305849510720444327,2305846115548793708,2305846114475051854,2305846113401310055,2305846112327568208,2305846135949888352, + 2305846110180084552,2305849506425477027,2305846108032600932,2305846106958859079,2305846105885117279,2305846104811375433,2305846103737633616,2305846102663894335, + 1152924596983302976,1152924595909561152,1152924595909561151,1152924593762077502,2305846113401310033,2305846096221440836,2305846095147699025,2305846094073959713, + 1152924588393368376,1152924587319626552,1152924587319626551,1152924585172142902,2305846088705248060,2305846087631506262,2305846087631506227,2305846085484022577, + 2305846088705248052,2305846120917502829,2305846114475051878,2305846081189055278,2305846106958859102,2305846079041571628,2305846077967829806,2305846076894090499, + 1152924571213499176,1152924570139757352,1152924570139757351,1152924567992273702,2305846071525378903,2305846070451637039,2305846069377895216,2305846068304153394, + 2305846132728662886,2305846066156672109,1152924560476080926,1152924559402339102,1152924559402339101,1152924557254855452,2305846060787960602,2305846103737633610, + 2305846058640479431,1152924552959888151,1152924551886146327,1152924551886146326,1152924549738662677,2305846095147699019,2305846052198028457,1152924546517437201, + 1152924545443695377,1152924545443695376,1152924543296211727,2305846046829316883,2305846045755575065,2305846045755575052,2305846043608091402,2305846046829316877, + 2305846077967829805,2305846040386868363,1152924534706277126,1152924533632535302,1152924533632535301,1152924531485051652,2305846035018156826,2305846033944414984, + 2305846032870673161,2305846031796931339,2305846030723189536,2305846132728662878,2305846028575708149,1152924522895117051,1152924521821375227,1152924521821375226, + 1152924519673891577,2305846023206996727,2305846103737633603,2305846021059515471,1152924515378924276,1152924514305182452,1152924514305182451,1152924512157698802, + 2305846095147699012,2305846014617064497,1152924508936473326,1152924507862731502,1152924507862731501,1152924505715247852,2305846009248353008,2305846008174611190, + 2305846008174611177,2305846006027127527,2305846009248353002,2305846077967829803,2305846002805904403,1152924497125313251,1152924496051571427,1152924496051571426, + 1152924493904087777,2305845997437192951,2305845996363451109,2305845995289709286,2305845994215967464,2305845993142225661,2305845992068483872,2981781051204, + 1152924485314153332,1152924653891622667,2305845987773516503,2305846031796931361,2305845985626032860,2305845984552291105,2974264858435,1152924477797960564, + 1152924482092930827,2305845980257323728,2305846070451637027,2305845978109840077,2305845977036098354,2305845975962356514,2305846033944414977,2305845973814872777, + 2305845972741131019,2305845971667389184,2305845970593647306,2305845996363451102,2305845968446163652,2305845967372421864,2305845966298680029,2305845965224938181, + 2305845964151196362,2953863763778,1152924457396865908,1152924474576738059,2305845959856229053,2305845971667389131,2305845957708745410,2305845956635003595, + 2946347571009,1152924449880673140,1152924454175643403,2305845952340036278,2305845992068483838,2940978861888,1152924444511964020,1152924446659450635, + 2305845946971327153,2305845984552291071,2935610152767,1152924439143254900,1152924441290741515,2305845941602618028,2305845964151196358,2930241443646, + 1152924433774545780,1152924435922032395,2305845936233908903,2305845956635003591,2924872734525,1152924428405836660,1152924430553323275,2305845930865199778, + 2305845992068483803,2919504025404,1152924423037127540,1152924425184614155,2305845925496490653,2305845984552291036,2914135316283,1152924417668418420, + 1152924419815905035,2305845920127781528,2305845964151196353,2908766607162,1152924412299709300,1152924414447195915,2305845914759072403,2305845956635003586, + 2903397898041,1152924406931000180,1152924409078486795,2305845909390363278,1152927994302436761,2305849512867927269,1152924401562290826,1152924400488549002, + 1152924400488549001,1152924398341065352,2305845901874170502,2305849516089152831,1152924395119839876,1152924394046098052,1152924394046098051,1152924391898614402, + 2305849515015410977,1152924389751130751,1152924388677388927,1152924388677388926,1152924386529905277,2305845890063010432,2305845888989268613,2305845888989268602, + 2305845886841784952,2305845890063010427,2305849513941669123,1152924379013712501,1152924377939970677,1152924377939970676,1152924375792487027,2305845879325592198, + 2305845878251850358,2305845877178108535,2305845876104366713,2305849508572959853,1152924369350036076,1152924368276294252,1152924368276294251,1152924366128810602, + 2305845869661915752,2305849511794185415,1152924362907585126,1152924361833843302,1152924361833843301,1152924359686359652,2305849510720443561,1152924357538876001, + 1152924356465134177,1152924356465134176,1152924354317650527,2305845857850755682,2305845856777013863,2305845856777013852,2305845854629530202,2305845857850755677, + 2305849509646701707,1152924346801457751,1152924345727715927,1152924345727715926,1152924343580232277,2305845847113337448,2305845846039595608,2305845844965853785, + 2305845843892111963,2305845842818370157,2305849504277992437,1152924336064039501,1152924334990297677,1152924334990297676,1152924332842814027,2305845836375919177, + 2305849507499217999,1152924329621588551,1152924328547846727,1152924328547846726,1152924326400363077,2305849506425476145,1152924324252879426,1152924323179137602, + 1152924323179137601,1152924321031653952,2305845824564759107,2305845823491017288,2305845823491017277,2305845821343533627,2305845824564759102,2305849505351734291, + 1152924313515461176,1152924312441719352,1152924312441719351,1152924310294235702,2305845813827340873,2305845812753599033,2305845811679857210,2305845810606115388, + 2305845809532373582,2305845808458631789,2798171199300,1152924301704301195,1152924403709777675,2305845804163664428,2305845843892111982,2305845802016180785, + 2305845800942439022,2790655006531,1152924294188108427,1152924298483078923,2305845796647471653,2305845878251850352,2305845794499988002,2305845793426246265, + 2305845792352504431,2305845846039595602,2305845790205020702,2305845789131278939,2305845788057537105,2305845786983795231,2305845812753599027,2305845784836311577, + 2305845783762569788,2305845782688827954,2305845781615086106,2305845780541344287,2770253911874,1152924273787013771,1152924290966886155,2305845776246376978, + 2305845788057537056,2305845774098893335,2305845773025151520,2762737719105,1152924266270821003,1152924270565791499,2305845768730184203,2305845808458631759, + 2757369009984,1152924260902111883,1152924263049598731,2305845763361475078,2305845800942438992,2752000300863,1152924255533402763,1152924257680889611, + 2305845757992765953,2305845780541344283,2746631591742,1152924250164693643,1152924252312180491,2305845752624056828,2305845773025151516,2741262882621, + 1152924244795984523,1152924246943471371,2305845747255347703,2305845808458631728,2735894173500,1152924239427275403,1152924241574762251,2305845741886638578, + 2305845800942438961,2730525464379,1152924234058566283,1152924236206053131,2305845736517929453,2305845780541344278,2725156755258,1152924228689857163, + 1152924230837344011,2305845731149220328,2305845773025151511,2719788046137,1152924223321148043,1152924225468634891,2305845725780511203,1152927994302436731, + 2886218028975,1152924217952438752,1152924220099925771,2305845720411802078,1152927545478354863,2305849515015411631,2305845717190577011,2305846144539822956, + 2305845715043092953,2305846135949888356,2305845712895609303,2305845711821867483,2305845710748128545,1152924205067536851,1152924203993795027,1152924203993795026, + 1152924201846311377,2696165726126,1152924199698827744,1152924214731216651,2305845702158191053,1152927545478354862,1152927544404613035,2305845698936965589, + 2305845697863227310,1152927543330871210,2305845695715740117,1152927542257129385,2305845693568256469,2305845692494514629,2305845691420772807,1152927541183387560, + 2305845689273289173,1152927540109645735,2305845687125805525,2305845686052063679,1152927539035903910,2305845683904580053,1152927537962162085,2305845681757096405, + 2305845680683354554,2305845679609612732,2305845678535870913,1152927536888420260,2305845676388387285,1152927535814678435,2305845674240903637,2305845673167161779, + 1152927534740936610,2305845671019678165,1152927533667194785,2305845668872194517,2305845667798452654,2305845666724710832,2305845665650969013,2305845664577227210, + 2305845663503488259,1152924157822896551,1152924156749154727,1152924156749154726,1152924154601671077,2648921085869,1152924152454187488,1152924196477605643, + 2305845654913550753,1152927545478354861,1152924193256379897,2305845651692325289,2305845650618587053,1152924190035154424,2305845648471099817,1152924187887670775, + 2305845646323616169,2305845645249874329,2305845644176132507,1152924183592703478,2305845642028648873,1152924181445219829,2305845639881165225,2305845638807423379, + 1152924178223994356,2305845636659939753,1152924176076510707,2305845634512456105,2305845633438714254,2305845632364972432,2305845631291230613,1152924170707801586, + 2305845629143746985,1152924168560317937,2305845626996263337,2305845625922521479,1152924165339092464,2305845623775037865,1152924163191608815,2305845621627554217, + 2305845620553812354,2305845619480070532,2305845618406328713,2305845617332586910,2607045154628,1152924110578256352,1152924149232965387,2305845613037619578, + 1152924146011739641,2305845610890135933,2600602703683,1152924104135805408,1152924107357034251,2305845606595168628,1152924142790514168,2305845604447684989, + 2594160252738,1152924097693354464,1152924100914583307,2305845600152717678,1152924140643030519,2305845598005234045,2587717801793,1152924091250903520, + 1152924094472132363,2305845593710266728,1152924136348063222,2305845591562783101,2581275350848,1152924084808452576,1152924088029681419,2305845587267815778, + 1152924134200579573,2305845585120332157,2574832899903,1152924078366001632,1152924081587230475,2305845580825364828,1152924130979354100,2305845578677881213, + 2568390448958,1152924071923550688,1152924075144779531,2305845574382913878,1152924128831870451,2305845572235430269,2561947998013,1152924065481099744, + 1152924068702328587,2305845567940462928,1152924123463161330,2305845565792979325,2555505547068,1152924059038648800,1152924062259877643,2305845561498011978, + 1152924121315677681,2305845559350528381,2549063096123,1152924052596197856,1152924055817426699,2305845555055561028,1152924118094452208,2305845552908077437, + 2542620645178,1152924046153746912,1152924049374975755,2305845548613110078,1152924115946968559,2305845546465626493,2536178194233,1152924039711295968, + 1152924042932524811,2305845542170659128,1152927994302436701,2305849037200299948,1152924034342586676,1152924033268844852,1152924033268844851,1152924031121361202, + 2525440776111,1152924028973877557,1152924036490073867,2305845531433240878,2305845692494517477,1152924024678910251,1152924023605168427,1152924023605168426, + 1152924021457684777,2305845524990789927,2305845710748128575,1152924018236459301,1152924017162717477,1152924017162717476,1152924015015233827,2305845697863226657, + 1152924012867750176,1152924011794008352,1152924011794008351,1152924009646524702,2305845513179629857,2305845512105888038,2305845512105888027,2305845509958404377, + 2305845513179629852,2305845694642001155,1152924002130331926,1152924001056590102,1152924001056590101,1152923998909106452,2305845502442211623,2305845501368469783, + 2305845500294727960,2305845499220986138,2305845680683357293,1152923992466655501,1152923991392913677,1152923991392913676,1152923989245430027,2305845492778535177, + 2305845688199550151,1152923986024204551,1152923984950462727,1152923984950462726,1152923982802979077,2305845686052066473,1152923980655495426,1152923979581753602, + 1152923979581753601,1152923977434269952,2305845480967375107,2305845479893633288,2305845479893633277,2305845477746149627,2305845480967375102,2305845682830840971, + 1152923969918077176,1152923968844335352,1152923968844335351,1152923966696851702,2305845470229956873,2305845469156215033,2305845468082473210,2305845467008731388, + 2305845465934989582,2305845667798455285,1152923959180658926,1152923958106917102,1152923958106917101,1152923955959433452,2305845459492538602,2305845675314648143, + 1152923952738207976,1152923951664466152,1152923951664466151,1152923949516982502,2305845673167164465,1152923947369498851,1152923946295757027,1152923946295757026, + 1152923944148273377,2305845447681378532,2305845446607636713,2305845446607636702,2305845444460153052,2305845447681378527,2305845669945938963,1152923936632080601, + 1152923935558338777,1152923935558338776,1152923933410855127,2305845436943960298,2305845435870218458,2305845434796476635,2305845433722734813,2305845432648993007, + 2305845431575251214,2421287819076,1152923924820920629,1152924025752655627,2305845427280283853,2305845467008731407,2305845425132800210,2305845424059058447, + 2413771626307,1152923917304727861,1152923921599698699,2305845419764091078,2305845501368469777,2305845417616607427,2305845416542865690,2305845415469123856, + 2305845469156215027,2305845413321640127,2305845412247898364,2305845411174156530,2305845410100414656,2305845435870218452,2305845407952931002,2305845406879189213, + 2305845405805447379,2305845404731705531,2305845403657963712,2393370531650,1152923896903633205,1152923914083505931,2305845399362996403,2305845411174156481, + 2305845397215512760,2305845396141770945,2385854338881,1152923889387440437,1152923893682411275,2305845391846803628,2305845431575251184,2380485629760, + 1152923884018731317,1152923886166218507,2305845386478094503,2305845424059058417,2375116920639,1152923878650022197,1152923880797509387,2305845381109385378, + 2305845403657963708,2369748211518,1152923873281313077,1152923875428800267,2305845375740676253,2305845396141770941,2364379502397,1152923867912603957, + 1152923870060091147,2305845370371967128,2305845431575251153,2359010793276,1152923862543894837,1152923864691382027,2305845365003258003,2305845424059058386, + 2353642084155,1152923857175185717,1152923859322672907,2305845359634548878,2305845403657963703,2348273375034,1152923851806476597,1152923853953963787, + 2305845354265839753,2305845396141770936,2342904665913,1152923846437767477,1152923848585254667,2305845348897130628,1152927997523662748,1152923843216545547, + 2305845345675905153,1152927996449920924,1152923839995320075,2305845342454679678,1152927995376179100,1152923836774094603,2305845339233454203,2305848945932244406, + 2305845337085973883,2305845336012232029,6493990557496,1152923829257898102,1152923828184160156,1152923833552869131,2305845330643519603,6399501276688, + 1152923823889192880,1152923822815450932,1152923821741705334,1152923824962934539,2305845324201068653,6378026440208,1152923817446741916,1152923816372996214, + 1152923818520483595,2305845318832359528,1152928014703531952,6064493824101,1152923811004290824,1152923813151774475,2305845313463650403,1152926924855580592, + 1152923807783065355,2305845310242424928,1152926918413129648,1152923804561839883,2305845307021199453,1152926911970678704,1152923801340614411,2305845303799973978, + 6064493827998,1152923797045647262,1152923795971905456,1152923798119388939,2305845298431264853,1152927833241163696,1152923791676938056,6510096684560, + 6509022942736,1152923788455708752,6398427534864,6397353793040,1152923785234483277,1152923784160741454,1152923783086999633,1152923792750679819, + 2305845285546362953,1152923789529454510,1152923786308228934,6064493824069,1152923776644548678,1152923775570806865,1152923779865777931,2305845278030170178, + 1152923778792036254,1152923771275843504,1152923772349585163,2305845273735202878,1152923778792036253,1152923766980876208,1152923768054617867,2305845269440235578, + 1152923822815451055,1152923763759650571,2305845266219010103,1152923787381966935,1152923759464679535,1152923760538425099,2305845261924042803,6064493824075, + 1152923755169716143,1152923754095970385,1152923756243457803,2305845256555333678,1152923788455712687,6507949200912,1152923748727261227,1152923747653523360, + 1152923746579781552,1152923750874748683,2305845249039140903,1152923747653523357,1152923742284814256,1152923743358555915,2305845244744173603,1152923785234487111, + 6396280051216,1152923736916101152,1152923735842359377,6380173923856,1152923733694875677,6498285524796,1152923731547392027,1152923739063588619, + 2305845234006755353,6497211782971,1152923727252424731,1152923728326170379,2305845229711788053,6496138041146,1152923722957457435,1152923724031203083, + 2305845225416820753,6495064299321,1152923718662490139,1152923719736235787,2305845221121853453,2305849517162895278,1152928012556048302,2208686934026, + 1152923712220043183,1152923711146301360,2305849391535101752,2305845213605664669,2203318228896,1152923706851330054,1152923715441268491,2305845209310693378, + 6064493827997,1152923702556366749,1152923701482620934,1152923703630108427,2305845203941984253,1152923710072559524,1152923698261399307,2305845200720758778, + 1152923710072559523,1152923695040173835,2305845197499533303,1152923710072559522,1152923691818948363,2305845194278307828,1152923710072559521,1152923688597722891, + 2305845191057082353,6491843073552,2305849405493745478,1152927900886898502,2177548421101,1152923681081530183,1152923680007784565,1152923678934042606, + 1152923677860300878,1152923676786562992,1152923685376497419,2305845179245922278,1152923787381970864,1152923672491591662,1152923671417849834,6379100182429, + 1152923669270366177,1152923673565337355,2305845171729729503,6395206309696,1152923664975402909,2305845168508507972,2158221072300,1152923661754173409, + 1152923666049144587,2305845164213536728,6394132567871,1152923657459210141,2305845160992315203,2150704879531,1152923654237980641,1152923658532951819, + 2305845156697343953,6393058826046,1152923649943017373,2305845153476122434,2143188686762,1152923646721787873,1152923651016759051,2305845149181151178, + 6391985084221,1152923642426824605,2305845145959929665,2135672493993,1152923639205595105,1152923643500566283,2305845141664958403,1152927901960640327, + 1152923634910627871,1152923633836889910,2305845137369995167,2127082559287,1152923630615660625,1152923635984373515,2305845133075023803,1152923748727261262, + 1152923626320697248,1152923625246955440,1152923627394438923,2305845127706314678,1152923626320697245,1152923620951988144,1152923622025729803,2305845123411347378, + 1152923787381970861,1152927995376179102,1152923615583274927,1152923614509537200,1152923617730762507,2305845116968896428,5415953765314,1152923610214568882, + 1152923611288311563,2305845112673929128,6397353793454,1152923605919601624,1152923604845856681,1152923606993344267,2305845107305220003,6064493828011, + 1152923600550893483,1152923599477147561,1152923601624635147,2305845101936510878,6064493828010,1152923595182184362,1152923594108438441,1152923596255926027, + 2305845096567801753,6064493828009,1152923589813475241,1152923588739729321,1152923590887216907,2305845091199092628,6064493828008,1152923584444766120, + 1152923583371020201,1152923585518507787,2305845085830383503,6064493828007,1152923579076056999,1152923578002311081,1152923580149798667,2305845080461674378, + 6064493828006,1152923573707347878,1152923572633601961,1152923574781089547,2305845075092965253,6064493828005,1152923568338638757,1152923567264892841, + 1152923569412380427,2305845069724256128,6064493828004,1152923562969929636,1152923561896183721,1152923564043671307,2305845064355547003,2305849511794186152, + 2305845062208067497,2305845061134321527,2305845060060583850,2305845058986837877,2305845057913100203,2047625664429,1152923551158768614,1152923550085023657, + 1152923558674962187,2305845052544386928,2305849507499218852,2305845050396907429,2305845049323161452,2305845048249423782,2305845047175677802,2305845046101940135, + 2035814504364,1152923539347608550,1152923538273863593,1152923546863802123,2305845040733226853,1152928001818629094,1152923533978896297,1152923535052642059, + 2305845036438259553,1152927559436998573,2305849400125036352,2305845033217038145,2305845032143292252,2305845031069554498,2305845029995808602,2305845028922070851, + 2305845027848324958,2017560893253,1152923521093997528,1152923520020252585,1152923530757674763,2305845022479615828,1152927559436998572,2305849395830069052, + 2305845019258394429,2305845018184648527,2305845017110910782,2305845016037164877,2305845014963427135,2305845013889681233,2003602249540,1152923507135353816, + 1152923506061608873,1152923516799031051,2305845008520972103,6385542633378,1152923501766644696,1152923500692899753,1152923502840387339,2305845003152262978, + 1152928001818629639,1152928002892371880,2305844999931037502,1152928003966113705,2305844997783553853,2305844996709812027,1152928005039855530,2305844994562328378, + 2305844993488586552,1152928006113597355,2305844991341102903,2305844990267361087,2305849507499218856,1989643601715,2305844987046135602,2305849508572960681, + 2305844997783553852,1974611216176,2305844982751168305,2305844981677426477,2305849509646702506,2305844994562328377,1969242507051,2305844977382459180, + 2305844976308717352,2305849510720444331,2305844991341102902,1963873797926,2305844972013750055,1981053667107,1152923465259423662,2305844968792524596, + 1958505093026,1152923462038194089,1152923497471678219,2305844964497557278,5409511314356,1152923457743229868,1152923458816972555,2305844960202589978, + 1152923457743229862,1152923454522005259,2305844956981364503,1152923457743226773,1152923451300779787,2305844953760139028,1152923457743226768,1152923448079554315, + 2305844950538913553,1152928008261081004,1152923443784582939,1152923444858328843,2305844946243946253,1152928007187339180,1152923439489615643,1152923440563361547, + 2305844941948978953,1152923610214569799,1152923435194648652,6395206309392,1152923433047164959,6390911342096,6391985083920,1152923429825939202, + 1924145354256,1152923427678455555,2305844931211564869,1152923425530976062,1152923424457230085,1152923436268394251,2305844926916593403,1152923430899685185, + 1915555419664,1152923419088520963,2305844922621630277,1152923416941041469,1152923415867295493,1152923421236008715,2305844918326658803,1152923429825943360, + 1906965485072,1152923410498586371,2305844914031695685,1152923408351106876,1152923407277360901,1152923412646074123,2305844909736724203,1152927895518189377, + 1898375550480,1152923401908651779,2305844905441761093,1152923399761172283,1152923398687426309,1152923404056139531,2305844901146789603,1152926920560613126, + 1152923394392459340,6505801717571,1152923392244979512,6064493823709,1152923390097491677,1152923389023749855,1152923395466204939,2305844891483113178, + 1886564390416,1152923384728782558,1152923383655040735,1152923385802528523,2305844886114404053,6504727975746,1152923379360077624,6064493823697, + 1152923377212589777,1152923376138847959,1152923375065106143,1152923380433819403,2305844877524469453,1873679488528,1152923370770138834,1152923369696397015, + 1152923368622655199,1152923371843884811,2305844871082018503,1152923370770138839,1859720845111,1152923363253946079,1152923365401433867,2305844865713309378, + 1152923391171233502,1152923378286331602,6501506750271,1152923356811495114,2305844860344600254,1152923354664011479,2305844858197116607,1152927888001996286, + 2305844856049637178,1845762197177,1152923349295302367,1152923360032724747,2305844851754665653,1152923356811499320,1840393491984,2305845241522948138, + 1152923342852851377,1152923341779113783,1152923340705367775,1152923346074081035,2305844843164731053,1152927885854513062,1831803557694,1152923335336658685, + 1152923334262916831,1152923337484146443,2305844836722280103,1152927885854513061,1825361106749,1152923328894207733,1152923327820465887,1152923331041695499, + 2305844830279829153,1152927885854513060,1818918655804,1152923322451756781,1152923321378014943,1152923324599244555,2305844823837378203,1152927885854513059, + 1812476204859,1152923316009305829,1152923314935563999,1152923318156793611,2305844817394927253,1152923457743230790,1152923310640597023,6064493827908, + 1152923308493112977,1152923311714342667,2305844810952476303,5403068863406,1152923304198149030,1152923305271891723,2305844806657509003,1152923304198145951, + 1152923300976924427,2305844803436283528,1152923304198149957,1152923296681957292,1152923297755698955,2305844799141316228,1152926914118162182,1152923292386986015, + 1152927899813156780,1152923290239501952,1152923293460731659,2305844792698865278,1152928010408564652,1152923285944534668,1152923287018280715,2305844788403897978, + 6394132567568,1152923281649571755,1152923280575825668,1152923279502083712,1152923282723313419,2305844781961447028,1152923291313243908,1152923275207116498, + 1152923276280862475,2305844777666479728,6502580492096,1152923270912149105,1152923271985895179,2305844773371512428,6505801717264,1152923266617185796, + 2305844770150291369,2305844769076549547,1758789113665,1152923262322214513,1152923267690927883,2305844764781577828,2305844771224028777,2305844762634098494, + 2305844761560356779,1751272920998,1152923254806021745,1152923259100993291,2305844757265385053,2069100500899,1152923250511054441,1152923249437312652, + 1152923251584800523,2305844751896675928,1152923281649571640,1152927893370705731,2305844748675450453,6493990553171,1152923241921119849,1152923240847378048, + 1152923246216091403,2305844743306741328,1152923304198150059,1152928006113597351,6064493823564,1152923234404931495,1152923233331185229,1152923237626156811, + 2305844735790548553,1152927997523662759,2305844733643069346,1152927997523662754,1152927996449920929,1152923225814996485,2305844729348097604,1719060661829, + 1152923222593766988,2305844726126872129,1715839440805,1152923219372541517,1152923230109964043,2305844721831904828,1152927996449920935,2305844719684425633, + 1152927996449920930,1152927997523662753,2305844716463195703,1706175759928,1152923209708865100,2305844713241970229,1702954538916,1152923206487639629, + 1152923216151320331,2305844708947002928,1152923291313248068,2305844706799519365,1152923201118930537,1152923203266418443,2305844703578293803,1152923201118934949, + 1152923197897709323,2305844700357068328,1152923201118934948,1152923194676483851,2305844697135842853,1152923201118934950,1152923191455258379,2305844693914617378, + 5380520285096,1152923187160287135,1152923188234032907,2305844689619650078,1152926907675711238,1152923182865319684,1152923181791577719,1152923180717835986, + 1152923183939065611,2305844683177199128,6503654233921,1152923176422868505,1152923177496614667,2305844678882231828,1152923180717835885,1152923173201647371, + 2305844675661006353,1152923180717835965,1152923169980421899,2305844672439780878,1152923296681953028,6064493827907,1152923164611708427,1152923166759196427, + 2305844667071071753,1152927531519711130,2305844664923592603,6064493823493,1152923158169261832,1152923161390487307,2305844660628620803,1152927990007469549, + 2305844658481141657,6064493823487,1152923151726810888,1152923154948036363,2305844654186169853,1152927987859985901,2305844652038690711,6064493823481, + 1152923145284359944,1152923148505585419,2305844647743718903,1152927985712502253,2305844645596239765,6064493823475,1152923138841909000,1152923142063134475, + 2305844641301267953,1152927981417534957,2305844639153788817,6064493823469,1152923132399458056,1152923135620683531,2305844634858817003,1152927979270051309, + 2305844632711337871,6064493823463,1152923125957007112,1152923129178232587,2305844628416366053,1152927983565018605,2305844626268886931,1152923120588297992, + 1152923122735781643,2305844623047656928,1152927977122567661,2305844620900177805,1152923115219588872,1152923117367072523,2305844617678947803,6342592955909, + 1152923110924621575,1152923111998363403,2305844613383980503,6341519214079,1152923106629654279,1152923107703396107,2305844609089013203,6340445472249, + 1152923102334686983,1152923103408428811,2305844604794045903,6339371730419,1152923098039719687,1152923099113461515,2305844600499078603,6338297988577, + 1152923093744752391,1152923094818494219,2305844596204111303,6337224246765,1152923089449785095,1152923090523526923,2305844591909144003,6336150504935, + 1152923085154817799,1152923086228559627,2305844587614176703,6335076763100,1152923080859850503,1152923081933592331,2305844583319209403,1152927871895868909, + 2305844581171730219,1152928072685590501,1152923074417399781,1152923073343657957,1152923072269916133,1152923071196174309,1152923070122432485,1152923069048690661, + 1152923067974948837,1152923066901207013,1152923065827465189,1152923064753723365,1152923063679981541,1152923062606239717,1152923061532497893,1152923060458756069, + 1152923059385013766,2305844562918119396,2305844561844377521,2305844561844377555,2305844561844377554,1152923054016300452,2305844561844377553,1152923051868816802, + 2305844561844377552,1152923049721333152,1152923048647591333,2305844561844377506,2305844561844377505,1152923045426365852,1152923044352624029,1152923043278882231, + 1152923043278882273,1536524551576,1152923044352624030,1152928017924752789,1533303326102,1152923044352624037,1152923035762692866,1152923034688947619, + 1152923033615205793,1152923032541463967,2305844536074569107,1152923034688947620,1152923029320238497,1152923028246496671,2305844531779601805,1152923029320238499, + 1152923025025271199,2305844528558376329,1152923025025271201,2305844526410892678,1152923047573849883,1152923019656562075,2305844523189667204,1152923019656562076, + 2305844521042183553,1152923015361599238,1152923077638625035,2305844517820958078,1152927874043352557,2305844515673478957,1152923059385013756,2305844513525995492, + 2305844512452253620,1152928072685590350,2305844510304765303,1152923074417399628,2305844508157281653,1152923002476695869,1152923074417399760,2305844504936056181, + 1152926244103263083,1152922998181725552,2305844501714830706,2305844502788575549,1490353657360,2305844498493605229,1152922992813016442,2305844512452253667, + 1152928072685590454,2305844494198637928,1152923074417399732,2305844492051154278,1152922986370568505,4734127707664,2305844488829928803,1152922983149340147, + 1477468751209,1152922981001860870,1152923012140373771,2305844483461219678,1152927880485803501,2305844481313740595,1152923059385013760,2305844479166257124, + 2305844478092515293,1152928072685590389,2305844475945026903,2305844474871285105,6544456422928,6543382676819,1152922967043216215,1152922965969470804, + 1152923073343657850,2305844468428834132,1152923072269915981,2305844466281350478,1152923071196174156,2305844464133866828,1152923070122432377,2305844461986383178, + 1152923069048690552,2305844459838899528,1152923067974948727,2305844457691415878,1152923066901206902,2305844455543932228,1152922949863346508,2305844453396448592, + 1152928072685590380,2305844451248964951,1152922945568379629,2305844449101481280,2305848211492836183,1437740307984,2305844445880255804,1152922940199667034, + 2305844478092515189,1152928072685590493,2305844441585288503,1152922935904703221,1152922935904703170,2305844438364063028,1152922935904703225,2305844436216579378, + 1152922935904703162,2305844434069095728,1152923074417399749,2305844431921612085,1152922926241026752,2305844429774128430,2305844442659030335,1152922923019801325, + 2305844426552902954,1152923073343657954,2305844424405419317,1152923072269916085,2305844422257935653,1152923071196174260,2305844420110452003,1152923070122432481, + 2305844417962968353,1152923069048690656,2305844415815484703,1152923067974948831,2305844413668001053,1152923066901207006,2305844411520517403,1152922905839932272, + 2305844409373033767,1152922905839932257,2305844407225550103,1152923072269916113,2305844405078066469,1152923071196174288,2305844402930582803,2305844401856840992, + 2305844400783099166,2305844399709357340,2305844398635615514,1152922892955030379,2305844396488131861,2305848165321937653,2305844394340651769,2305844393266909882, + 2305844392193168064,2305844391119426285,2305844390045684592,2305844388971942753,2305844387898200939,1377610765840,2305844385750713611,1152922880070125061, + 1374389536056,1152922877922645766,1152922977780635403,2305844380382004478,1152927878338319853,2305844378234525489,1152923059385013774,2305844376087042020, + 2305844375013300085,1152928072685590485,2305844372865811703,1152923074417399764,2305844370718328053,1152923073343657939,2305844368570844403,1152923072269916114, + 2305844366423360753,2305846339960835152,2305844364275878969,1353988445712,1152922857521546675,2305844361054651631,1152923070122432465,2305844358907167978, + 1152922853226582871,5316095776272,2305844355685942503,1152922850005353722,2305844365349619123,1152928072685590481,2305844351390975223,2305844350317233521, + 1152923073343657935,2305844348169749728,1152923072269916110,2305844346022266078,1152922840341677283,1152922839267939061,1152928038325852117,1152928051210751952, + 2305844340653556953,1152922834972973029,2305844338506073335,1152928038325852116,1152925851113756624,2305844335284847828,1152922829604259254,2305844333137364181, + 1152925851113756623,2305844330989883120,1152922825309291957,2305844328842396880,1152925851113756622,2305844326694915814,1152922821014324660,2305844324547429580, + 1152922818866844354,2305844322399945946,2305844365349619122,1152922815645620165,2305844319178723280,1152922813498135232,2305844317031236806,1152922815645618498, + 2305844314883753153,1152922860742775482,2305844312736269503,1152922860742775659,2305844310588785853,1152922860742775664,2305844308441302203,1152922860742775649, + 2305844306293818553,2305844394340651712,2305844304146338114,2305844303072596666,2305844301998855019,2305844300925113200,2305844299851371361,1289563936272, + 2305844297703883959,1152922792023295487,1286342706404,1152922789875816198,1152922874701420299,2305844292335174828,1152927876190836205,2305844290187695919, + 1152923059385013764,2305844288040212452,2305844286966470621,1152928072685590476,2305844284818982053,1152926551193425757,1152927950279022080,2305844281597761396, + 1152927949205280260,2305844279450272928,1152927948131538438,2305844277302789278,1152927947057796615,2305844275155305628,1152927530445969263,2305844273007821978, + 1152927529372227438,2305844270860338328,2305844269786598415,1152922764106009644,2305844267639112866,1152922761958524342,2305844265491629219,1152924856828827597, + 1152922758737298577,1254130456080,2305844261196661903,1152922755516073128,2305844286966470517,6064493828044,1152922752294852581,2305844255827952779, + 2305844254754211060,1152922749073624001,6047313958860,1152922746926143461,2305844250459243659,1152923074417399763,2305844248311760003,1152922742631171207, + 6062346344396,1152922740483692517,2305844244016792715,1152923074417399762,2305844241869309053,1152922736188720256,1152922735114980286,2305844238648083590, + 6051608926156,1152922731893757925,2305844235426858123,1152923074417399761,2305844233279374453,1152922727598785658,6043018991564,1152922725451306981, + 2305844228984407179,2305844227910665585,1152922722230076530,6041945249740,1152922720082597861,2305844223615698059,1152923074417399759,2305844221468214378, + 1152922715787625581,6052682667980,1152922713640146917,2305844217173247115,1152923074417399758,2305844215025763428,1152922709345174631,1152922708271437770, + 2305844211804537976,2305846236881619905,2305844209657059274,1199369623056,2305844207509570655,1152922701828982265,1196148393100,1152922699681502982, + 1152922786654590731,2305844202140861528,1152927869748385261,2305844199993382697,1152923059385013755,2305844197845899236,1152928072685590431,2305844195698410578, + 1152923074417399712,2305844193550926928,1152923069048690600,2305844191403443278,1152923067974948775,2305844189255959628,1152923066901206950,2305844187108475978, + 1152923065827465125,2305844184960992328,2204391970720,1173599819280,1152922677132919878,1152923073343657900,2305844179592283214,1152923072269916075, + 2305844177444799553,1152923071196174250,2305844175297315903,1152923070122432425,2305844173149832253,1152922667469243461,2305844171002348611,1152928013629790127, + 1152922664248022957,1152922663174281136,1152922662100534329,2305844563991861220,2305849032905327668,1152928072685590442,2305844162412414003,1152923074417399721, + 2305844160264930353,1152923073343657896,2305844158117446703,1152923072269916069,2305844155969963053,1152923071196174244,2305844153822479403,1152923070122432418, + 2305844151674995753,1152923069048690593,2305844149527512103,1152923266617181836,1152922642773181477,2305844146306286645,2305849031831585844,2305844144158802994, + 2305844143085061168,2305844142011319342,1152927526151002016,2305844139863840675,2305849510720443920,1152927525077255195,2305844136642610204,1152922630962021812, + 2305844134495126558,1152922628814538317,2305844132347642914,1152923059385013765,2305844130200164324,2305849028610360339,1152928072685590482,2305844126978933778, + 2305844125905192052,1152923073343657936,2305844123757708303,1152923072269916111,2305844121610224653,1152926712254698349,1152922614855899079,1152922613782152203, + 2305844117315257365,2305844147380028470,2305844115167774285,2305844114094031881,1103806600720,2305844111946548231,1152922606265959508,1152922664248018986, + 1152922604118480816,1152922603044734009,1152928072685590357,2305844105504097298,1152923074417399636,2305844103356613628,1152923073343657811,2305844101209129978, + 1152923072269915986,2305844099061646328,1152922593381057545,2305844096914162686,2305844107651580937,1085552989712,2305844093692937204,1152922588012348909, + 1082331759617,1152922585864869638,1152922696460277515,2305844088324228078,1152927867600901613,2305844086176749351,2305849027536618548,1152928072685590483, + 2305844082955518953,1152923073343657925,2305844080808035303,1152923072269916100,2305844078660551653,1152923071196174275,2305844076513068003,1152923070122432450, + 2305844074365584353,1152923069048690625,2305844072218100703,1152923067974948800,2305844070070617053,1152923066901206975,2305844067923133403,1152923065827465150, + 2305844065775649753,1152923064753723325,2305844063628166103,1152923063679981500,2305844061480682453,1152923062606239675,2305844059333198803,1152923061532497850, + 2305844057185715153,2305849026462876724,2305849557965084176,1152922549357647845,2305844052890747854,1152923073343657821,2305844050743264203,1152923072269915996, + 2305844048595780553,1152923071196174171,2305844046448296903,1152923070122432346,2305844044300813253,1152923069048690521,2305844042153329603,1152923067974948696, + 2305844040005845953,1152923066901206871,2305844037858362303,1152923065827465046,2305844035710878653,1152923064753723221,2305844033563395003,1152923063679981396, + 2305844031415911353,1152923062606239571,2305844029268427703,1152923061532497746,2305844027120944053,1152922521440355279,1152922520366616971,2305844164559902220, + 2305844022825976808,1152923074417399744,2305844020678493103,2305844019604751334,2305844018531009508,2305844017457267682,2305844016383525856,2305849025389134900, + 1152927551920805825,2305844013162305491,6064493822886,1152922506407974885,2305844009941074856,1152923073343657919,2305844007793591203,1152923072269916094, + 2305844005646107553,1152923071196174269,2305844003498623903,1152923070122432444,2305844001351140253,1152922495670551465,1152922494596813565,2305843998129914801, + 2305849024315393076,2305843995982431208,2305843994908689326,2305843993834947558,2305843992761205732,2305843991687463906,2305843990613722080,1152922484933133211, + 2305849023241651252,1152922507481716709,2305843986318754703,2305843985245012910,1152923073343657915,2305843983097529228,1152923072269916090,2305843980950045578, + 1152923071196174265,2305843978802561928,1152923070122432440,2305843976655078278,1152922470974489488,1152927556215773121,2305843973433858003,6064493822849, + 1152922466679527397,2305843970212627368,2305843969138885578,2305843968065143752,2305843966991401926,2305843965917660100,1152922460237071235,1152922459163333142, + 2305843962696434584,2305844084029261142,1152923073343657941,2305843959475209078,1152923072269916116,2305843957327725428,1152923071196174291,2305843955180241778, + 1152923070122432466,2305843953032758128,1152923069048690641,2305843950885274478,1152923067974948816,2305843948737790828,1152923066901206991,2305843946590307178, + 1152923065827465166,2305843944442823528,1152927517561062828,2305843942295339878,1152922436614755061,2305843940147856247,1152927516487321004,2305843938000372582, + 1152922432319787714,2305843935852888930,1152927515413579180,2305843933705405286,1152922428024820416,2305843931557921630,1152927514339837356,2305843929410437990, + 2305844164559902212,1152928072685590394,2305843926189212503,1152927513266095542,2305843924041728853,1152923073343657955,2305843921894245203,1152927512192353716, + 2305843919746761553,1152922414066172760,1152922412992435056,2305843916525536090,1152927511118611884,2305843914378052470,1152928072685590498,2305843912230569011, + 2305843911156827437,2305843910083085138,1152923072269916117,2305843907935601478,1152923071196174292,2305843905788117828,1152923070122432467,2305843903640634178, + 1152923069048690642,2305843901493150528,1152922395812561738,1152922394738823866,2305843898271925068,1152927510044870060,2305843896124441462,1152922390443852606, + 1152922389370110799,1152922388296373099,2305843891829474107,1152927508971128236,2305843889681990502,2305844164559902215,2305843887534507254,2305843886460765428, + 2305843885387023602,2305843884313281776,1152922378632692531,1152922377558954849,2305843881092055861,1152922438762238713,2305843878944572203,2305849012504233012, + 2305843876797089110,2305843875723346805,2305843874649604979,2305843873575863153,2305843872502121327,2305843871428379501,2305843870354637675,2305843869280895849, + 2305843868207154023,1152922362526569197,2305843866059670313,2305849568702502416,1152922359305344997,2305843862838444968,2305843861764703093,2305843860690961267, + 2305843859617219441,2305843858543477615,1152922352862892887,2305843856395993885,2305843912230568993,2305843854248510765,2305843853174768466,1152923072269915997, + 2305843851027284753,1152922345346699934,2305843848879801108,2305843912230568791,2305843846732317997,2305843845658575698,2305843844584834020,1152922338904249034, + 2305843842437350157,2305843851027284806,1152923071196174172,2305843839216124678,1152923070122432347,2305843837068641028,1152923069048690522,2305843834921157378, + 1152922329240572435,2305843832773673735,2305849011430491188,2305843830626190153,2305843829552448813,2305843828478706514,2305843827404964836,2305843826331223010, + 2305843825257481184,2305843824183739358,1152922318503154374,2305843822036255486,1152923074417399736,2305843819888771859,2305843818815030098,1152923072269916115, + 2305843816667546353,2305849528974054928,1152922309913216438,2305843813446320915,2305843812372579154,2305843811298837744,1152922305618248431,1152922304544509756, + 2305843808077611764,2305843819888771912,2305843805930128210,2305843804856386288,1152923071196174290,2305843802708902628,2305843801635161321,1152923069048690640, + 2305843799487677153,1152922293807091366,2305843797340193511,1152923074417399737,2305843795192709960,2305843794118968146,2305843793045226256,2305843791971484421, + 2305843790897742595,2305843789824000769,2305849060822620089,1152922283069670838,2305843786602775368,2305843785529033554,1152923072269915993,2305843783381549778, + 1152923071196174168,2305843781234066128,1152923070122432343,2305843779086582478,1152923069048690518,2305843776939098828,1152922271258510038,1152926687558637532, + 1152922269111031751,1152922268037284553,2305843771570389725,2305843795192709884,2305843769422906194,2305843768349164304,2305843767275422469,2305843766201680643, + 2305843765127938817,2305843786602775292,2305843762980455250,2305843761906713297,2305843760832971471,2305843759759229645,2305843758685487819,1152922253004899007, + 1152926687558636397,1152922250857420743,1152922249783673528,2305843753316778693,1152923072269914399,2305843751169295066,1152923071196172087,2305843749021811378, + 1152923070122430258,2305843746874327728,1152923069048688429,2305843744726844078,1152923072269913896,2305843742579360466,1152923071196172067,2305843740431876778, + 1152923070122430238,2305843738284393128,1152923069048688409,2305843736136909478,1152922230456320684,2305843819888771836,2305843732915684178,2305843731841942288, + 2305843730768200453,2305843729694458627,2305843728620716801,1152922222940127907,2305849060822620088,1152922220792645046,2305843724325749500,2305843723252007762, + 2305843722178265809,2305843721104523983,2305843720030782157,2305843718957040331,1152922213276451484,1152922212202712929,2305843715735814836,2305844164559902208, + 1152928072685590469,2305843712514589328,1152923074417399748,2305843710367105678,2305843709293364170,1152922203612779149,2305843707145880209,2305844164559902203, + 2305843704998396559,2305843703924654733,2305843702850913226,1152922197170328203,2305843700703429257,2305844164559902214,1152928072685590499,2305843697482203778, + 1152923074417399778,2305843695334720128,2305843694260978662,2305843693187236836,2305843692113495010,1152928063021912942,1152922185359169479,1152922184285422203, + 2305843687818527363,1152923064753723346,2305843685671044055,1152923063679981521,2305843683523560053,1152923062606239696,2305843681376076403,1152923061532497871, + 2305843679228592753,1152922173548004275,1152922172474262537,2305843676007367287,2305847831388230397,2305843673859887638,2305843672786146037,2305843671712404162, + 2305843670638662336,2305843669564920688,2305843668491178682,2305843667417437035,2305843666343695201,2305843665269953273,2305843664196211437,2305843663122469719, + 2305843662048727710,2305843660974985930,2305843659901243923,2305843658827502278,2305843657753759548,2305843656680017574,2305843655606272711,2305843654532530870, + 2305843653458792289,2305843652385051277,2305843651311309451,2305843650237563513,2305843649163822089,638876390928,2305843647016338028,1152922141335749610, + 1152928072685589368,2305843643795112937,2305843642721371202,2305843641647629376,2305843640573887550,2305843639500145724,2305843638426403917,2305843637352662091, + 2305843636278920265,2305843635205178439,1152923064753723300,2305843633057694278,1152923063679981475,2305843630910210628,1152923062606239650,2305843628762726978, + 1152923061532497825,2305843626615243328,1152923747653523358,1152922119860912702,2305843643795112744,2305843622320276546,2305843621246534720,2305843620172792894, + 2305843619099051068,2305843618025309261,2305843616951567435,2305843615877825609,2305843614804083783,1152923684302751785,1152922108049752627,2305843611582857788, + 2305843643795112880,2305843609435374671,1152927886928254464,598074202016,597000459792,1152922100533565356,1152922101607307176,2305843602992923178, + 1152922097312335285,2305843600845439534,1152922100533565355,1152922101607307175,2305843597624214053,1152922091943626164,2305843595476730406,1152922100533565354, + 1152922101607307174,2305843592255504928,1152922086574917043,2305843590108021281,1152922100533565353,1152922101607307173,2305843586886795803,1152922081206207922, + 2305843584739312156,1152923749801007021,1152922077984987038,1152922076911239703,2305843580444344880,2305843643795112855,2305843578296861775,2305843577223119399, + 2305843576149377570,2305843575075635741,2305843574001893912,1152922604118480798,1152922067247563277,2305843570780668435,2305843643795112847,2305843568633185359, + 2305843567559442983,2305843566485701154,2305843565411959325,2305843564338217496,1152922663174281118,1152922057583886852,2305843561116992010,2305843643795112872, + 2305843558969508943,2305843557895767106,2305843556822025280,2305843555748283454,2305843554674541628,1152922048993953720,2305843552527057409,2305843643795112910, + 2305843550379574338,2305843549305832512,2305843548232090686,2305843547158348860,2305843546084607053,2305843545010865227,2305843543937123401,2305843542863381575, + 2305843541789639237,2305843540715897411,2305843539642155585,2305843538568413759,1152923616657020830,1152922031814083052,2305843535347188217,1152922029666604976, + 1152923788455712256,1152927546552096686,2305843531052220903,2305843529978479668,1152928072685590445,2305843527830995428,1152923074417399724,2305843525683511778, + 1152923073343657890,2305843523536028128,5454608471568,1152922016781698985,1152922015707955678,2305843519241060840,6506875459088,1152922012486735364, + 1152927506823649196,2305843514946093528,1152922009265506346,1152922012486735337,1152927528298485676,2305843510651126228,1152922004970543021,2305843508503642581, + 2305843507429901364,1152928072685590443,2305843505282417103,1152928007187338752,2305843503134939050,2305843502061197225,1152921996380603830,2305843499913707981, + 1152923073343657895,2305843497766224328,6503654233616,1152921991011899302,6502580491792,1152921988864410052,1152921988864411452,2305843491323773378, + 1152921991011899300,1152921984569448360,2305843488102547904,1152928001818630057,1152921981348222888,2305843484881322429,1152921979200734644,2305843482733838790, + 1152921977053250009,1152923072269916070,2305843479512613318,1152923071196174245,2305843477365129653,1152923070122432420,2305843475217646003,1152923069048690595, + 2305843473070162353,1152921967389579180,2305843470922678711,1152921965242091291,2305843468775195098,1152928072685590440,2305843466627711618,1152923074417399722, + 2305843464480227753,1152923073343657897,2305843462332744103,2305849509646702096,2305849503204251152,449897824676,1152921953430930868,2305843456964034981, + 1152921954504672691,2305843454816551328,1152923304198150060,1152921948062220702,2305843451595325867,1152927505749907371,1152923266617185799,2305843448374100378, + 2305843447300359220,2305843446226617394,2305843445152875568,2305843444079133742,1152923072269916071,2305843441931649428,1152921936251061791,2305843439784165787, + 2305843612656599613,2305843437636682261,2305843436562940428,2305843435489198595,2305843434415458232,2305843433341714923,1152921927661131696,421980542480, + 511101108616,1953136378247,443455373702,1682553438597,2305843425825522064,1152921920144934375,414464344656,1152921917997455110, + 1152922582643644171,2305843420456812928,1152927865453417965,2305843418309334821,1610612736380,1152923059385013773,2305843415088109540,2305843414014367656, + 2305843412940620850,1152923074417399718,2305843410793136503,1152923073343657893,2305843408645652853,1152923072269916068,2305843406498169203,1152923074417399715, + 2305843404350685559,2305843403276943839,1152923072269916065,2305843401129460078,1152921895448871281,2305843411866879055,1152923073343657887,2305843396834492778, + 1152923072269916062,2305843394687009128,1152921889006420331,1152921887932678523,1152921889006420332,1152921885785200541,1152921889006420337,1152921883637716894, + 2305843387170816354,1152921881490228841,379030864226,389768282461,1152921878269007787,2305843381802107230,371514671460,1152921875047777932, + 1152921873974040326,1152921914776229643,2305843376433398103,2305844561844377502,2305844561844377501,1152921868605325652,1152927995376178692,2305843371064690086, + 1152921865384100178,1152921864310358395,1152921865384100179,1152921865384100180,2305843365695979853,2305843364622238034,2305843363548496206,1152921857867908891, + 1152921856794171142,1152921870752814859,2305843359253528903,1152927504676160936,2305843357106051044,1152928072685590444,2305843354958561603,1152923074417399723, + 2305843352811077953,1152923073343657898,2305843350663594303,1152923072269916073,2305843348516110653,1152923071196174248,2305843346368627003,1152923070122432423, + 2305843344221143353,1152923069048690598,2305843342073659703,1152923067974948773,2305843339926176053,1152923066901206948,2305843337778692403,1152923065827465123, + 2305843335631208753,1152923064753723298,2305843333483725103,1152923063679981473,2305843331336241453,1152921825655652731,2305843356032308752,2305843328115016002, + 2305843327041274176,2305843325967532350,2305843324893790524,2305843323820048698,2305843322746306872,2305843321672565046,2305843320598823220,2305843319525081394, + 2305843318451339568,2305843317377597742,2305843316303855916,1152921810623267114,1152927998597401460,303868938341,1152921807402041629,301721452828, + 1152923789529454512,1152921804180817999,2325724796432,1152921802033338268,1152921800959596448,295279001878,1152921798812107051,293131518232, + 1152921796664628177,1799591302672,1953136378126,5447092273421,1152921792369656187,2305843295902761231,1152921790222178054,1152921853572945675, + 2305843292681535753,6608880932805,1152921785927210760,1152921787000952587,2305843288386568453,6607807190980,1152921781632243464,1152921782705985291, + 2305843284091601153,6606733449155,1152921777337276168,1152921778411017995,2305843279796633853,6605659707330,1152921773042308872,1152921774116050699, + 2305843275501666553,6604585965505,1152921768747341576,1152921769821083403,2305843271206699253,6603512223680,1152921764452374280,1152921765526116107, + 2305843266911731953,6602438481855,1152921760157406984,1152921761231148811,2305843262616764653,6601364740030,1152921755862439688,1152921756936181515, + 2305843258321797353,6600290998205,1152921751567472392,1152921752641214219,2305843254026830053,6599217256380,1152921747272505096,1152921748346246923, + 2305843249731862753,6598143514555,1152921742977537800,1152921744051279627,2305843245436895453,6597069772730,1152921738682570504,1152921739756312331, + 2305843241141928153,6595996030905,1152921734387603208,1152921735461345035,2305843236846960853,6594922289080,1152921730092635912,1152921731166377739, + 2305843232551993553,6593848547255,1152921725797668616,1152921726871410443,2305843228257026253,6592774805430,1152921721502701320,1152921722576443147, + 2305843223962058953,6591701063621,1152921717207734023,1152921718281475851,2305843219667091653,6590627321796,1152921712912766727,1152921713986508555, + 2305843215372124353,6589553579971,1152921708617799431,1152921709691541259,2305843211077157053,6588479838146,1152921704322832135,1152921705396573963, + 2305843206782189753,6587406096321,1152921700027864839,1152921701101606667,2305843202487222453,6586332354496,1152921695732897543,1152921696806639371, + 2305843198192255153,6585258612671,1152921691437930247,1152921692511672075,2305843193897287853,6584184870846,1152921687142962951,1152921688216704779, + 2305843189602320553,6583111129021,1152921682847995655,1152921683921737483,2305843185307353253,6582037387196,1152921678553028359,1152921679626770187, + 2305843181012385953,6580963645371,1152921674258061063,1152921675331802891,2305843176717418653,6579889903546,1152921669963093767,1152921671036835595, + 2305843172422451353,6578816161721,1152921665668126471,1152921666741868299,2305843168127484053,6577742419896,1152921661373159175,1152921662446901003, + 2305843163832516753,6576668678071,1152921657078191879,1152921658151933707,2305843159537549453,6575594936246,1152921652783224583,1152921653856966411, + 2305843155242582153,6324339349258,1152927830019938050,1152927831093679875,142807668490,1152921647414515459,1152921646340773635,139586443018, + 1152921644193289987,1152921643119548163,136365217546,1152921640972064515,1152921639898322691,133143992074,1152921637750839043,1152921636677097219, + 129922766602,1152921634529613571,1152921633455871747,126701541130,1152921631308388099,1152921630234646275,123480315658,1152921628087162627, + 1152921627013420803,1152927974975084013,2305843127325300619,1152927972827600365,2305843125177816969,1152927970680116717,2305843123030333319,1152927968532633069, + 2305843120882849669,1152927966385149421,2305843118735366019,1152927964237665773,2305843116587882369,1152927962090182125,2305843114440398719,1152927959942698477, + 2305843112292915069,1152921642045800579,1152921605538578557,1152921604464836730,1152921603391094903,1152921602317353076,1152921601243611249,1152921600169875204, + 1152921599096127597,1152921642045800582,1152921596948643965,1152921595874902138,1152921594801160311,1152921593727418484,1152921592653676657,1152921591579934852, + 1152921590506193003,2305843094039298135,1152921645267026054,1152921587284967549,1152921586211225722,1152921585137483895,1152921584063742068,1152921582990000241, + 1152921581916258433,1152921580842516585,2305843084375621710,1152921587284967552,1152921577621291130,1152921576547549303,1152921575473807476,1152921574400065649, + 1152921573326323838,1152921572252581991,2305843075785687109,1152921577621291133,1152921569031356535,1152921567957614708,1152921566883872881,1152921565810131067, + 1152921564736389221,2305843068269494333,1152921569031356538,1152921561515163764,1152921560441421937,1152921559367680120,1152921558293938275,2305843061827043382, + 1152921561515163767,1152921555072712817,1152921553998970997,1152921552925229153,2305843056458334256,1152921555072712820,1152921549704003698,1152921548630261855, + 2305843052163366955,6064493827850,1152921545409036327,39728447623,1152927846126065427,1152921542187816721,1152921541114074896,1152921540040333070, + 1152921538966591245,1152928117782747109,2305843041425949944,1152928116709000630,2305843039278465053,1152928115635258805,2305843037130981403,1152928114561516980, + 2305843034983497753,1152921529302908959,1152921528229168146,1152928079128041445,2305843030688531474,1152928078054294966,2305843028541046803,1152928076980553141, + 2305843026393563153,1152928075906811316,2305843024246079503,1152928074833068045,12884901909,2305849344290461455,1152927832167421701,1152927832167415819, + 1152921514270523402,2305843017803628580,2305843015656144903,1152921509975556101,1152921508901814276,1152921507828072451,1152921506754330626,1152921505680588801 ] diff --git a/crates/lib/core/asm/sys/vm/mod.masm b/crates/lib/core/asm/sys/vm/mod.masm index b00adb9f38..cc5c1ace24 100644 --- a/crates/lib/core/asm/sys/vm/mod.masm +++ b/crates/lib/core/asm/sys/vm/mod.masm @@ -23,10 +23,10 @@ const ACCEPTABLE_FOLDING_POW_BITS = 4 # protocol choice: hash function, field, blowup factor, FRI folding factor, coset # offset, max remainder degree, etc. It must be bumped when any of these change. # CIRCUIT_COMMITMENT covers the AIR constraints (via the encoded ACE circuit hash). -const RELATION_DIGEST_0 = 14932224741264950205 -const RELATION_DIGEST_1 = 13231194489255299102 -const RELATION_DIGEST_2 = 9539190039789656767 -const RELATION_DIGEST_3 = 16072183680659208914 +const RELATION_DIGEST_0 = 7682526984894530630 +const RELATION_DIGEST_1 = 13019009422810970716 +const RELATION_DIGEST_2 = 16037978224454945133 +const RELATION_DIGEST_3 = 1332031755710493241 #! Loads security parameters from the advice stack and stores them in memory. #! diff --git a/crates/lib/core/asm/sys/vm/public_inputs.masm b/crates/lib/core/asm/sys/vm/public_inputs.masm index df3f278864..c090200ccf 100644 --- a/crates/lib/core/asm/sys/vm/public_inputs.masm +++ b/crates/lib/core/asm/sys/vm/public_inputs.masm @@ -229,7 +229,27 @@ proc reduce_variable_length_public_inputs dropw # => [...] - # 4) Get the pointer to the variable-length public inputs and reduce kernel digests. + # 4) Compute gamma = beta^16 for per-bus domain separation. + # gamma is needed by reduce_kernel_digests to build bus_prefix = alpha + gamma. + # We compute it here (from the non-deterministic beta) because generate_aux_randomness + # runs later in the protocol. The value is stored at BUS_GAMMA_PTR for reuse. + exec.constants::aux_rand_nd_ptr mem_load + exec.constants::aux_rand_nd_ptr push.1 add mem_load + # => [beta1, beta0, ...] + swap + # => [beta0, beta1, ...] + dup.1 dup.1 ext2mul # beta^2 + dup.1 dup.1 ext2mul # beta^4 + dup.1 dup.1 ext2mul # beta^8 + dup.1 dup.1 ext2mul # beta^16 = gamma + # => [gamma0, gamma1, ...] + push.0.0 movup.3 movup.3 + # => [gamma0, gamma1, 0, 0, ...] + exec.constants::bus_gamma_ptr mem_storew_le + dropw + # => [...] + + # 5) Get the pointer to the variable-length public inputs and reduce kernel digests. # The reduced value is stored by reduce_kernel_digests at var_len_ptr (in the ACE READ # section), where it remains accessible via variable_length_public_inputs_address_ptr. exec.constants::variable_length_public_inputs_address_ptr mem_load @@ -271,19 +291,29 @@ proc reduce_kernel_digests exec.constants::aux_rand_nd_ptr mem_loadw_le # => [beta0, beta1, alpha0, alpha1, digests_ptr, ...] - # We will keep [alpha0 + op_label, alpha1, beta0, beta1] on the stack so that we can compute + # Compute bus_prefix = alpha + gamma for per-bus domain separation. + # gamma = beta^16 was precomputed in generate_aux_randomness and stored at BUS_GAMMA_PTR. + # Since CHIPLETS_BUS = 0, bus_prefix = alpha + (0+1)*gamma = alpha + gamma. + movup.3 movup.3 + # => [alpha0, alpha1, beta0, beta1, digests_ptr, ...] + exec.constants::bus_gamma_ptr mem_load + # => [gamma0, alpha0, alpha1, beta0, beta1, digests_ptr, ...] + exec.constants::bus_gamma_ptr push.1 add mem_load + # => [gamma1, gamma0, alpha0, alpha1, beta0, beta1, digests_ptr, ...] + swap + # => [gamma0, gamma1, alpha0, alpha1, beta0, beta1, digests_ptr, ...] + ext2add + # => [prefix0, prefix1, beta0, beta1, digests_ptr, ...] + + # We will keep [prefix0 + op_label, prefix1, beta0, beta1] on the stack so that we can compute # the final result, where op_label is a unique label to domain separate the interaction with - # the chiplets` bus. + # the chiplets' bus. # The final result is then computed as: # - # alpha + op_label + beta * (r_0 * beta^0 + r_1 * beta^1 + r_2 * beta^2 + r_3 * beta^3) - movup.3 - movup.3 - # => [alpha0, alpha1, beta0, beta1, digests_ptr, ...] - + # bus_prefix + op_label + beta * (r_0 * beta^0 + r_1 * beta^1 + r_2 * beta^2 + r_3 * beta^3) push.KERNEL_OP_LABEL add - # => [alpha0 + op_label, alpha1, beta0, beta1, digests_ptr, ...] + # => [prefix0 + op_label, prefix1, beta0, beta1, digests_ptr, ...] # Push the `horner_eval_ext` accumulator push.0.0 diff --git a/crates/lib/core/src/bin/regenerate-constraints.rs b/crates/lib/core/src/bin/regenerate-constraints.rs new file mode 100644 index 0000000000..ba20d2cfa1 --- /dev/null +++ b/crates/lib/core/src/bin/regenerate-constraints.rs @@ -0,0 +1,52 @@ +use std::process::ExitCode; + +use miden_core_lib::constraints_regen::{self, Mode}; + +fn usage() { + println!("Usage:"); + println!(" regenerate-constraints [--check|--write]"); + println!(); + println!("Options:"); + println!(" --check Verify checked-in constraint artifacts (default)"); + println!(" --write Rebuild and write constraint artifacts"); + println!(" -h, --help Show this message"); +} + +fn parse_mode() -> Result { + let mut mode = Mode::Check; + + for arg in std::env::args().skip(1) { + match arg.as_str() { + "--check" => mode = Mode::Check, + "--write" => mode = Mode::Write, + "-h" | "--help" => { + usage(); + return Err(ExitCode::SUCCESS); + }, + other => { + eprintln!("Unknown argument: {other}"); + usage(); + return Err(ExitCode::FAILURE); + }, + } + } + + Ok(mode) +} + +fn main() -> ExitCode { + let mode = match parse_mode() { + Ok(mode) => mode, + Err(code) => return code, + }; + + if let Err(error) = constraints_regen::run(mode) { + eprintln!("failed: {error}"); + if mode == Mode::Check { + eprintln!("hint: rerun with `--write` to refresh checked-in artifacts"); + } + return ExitCode::FAILURE; + } + + ExitCode::SUCCESS +} diff --git a/crates/lib/core/src/constraints_regen.rs b/crates/lib/core/src/constraints_regen.rs new file mode 100644 index 0000000000..0d11eb46c7 --- /dev/null +++ b/crates/lib/core/src/constraints_regen.rs @@ -0,0 +1,333 @@ +use alloc::{ + format, + string::{String, ToString}, + vec::Vec, +}; +use std::{fs, io, println}; + +use miden_ace_codegen::{AceCircuit, AceConfig, LayoutKind}; +use miden_air::ProcessorAir; +use miden_core::{Felt, field::QuadFelt}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum Mode { + Check, + Write, +} + +const MASM_CONFIG: AceConfig = AceConfig { + num_quotient_chunks: 8, + num_vlpi_groups: 1, + layout: LayoutKind::Masm, +}; +pub const RELATION_DIGEST_PATHS: (&str, &str) = + ("asm/sys/vm/mod.masm", "asm/sys/vm/constraints_eval.masm"); + +const PROTOCOL_ID: u64 = 0; +const AIR_CONFIG_PATH: &str = "../../../air/src/config.rs"; +const CONSTRAINTS_EVAL_PATH: &str = "asm/sys/vm/constraints_eval.masm"; +const RELATION_DIGEST_PATH: &str = RELATION_DIGEST_PATHS.0; + +/// Builds the batched ACE circuit used by the Miden VM recursive verifier. +pub fn build_batched_circuit(config: AceConfig) -> AceCircuit { + let air = ProcessorAir; + let batch_config = miden_air::ace::reduced_aux_batch_config(); + miden_air::ace::build_batched_ace_circuit::<_, QuadFelt>(&air, config, &batch_config).unwrap() +} + +/// Computes the relation digest used by recursive verification. +pub fn compute_relation_digest(circuit_commitment: &[Felt; 4]) -> [Felt; 4] { + let input: Vec = core::iter::once(Felt::new(PROTOCOL_ID)) + .chain(circuit_commitment.iter().copied()) + .collect(); + let digest = miden_utils_testing::crypto::Poseidon2::hash_elements(&input); + let elems = digest.as_elements(); + [elems[0], elems[1], elems[2], elems[3]] +} + +/// Runs write (`--write`) or staleness-check (`--check`) mode. +pub fn run(mode: Mode) -> Result<(), String> { + match mode { + Mode::Check => check(), + Mode::Write => write().map_err(|e| format!("{e}")), + } +} + +/// Runs the full regeneration flow. +fn write() -> io::Result<()> { + let artifact = compute_artifacts()?; + write_artifacts(&artifact) +} + +/// Checks generated artifacts against current AIR-derived values. +fn check() -> Result<(), String> { + constraints_eval_masm_matches_air()?; + relation_digest_matches_air()?; + Ok(()) +} + +/// Generate a full computed snapshot from the current AIR. +fn compute_artifacts() -> io::Result { + let circuit = build_batched_circuit(MASM_CONFIG); + let encoded = circuit.to_ace().unwrap(); + + let num_inputs = encoded.num_vars(); + let num_eval_gates = encoded.num_eval_rows(); + let instructions = encoded.instructions(); + let size_in_felt = encoded.size_in_felt(); + if !size_in_felt.is_multiple_of(8) { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + format!( + "circuit size_in_felt ({size_in_felt}) is not 8-aligned; adv_pipe requires 8-element chunks" + ), + )); + } + let adv_pipe_rows = size_in_felt / 8; + + let circuit_commitment: [Felt; 4] = encoded.circuit_hash().into(); + let relation_digest = compute_relation_digest(&circuit_commitment); + + let mut constraints_eval = read_file(CONSTRAINTS_EVAL_PATH); + { + replace_masm_const(&mut constraints_eval, "NUM_INPUTS_CIRCUIT", &num_inputs.to_string()); + replace_masm_const( + &mut constraints_eval, + "NUM_EVAL_GATES_CIRCUIT", + &num_eval_gates.to_string(), + ); + + let proc_start = + constraints_eval.find("proc load_ace_circuit_description").ok_or_else(|| { + io::Error::new( + io::ErrorKind::NotFound, + "proc load_ace_circuit_description not found", + ) + })?; + if let Some(repeat_offset) = constraints_eval[proc_start..].find("repeat.") { + let abs = proc_start + repeat_offset; + let end = constraints_eval[abs..] + .find('\n') + .map(|i| abs + i) + .unwrap_or(constraints_eval.len()); + constraints_eval.replace_range(abs..end, &format!("repeat.{adv_pipe_rows}")); + } + + let section_marker = "# CONSTRAINT EVALUATION CIRCUIT DESCRIPTION"; + let section_start = constraints_eval.find(section_marker).ok_or_else(|| { + io::Error::new(io::ErrorKind::NotFound, "constraints section marker not found") + })?; + constraints_eval.truncate(section_start); + let trimmed = constraints_eval.trim_end().len(); + constraints_eval.truncate(trimmed); + constraints_eval.push_str("\n\n# CONSTRAINT EVALUATION CIRCUIT DESCRIPTION\n"); + constraints_eval + .push_str("# =================================================================================================\n\n"); + constraints_eval.push_str("adv_map CIRCUIT_COMMITMENT = [\n"); + + for (i, chunk) in instructions.chunks(8).enumerate() { + let vals: Vec = + chunk.iter().map(|f| f.as_canonical_u64().to_string()).collect(); + let line = vals.join(","); + if i < adv_pipe_rows - 1 { + constraints_eval.push_str(&format!(" {line},\n")); + } else { + constraints_eval.push_str(&format!(" {line}\n")); + } + } + constraints_eval.push_str("]\n"); + } + + let mut relation_mod = read_file(RELATION_DIGEST_PATH); + for (i, elem) in relation_digest.iter().enumerate() { + replace_masm_const( + &mut relation_mod, + &format!("RELATION_DIGEST_{i}"), + &elem.as_canonical_u64().to_string(), + ); + } + + let mut air_config = read_file(AIR_CONFIG_PATH); + let marker = "pub const RELATION_DIGEST: [Felt; 4] = ["; + let start = air_config.find(marker).ok_or_else(|| { + io::Error::new(io::ErrorKind::NotFound, "RELATION_DIGEST not found in config.rs") + })?; + let block_start = start + marker.len(); + let block_end = + air_config[block_start..] + .find("];") + .map(|idx| idx + block_start) + .ok_or_else(|| { + io::Error::new(io::ErrorKind::NotFound, "RELATION_DIGEST terminator not found") + })?; + let mut new_block: String = relation_digest + .iter() + .map(|f| format!("\n Felt::new({}),", f.as_canonical_u64())) + .collect(); + new_block.push('\n'); + air_config.replace_range(block_start..block_end, &new_block); + + Ok(ComputedArtifacts { + num_inputs, + num_eval_gates, + adv_pipe_rows, + circuit_commitment, + relation_digest, + constraints_eval, + relation_mod, + air_config, + }) +} + +fn write_artifacts(artifact: &ComputedArtifacts) -> io::Result<()> { + write_file(CONSTRAINTS_EVAL_PATH, &artifact.constraints_eval)?; + write_file(RELATION_DIGEST_PATH, &artifact.relation_mod)?; + write_file(AIR_CONFIG_PATH, &artifact.air_config)?; + println!( + "wrote asm/sys/vm/constraints_eval.masm ({} inputs, {} eval gates, repeat.{})", + artifact.num_inputs, artifact.num_eval_gates, artifact.adv_pipe_rows + ); + println!("wrote asm/sys/vm/mod.masm (RELATION_DIGEST)"); + println!("wrote air/src/config.rs (RELATION_DIGEST)"); + println!("done — run `cargo test -p miden-air --lib` to update the insta snapshot"); + Ok(()) +} + +/// Verify that the ACE circuit constants in `constraints_eval.masm` match the current AIR. +pub fn constraints_eval_masm_matches_air() -> Result<(), String> { + let artifact = compute_artifacts().map_err(|e| e.to_string())?; + let masm = read_file(RELATION_DIGEST_PATHS.1); + let actual_num_inputs: usize = + parse_masm_const(&masm, "NUM_INPUTS_CIRCUIT", "constraints_eval.masm") + .map_err(|e| e.to_string())?; + let actual_num_eval: usize = + parse_masm_const(&masm, "NUM_EVAL_GATES_CIRCUIT", "constraints_eval.masm") + .map_err(|e| e.to_string())?; + + let proc_start = masm + .find("proc load_ace_circuit_description") + .ok_or_else(|| "load_ace_circuit_description proc not found".to_string())?; + let actual_adv_pipe: usize = masm[proc_start..] + .lines() + .find_map(|line| line.trim().strip_prefix("repeat.").and_then(|v| v.parse::().ok())) + .ok_or_else(|| "repeat.N not found in load_ace_circuit_description".to_string())?; + + let adv_start = masm + .find("adv_map CIRCUIT_COMMITMENT = [") + .ok_or_else(|| "adv_map CIRCUIT_COMMITMENT not found".to_string())?; + let adv_end = masm[adv_start..] + .find(']') + .map(|idx| idx + adv_start) + .ok_or_else(|| "adv_map data block terminator not found".to_string())?; + let data_str = &masm[masm[..adv_start].len() + "adv_map CIRCUIT_COMMITMENT = [".len()..adv_end]; + let actual_data: Vec = data_str + .split(',') + .map(|s| s.trim()) + .filter(|s| !s.is_empty()) + .map(|s| { + s.parse::() + .map(Felt::new) + .map_err(|_| "invalid u64 in adv_map".to_string()) + }) + .collect::>()?; + let actual_hash = miden_utils_testing::crypto::Poseidon2::hash_elements(&actual_data); + + let actual_hash_u64: Vec = + actual_hash.as_elements().iter().map(|f| f.as_canonical_u64()).collect(); + let expected_hash_u64: Vec = + artifact.circuit_commitment.iter().map(|f| f.as_canonical_u64()).collect(); + + if actual_num_inputs != artifact.num_inputs { + return Err(format!( + "NUM_INPUTS_CIRCUIT is stale ({actual_num_inputs} != {})", + artifact.num_inputs, + )); + } + if actual_num_eval != artifact.num_eval_gates { + return Err(format!( + "NUM_EVAL_GATES_CIRCUIT is stale ({actual_num_eval} != {})", + artifact.num_eval_gates, + )); + } + if actual_adv_pipe != artifact.adv_pipe_rows { + return Err(format!( + "repeat.N in load_ace_circuit_description is stale ({actual_adv_pipe} != {})", + artifact.adv_pipe_rows, + )); + } + if actual_hash_u64 != expected_hash_u64 { + return Err("Circuit data in adv_map is stale (hash mismatch)".into()); + } + Ok(()) +} + +/// Verify that RELATION_DIGEST in `air/src/config.rs` and `sys/vm/mod.masm` matches current AIR. +pub fn relation_digest_matches_air() -> Result<(), String> { + let artifact = compute_artifacts().map_err(|e| e.to_string())?; + let expected = artifact.relation_digest; + + if miden_air::config::RELATION_DIGEST != expected { + return Err("RELATION_DIGEST in air/src/config.rs is stale".into()); + } + + let masm = read_file(RELATION_DIGEST_PATH); + let mut masm_digest: [Felt; 4] = [Felt::ZERO; 4]; + for (i, slot) in masm_digest.iter_mut().enumerate() { + let name = format!("RELATION_DIGEST_{i}"); + *slot = parse_masm_const::(&masm, &name, "sys/vm/mod.masm") + .map(Felt::new) + .map_err(|e| e.to_string())?; + } + + if masm_digest != expected { + return Err("RELATION_DIGEST in sys/vm/mod.masm is stale".into()); + } + + Ok(()) +} + +fn parse_masm_const( + masm: &str, + name: &str, + file_label: &str, +) -> Result +where + T::Err: core::fmt::Debug, +{ + let prefix = format!("const {name} = "); + masm.lines() + .find_map(|line| line.trim().strip_prefix(&prefix).and_then(|v| v.parse::().ok())) + .ok_or_else(|| format!("constant {name} not found in {file_label}")) +} + +fn replace_masm_const(content: &mut String, name: &str, new_value: &str) { + let prefix = format!("const {name} = "); + let line_start = content.find(&prefix).unwrap_or_else(|| panic!("const {name} not found")); + let line_end = content[line_start..] + .find('\n') + .map(|i| line_start + i) + .unwrap_or(content.len()); + content.replace_range(line_start..line_end, &format!("{prefix}{new_value}")); +} + +fn read_file(rel_path: &str) -> String { + let path = format!("{}/{}", env!("CARGO_MANIFEST_DIR"), rel_path); + fs::read_to_string(&path).unwrap_or_else(|e| panic!("failed to read {path}: {e}")) +} + +fn write_file(rel_path: &str, contents: &str) -> io::Result<()> { + let path = format!("{}/{}", env!("CARGO_MANIFEST_DIR"), rel_path); + fs::write(&path, contents) + .map_err(|e| io::Error::new(e.kind(), format!("failed to write {path}: {e}"))) +} + +struct ComputedArtifacts { + num_inputs: usize, + num_eval_gates: usize, + adv_pipe_rows: usize, + circuit_commitment: [Felt; 4], + relation_digest: [Felt; 4], + constraints_eval: String, + relation_mod: String, + air_config: String, +} diff --git a/crates/lib/core/src/lib.rs b/crates/lib/core/src/lib.rs index 1ee5af8e3b..205475579c 100644 --- a/crates/lib/core/src/lib.rs +++ b/crates/lib/core/src/lib.rs @@ -1,5 +1,10 @@ #![no_std] +#[cfg(feature = "std")] +extern crate std; + +#[cfg(any(feature = "constraints-tools", all(test, feature = "std")))] +pub mod constraints_regen; pub mod dsa; pub mod handlers; diff --git a/crates/lib/core/tests/stark/ace_circuit.rs b/crates/lib/core/tests/stark/ace_circuit.rs index ab776f0a0f..180c7f6994 100644 --- a/crates/lib/core/tests/stark/ace_circuit.rs +++ b/crates/lib/core/tests/stark/ace_circuit.rs @@ -1,219 +1,14 @@ -use miden_ace_codegen::{AceCircuit, AceConfig, LayoutKind}; -use miden_air::ProcessorAir; -use miden_core::{Felt, field::QuadFelt}; +#![cfg(feature = "constraints-tools")] -/// The ACE circuit configuration used by the Miden VM recursive verifier. -const MASM_CONFIG: AceConfig = AceConfig { - num_quotient_chunks: 8, - num_vlpi_groups: 1, - layout: LayoutKind::Masm, -}; +use miden_core_lib::constraints_regen; -const REGEN_CMD: &str = "cargo test --release -p miden-core-lib generate_constraints_eval_masm_data -- --ignored --nocapture"; - -/// Build the batched ACE circuit for the Miden VM ProcessorAir. -pub fn build_batched_circuit(config: AceConfig) -> AceCircuit { - let air = ProcessorAir; - let batch_config = miden_air::ace::reduced_aux_batch_config(); - miden_air::ace::build_batched_ace_circuit::<_, QuadFelt>(&air, config, &batch_config).unwrap() -} - -/// Protocol version constant used in the computation of RELATION_DIGEST. -const PROTOCOL_ID: u64 = 0; - -/// Compute RELATION_DIGEST = Poseidon2::hash_elements([PROTOCOL_ID, circuit_commitment...]). -fn compute_relation_digest(circuit_commitment: &[Felt; 4]) -> [Felt; 4] { - let input: Vec = core::iter::once(Felt::new(PROTOCOL_ID)) - .chain(circuit_commitment.iter().copied()) - .collect(); - let digest = miden_utils_testing::crypto::Poseidon2::hash_elements(&input); - let elems = digest.as_elements(); - [elems[0], elems[1], elems[2], elems[3]] -} - -/// Parse a MASM constant declaration (`const NAME = VALUE`) from file contents. -fn parse_masm_const(masm: &str, name: &str, file_label: &str) -> T -where - T::Err: core::fmt::Debug, -{ - let prefix = format!("const {name} = "); - masm.lines() - .find_map(|line| line.trim().strip_prefix(&prefix).map(|v| v.parse::().unwrap())) - .unwrap_or_else(|| panic!("constant {name} not found in {file_label}")) -} - -/// Read MASM source from a path relative to the crate manifest directory. -fn read_masm(rel_path: &str) -> String { - let path = format!("{}/{rel_path}", env!("CARGO_MANIFEST_DIR")); - std::fs::read_to_string(&path).unwrap_or_else(|e| panic!("failed to read {path}: {e}")) -} - -// GENERATOR -// ================================================================================================ - -#[test] -#[ignore = "run manually to regenerate constraints_eval.masm data"] -#[allow(clippy::print_stdout)] -fn generate_constraints_eval_masm_data() { - let circuit = build_batched_circuit(MASM_CONFIG); - let encoded = circuit.to_ace().unwrap(); - - let num_vars = encoded.num_vars(); - let num_eval = encoded.num_eval_rows(); - let num_inputs = encoded.num_inputs(); - let num_constants = encoded.num_constants(); - let instructions = encoded.instructions(); - let size_in_felt = encoded.size_in_felt(); - let hash = encoded.circuit_hash(); - - assert_eq!( - size_in_felt % 8, - 0, - "circuit size_in_felt ({size_in_felt}) is not 8-aligned; adv_pipe requires 8-element chunks" - ); - let num_adv_pipe = size_in_felt / 8; - - println!("=== ACE Circuit Data for constraints_eval.masm ==="); - println!("NUM_INPUTS_CIRCUIT = {num_vars}"); - println!("NUM_EVAL_GATES_CIRCUIT = {num_eval}"); - println!("num_inputs (READ slots) = {num_inputs}"); - println!("num_constants = {num_constants}"); - println!("size_in_felt = {size_in_felt}"); - println!("num_adv_pipe (repeat.N) = {num_adv_pipe}"); - println!(); - - println!( - "CIRCUIT_COMMITMENT hash = [{}, {}, {}, {}]", - hash[0].as_canonical_u64(), - hash[1].as_canonical_u64(), - hash[2].as_canonical_u64(), - hash[3].as_canonical_u64() - ); - - let circuit_commitment: [Felt; 4] = hash.into(); - let rd = compute_relation_digest(&circuit_commitment); - println!(); - println!("# RELATION_DIGEST constants for sys/vm/mod.masm:"); - for (i, elem) in rd.iter().enumerate() { - println!("const RELATION_DIGEST_{i} = {}", elem.as_canonical_u64()); - } - println!(); - - println!("adv_map CIRCUIT_COMMITMENT = ["); - for (i, chunk) in instructions.chunks(8).enumerate() { - let vals: Vec = chunk.iter().map(|f| f.as_canonical_u64().to_string()).collect(); - let line = vals.join(","); - if i < num_adv_pipe - 1 { - println!(" {line},"); - } else { - println!(" {line}"); - } - } - println!("]"); - - let layout = circuit.layout(); - println!(); - println!("Layout total_inputs = {}", layout.total_inputs); - println!("Layout counts = {:?}", layout.counts); -} - -// STALENESS CHECKS -// ================================================================================================ - -/// Verify that the ACE circuit constants in `constraints_eval.masm` match the current AIR. -/// -/// If this test fails after changing AIR constraints, regenerate with: -/// cargo test --release -p miden-core-lib generate_constraints_eval_masm_data -- --ignored -/// --nocapture #[test] fn constraints_eval_masm_matches_air() { - let circuit = build_batched_circuit(MASM_CONFIG); - let encoded = circuit.to_ace().unwrap(); - - let expected_num_inputs = encoded.num_vars(); - let expected_num_eval = encoded.num_eval_rows(); - let size_in_felt = encoded.size_in_felt(); - assert_eq!( - size_in_felt % 8, - 0, - "circuit size_in_felt ({size_in_felt}) is not 8-aligned; adv_pipe requires 8-element chunks" - ); - let expected_adv_pipe = size_in_felt / 8; - let expected_hash = encoded.circuit_hash(); - - let masm = read_masm("asm/sys/vm/constraints_eval.masm"); - - let actual_num_inputs: usize = - parse_masm_const(&masm, "NUM_INPUTS_CIRCUIT", "constraints_eval.masm"); - let actual_num_eval: usize = - parse_masm_const(&masm, "NUM_EVAL_GATES_CIRCUIT", "constraints_eval.masm"); - - // Parse `repeat.N` inside load_ace_circuit_description. - let proc_start = masm.find("proc load_ace_circuit_description").unwrap(); - let actual_adv_pipe: usize = masm[proc_start..] - .lines() - .find_map(|line| line.trim().strip_prefix("repeat.").map(|v| v.parse().unwrap())) - .expect("repeat.N not found in load_ace_circuit_description"); - - // Parse the adv_map data to compute its hash. - let adv_start = masm.find("adv_map CIRCUIT_COMMITMENT = [").unwrap(); - let adv_end = masm[adv_start..].find(']').unwrap() + adv_start; - let data_str = &masm[masm[..adv_start].len() + "adv_map CIRCUIT_COMMITMENT = [".len()..adv_end]; - let actual_data: Vec = data_str - .split(',') - .map(|s| s.trim()) - .filter(|s| !s.is_empty()) - .map(|s| Felt::new(s.parse::().unwrap())) - .collect(); - let actual_hash = miden_utils_testing::crypto::Poseidon2::hash_elements(&actual_data); - - assert_eq!( - actual_num_inputs, expected_num_inputs, - "NUM_INPUTS_CIRCUIT is stale ({actual_num_inputs} != {expected_num_inputs}). Regenerate with: {REGEN_CMD}" - ); - assert_eq!( - actual_num_eval, expected_num_eval, - "NUM_EVAL_GATES_CIRCUIT is stale ({actual_num_eval} != {expected_num_eval}). Regenerate with: {REGEN_CMD}" - ); - assert_eq!( - actual_adv_pipe, expected_adv_pipe, - "repeat.N in load_ace_circuit_description is stale ({actual_adv_pipe} != {expected_adv_pipe}). Regenerate with: {REGEN_CMD}" - ); - - let actual_hash_u64: Vec = - actual_hash.as_elements().iter().map(|f| f.as_canonical_u64()).collect(); - let expected_hash_u64: Vec = expected_hash.iter().map(|f| f.as_canonical_u64()).collect(); - assert_eq!( - actual_hash_u64, expected_hash_u64, - "Circuit data in adv_map is stale (hash mismatch). Regenerate with: {REGEN_CMD}" - ); + constraints_regen::constraints_eval_masm_matches_air() + .expect("constraints_eval.masm drift check failed"); } -/// Verify that RELATION_DIGEST in `air/src/config.rs` (Rust) and `sys/vm/mod.masm` (MASM) -/// both match the value recomputed from the current AIR. #[test] fn relation_digest_matches_air() { - let circuit = build_batched_circuit(MASM_CONFIG); - let encoded = circuit.to_ace().unwrap(); - let circuit_commitment: [Felt; 4] = encoded.circuit_hash().into(); - let expected = compute_relation_digest(&circuit_commitment); - - // 1. Verify the Rust constant in air/src/config.rs. - assert_eq!( - miden_air::config::RELATION_DIGEST, - expected, - "RELATION_DIGEST in air/src/config.rs is stale. Regenerate with: {REGEN_CMD}", - ); - - // 2. Verify the MASM constants in sys/vm/mod.masm. - let masm = read_masm("asm/sys/vm/mod.masm"); - let masm_digest: [Felt; 4] = core::array::from_fn(|i| { - let name = format!("RELATION_DIGEST_{i}"); - Felt::new(parse_masm_const::(&masm, &name, "sys/vm/mod.masm")) - }); - - assert_eq!( - masm_digest, expected, - "RELATION_DIGEST in sys/vm/mod.masm is stale. Regenerate with: {REGEN_CMD}", - ); + constraints_regen::relation_digest_matches_air().expect("relation digest check failed"); } diff --git a/crates/lib/core/tests/stark/mod.rs b/crates/lib/core/tests/stark/mod.rs index ae7af4a297..0057b6fda7 100644 --- a/crates/lib/core/tests/stark/mod.rs +++ b/crates/lib/core/tests/stark/mod.rs @@ -316,7 +316,11 @@ fn reduce_kernel_procedures_digests( fn reduce_digest(digest: &[u64], alpha: QuadFelt, beta: QuadFelt) -> QuadFelt { const KERNEL_OP_LABEL: Felt = Felt::new(48); - alpha + // gamma = beta^MAX_MESSAGE_WIDTH = beta^16 + let gamma = (0..16).fold(QuadFelt::ONE, |acc, _| acc * beta); + // CHIPLETS_BUS = 0, so bus_prefix = alpha + (0+1) * gamma = alpha + gamma + let bus_prefix = alpha + gamma; + bus_prefix + QuadFelt::from(KERNEL_OP_LABEL) + beta * digest diff --git a/docs/src/design/chiplets/hasher.md b/docs/src/design/chiplets/hasher.md index a3cff35c2b..8365755c63 100644 --- a/docs/src/design/chiplets/hasher.md +++ b/docs/src/design/chiplets/hasher.md @@ -6,20 +6,26 @@ sidebar_position: 2 # Hash chiplet The hash chiplet executes all Poseidon2-based hashing performed by the VM. In the -current design it is split into two regions: +current design it is split into two **sub-chiplets** that each own their own +chiplet-level selector in the shared chiplet tri-state selector system: -1. **Controller region** (`perm_seg = 0`) records hash requests as compact - `(input, output)` row pairs and communicates with the rest of the VM via the - chiplets bus. -2. **Permutation segment** (`perm_seg = 1`) executes Poseidon2 permutations in a - dedicated compute region, using one packed 16-row cycle per unique input - state. +1. **Controller** (`s_ctrl = 1`) records hash requests as compact `(input, output)` + row pairs and communicates with the rest of the VM via the chiplets bus. +2. **Permutation** (`s_perm = 1`) executes Poseidon2 permutations in a dedicated + compute region, using one packed 16-row cycle per unique input state. This separation lets the VM **deduplicate permutations**: if the same input state is requested multiple times, the controller records multiple requests but the permutation segment executes the permutation only once and carries the request count as a multiplicity. +The two physical selectors `s_ctrl` (= `chiplets[0]`) and `s_perm` +(the last chiplets column) partition hasher rows. The virtual selector +`s0 = 1 - s_ctrl - s_perm` covers all non-hasher rows and is subdivided by +`s1..s4` into the remaining chiplets (bitwise, memory, ACE, kernel ROM). The +transition rules `ctrl → ctrl | perm`, `perm → perm | s0`, `s0 → s0` enforce +the trace ordering. + ## Supported operations The chiplet supports: @@ -30,35 +36,45 @@ The chiplet supports: - Merkle path verification, - Merkle root update. -These operations are encoded by the three **hasher-internal selector** columns -`(s0, s1, s2)` on controller rows: +These operations are encoded by the three **hasher-internal sub-selector** columns +`(s0, s1, s2)` on controller rows. These are the `ControllerCols` fields and live +in `chiplets[1..4]`. They are separate from the chiplet-level virtual +`s0 = 1 - s_ctrl - s_perm` (which is only ever an expression inside the chiplet +selector system, never a physical column or struct field). -| Selectors | Meaning | -|-----------|---------| +| Sub-selectors | Meaning | +|---------------|---------| | `(1, 0, 0)` | sponge input / linear hash input | | `(1, 0, 1)` | Merkle path verify input | | `(1, 1, 0)` | Merkle update old-path input | | `(1, 1, 1)` | Merkle update new-path input | -| `(0, 0, 0)` | return digest | -| `(0, 0, 1)` | return full state | -| `(0, 1, 0)` | controller padding | +| `(0, 0, 0)` | return digest (HOUT) | +| `(0, 0, 1)` | return full state (SOUT) | +| `(0, 1, *)` | controller padding | -On permutation rows these same columns are **not selectors**: they are reused as -witness columns for packed internal rounds. +On permutation rows these same physical columns are **not selectors**: they are +reused as witness columns `(w0, w1, w2)` for the packed internal rounds. ## Trace layout -Within the chiplets segment, the hasher occupies **20 columns**: - -| Columns | Purpose | -|---------|---------| -| `s0, s1, s2` | controller selectors / permutation witnesses | -| `h0..h11` | Poseidon2 state = `[RATE0, RATE1, CAPACITY]` | -| `node_index` | Merkle node index on controller rows; permutation multiplicity on perm rows | -| `mrupdate_id` | domain separator for sibling-table entries | -| `is_boundary` | 1 on first controller input and last controller output of an operation | -| `direction_bit` | propagated Merkle direction bit on controller rows | -| `perm_seg` | 0 = controller region, 1 = permutation segment | +Within the chiplets segment, the hasher occupies **20 columns** split between the +two sub-chiplets. The chiplet-level selectors `s_ctrl` (= `chiplets[0]`) and +`s_perm` (the separate 20th column) select which sub-chiplet owns +the current row. The remaining 19 columns (`chiplets[1..20]`) are a **union** +whose interpretation depends on which sub-chiplet is active. + +| Physical column(s) | Controller (`s_ctrl = 1`) | Permutation (`s_perm = 1`) | +|-------------------|---------------------------|----------------------------| +| `chiplets[0]` | `s_ctrl = 1` (controller gate) | `s_ctrl = 0` | +| `s_perm` | `s_perm = 0` | `s_perm = 1` (perm gate) | +| `chiplets[1]` | `s0` (input / output-or-pad) | `w0` (S-box witness) | +| `chiplets[2]` | `s1` (operation sub-selector) | `w1` (S-box witness) | +| `chiplets[3]` | `s2` (operation sub-selector) | `w2` (S-box witness) | +| `h0..h11` | Poseidon2 state `[RATE0, RATE1, CAPACITY]` | Poseidon2 state | +| `node_index` | Merkle node index | Request multiplicity | +| `mrupdate_id` | Domain separator for sibling table | Zero (enforced) | +| `is_boundary` | 1 on first/last controller row | Zero (enforced) | +| `direction_bit` | Merkle path direction bit | Zero (enforced) | The Poseidon2 state is stored in little-endian sponge order: @@ -68,39 +84,60 @@ The Poseidon2 state is stored in little-endian sponge order: `RATE0` (`h0..h3`) is always the digest word. +In the constraint code, the union layout is modeled by two typed column structs +`ControllerCols` and `PermutationCols` that overlay the same `chiplets[1..20]` +range with sub-chiplet-specific field names (see +`air/src/constraints/chiplets/columns.rs`). + ## Design invariants -The current hasher design relies on a few invariants +The current hasher design relies on a few invariants. + +- **`s_ctrl` / `s_perm` are the authoritative sub-chiplet discriminators.** + Controller rows have `s_ctrl = 1, s_perm = 0`; permutation rows have + `s_ctrl = 0, s_perm = 1`. Non-hasher rows have `s_ctrl = s_perm = 0`. The + tri-state constraints in `selectors.rs` enforce booleanity of each selector and + of their sum, so at most one fires on any row. On controller rows, `s0/s1/s2` + are interpreted as sub-selectors; on permutation rows the same physical + columns hold S-box witnesses. -- **`perm_seg` is the authoritative controller/permutation discriminator.** - When `perm_seg = 0`, the row is in the controller region and `s0/s1/s2` are interpreted as - controller selectors. When `perm_seg = 1`, the row is in the permutation segment and - `s0/s1/s2` are interpreted as witness columns, not selectors. +- **Trace ordering is enforced by selector transitions.** + The transitions `ctrl → ctrl | perm`, `perm → perm | s0`, and `s0 → s0` + guarantee that the controller section comes first, the permutation section + comes second, and any remaining chiplets follow in the `s0` region. - **Only controller rows participate in the external chiplets interface.** - The controller region is the only region that sends or receives hasher messages on - `b_chiplets`. The permutation segment is internal compute only. + The controller is the only sub-chiplet that sends or receives hasher messages + on `b_chiplets`. The permutation segment is internal compute only. - **Permutation cycles are aligned.** - Entering the permutation segment can happen only at packed cycle row `0`, and leaving the - hasher while still in the permutation segment can happen only at packed cycle row `15`. + Entering the permutation segment can happen only at packed cycle row `0`, and + leaving the hasher while still in the permutation segment can happen only at + packed cycle row `15`. These alignment constraints live in `permutation/mod.rs` + and use the precomputed `next_is_first` and `is_last` flags from + [`ChipletFlags`]. - **Multiplicity is cycle-wide.** - On permutation rows, `node_index` is repurposed as a multiplicity counter. It must stay - constant within a cycle so that one multiplicity is attached to the entire permutation. + On permutation rows, the column physically shared with `node_index` is + interpreted as a multiplicity counter. It must stay constant within a cycle + so that one multiplicity is attached to the entire permutation. - **Witness reuse is explicit.** - On packed internal rows, `s0/s1/s2` carry witness values for internal-round S-box outputs. - On row `11`, only `s0` is used as a witness. Unused witness slots are constrained to zero. + On packed internal rows, `(s0, s1, s2)` carry witness values for + internal-round S-box outputs (`w0, w1, w2`). On row `11`, only `w0` is used. + Unused witness slots are constrained to zero. Similarly, `mrupdate_id`, + `is_boundary`, and `direction_bit` are forced to zero on permutation rows so + they cannot leak controller-side meaning into the permutation gate. - **Merkle routing happens entirely in the controller region.** - Merkle-specific values (`node_index`, `direction_bit`, `mrupdate_id`) have controller - semantics only. The permutation segment does not carry Merkle routing meaning. + Merkle-specific values (`node_index`, `direction_bit`, `mrupdate_id`) have + controller semantics only. The permutation segment does not carry Merkle + routing meaning. - **Sibling-table balancing is partitioned by `mrupdate_id`.** - The old-path and new-path legs of a single `MRUPDATE` share the same `mrupdate_id`, and - different updates use different IDs. This prevents sibling entries from unrelated updates - from cancelling each other. + The old-path and new-path legs of a single `MRUPDATE` share the same + `mrupdate_id`, and different updates use different IDs. This prevents sibling + entries from unrelated updates from cancelling each other. ## Controller region @@ -199,20 +236,23 @@ The packed schedule uses the shared round-constant columns as follows: ### Witness columns on permutation rows -On permutation rows, `(s0, s1, s2)` hold witness values: +On permutation rows, `(s0, s1, s2)` — the same physical columns that hold +the hasher-internal sub-selectors on controller rows — hold witness values +`(w0, w1, w2)`: -- rows `4..10`: `s0, s1, s2` are the three S-box outputs for the packed internal - rounds, -- row `11`: `s0` is the S-box output for the final internal round, +- rows `4..10`: `w0, w1, w2` are the three S-box outputs for the packed + internal rounds, +- row `11`: `w0` is the S-box output for the final internal round, - all other permutation rows: unused witness slots are constrained to zero. -Reusing `s0/s1/s2` as witnesses keeps the packed internal rows within the degree-9 -budget. +Reusing these physical columns as witnesses keeps the packed internal rows +within the degree-9 budget. -Independently, `perm_seg` is the authoritative controller/permutation -discriminator: any consumer that interprets `s0/s1/s2` as selectors must first -gate on `perm_seg = 0` (equivalently, `controller_flag`). On permutation rows -these columns are witnesses, not selectors. +The chiplet-level selectors `s_ctrl` and `s_perm` are the authoritative +sub-chiplet discriminators: any consumer that needs to interpret the shared +columns as controller sub-selectors must first gate on `s_ctrl = 1`. The +constraint code does this by gating on `s_ctrl = 1` via the precomputed chiplet +selectors, while permutation rows access the same physical columns as witnesses. ## Buses @@ -270,21 +310,40 @@ that both legs use the same siblings. At a high level, the hasher AIR enforces: -- selector booleanity on controller rows, -- `perm_seg` confinement, booleanity, monotonicity, and cycle alignment, -- structural confinement of `is_boundary` and `direction_bit`, -- well-formed controller `(input, output)` pairing, +- chiplet tri-state selector partition and transition rules for `s_ctrl` and + `s_perm` (in `selectors.rs`, shared with other chiplets), +- `s0/s1/s2` sub-selector booleanity on controller rows, +- well-formed controller `(input, output)` pairing (adjacency, output + non-adjacency, padding stability, first-row boundary), +- structural confinement on both sub-chiplets: `is_boundary`, `direction_bit`, + and `mrupdate_id` are zero on permutation rows, and `is_boundary` / + `direction_bit` are boolean on controller rows (`mrupdate_id` is a free + integer counter whose only controller-side rule is the progression below), - packed Poseidon2 permutation transitions in the permutation segment, +- permutation cycle alignment (entry at cycle row 0, exit at cycle row 15) and + multiplicity constancy within a cycle, - capacity preservation across sponge continuation boundaries, -- Merkle index, routing, and capacity-zeroing rules, -- zero `mrupdate_id` on permutation rows and correct progression on controller rows. +- Merkle index decomposition, cross-step index continuity, direction-bit + forward propagation, digest routing, and capacity-zeroing rules, +- `mrupdate_id` progression on controller-to-controller transitions. -The high-degree Poseidon2 step constraints are gated by `perm_seg` and periodic -step selectors, keeping the overall degree within the system limit. +The high-degree Poseidon2 step constraints are gated by the degree-1 `s_perm` +selector and by periodic step selectors, which keeps the overall constraint +degree at the system's max of 9. ## Detailed constraint structure -The full set of constraints is in `air/src/constraints/chiplets/hasher/*`. +The full set of constraints is split across: + +- `air/src/constraints/chiplets/selectors.rs` — chiplet tri-state selector + system, booleanity, transition rules, precomputed `ChipletFlags`. +- `air/src/constraints/chiplets/hasher_control/` — controller sub-chiplet: + lifecycle, Merkle routing, capacity preservation, `mrupdate_id` progression. +- `air/src/constraints/chiplets/permutation/` — permutation sub-chiplet: cycle + alignment, multiplicity constancy, unused-column zeroing, packed Poseidon2 + step constraints. +- `air/src/constraints/chiplets/columns.rs` — `ControllerCols`, + `PermutationCols`, and `HasherPeriodicCols` definitions. This section does **not** attempt to describe every constraint. Instead, it records the key structural constraints and representative formulas that @@ -295,32 +354,41 @@ capture the key design decisions. The following formulas capture the most important structure of the current hasher AIR. -### Controller selectors, lifecycle, and `perm_seg` +### Controller selectors, lifecycle, and the tri-state selector system + +On **controller rows** (`s_ctrl = 1`), `s0/s1/s2` are ordinary sub-selectors. +On **permutation rows** (`s_perm = 1`), the same physical columns are witness +columns `w0/w1/w2`. The chiplet-level `s_ctrl` and `s_perm` are the authoritative +discriminators between the two sub-chiplets. -On **controller rows**, `s0/s1/s2` are ordinary selectors. On **permutation -rows**, they are witness columns. As a result, the AIR treats `perm_seg` as the -authoritative controller/permutation discriminator. +The tri-state selector system in `selectors.rs` enforces: -Concretely, the AIR enforces: +- booleanity of `s_ctrl`, `s_perm`, and their sum `s_ctrl + s_perm` (so at most + one can be 1 on any given row), +- transition rules: + - `s_ctrl = 1 → s_ctrl' + s_perm' = 1` (a controller row must be followed by + another controller row or the first permutation row), + - `s_perm = 1 → s_ctrl' = 0` (once in permutation, the hasher cannot return + to the controller), + - `s0 = 1 → s_ctrl' = 0 ∧ s_perm' = 0` (once in the non-hasher region, stay + there), +- a last-row invariant that forces `s_ctrl = s_perm = 0` on the final trace row, + so every chiplet's `is_active` flag vanishes there. -- `perm_seg` is binary, -- `perm_seg` can only be non-zero on hasher rows, -- once `perm_seg` becomes `1` inside the hasher region it cannot return to `0`, -- entering the permutation segment can happen only at packed cycle row `0`, -- exiting the hasher while still in the permutation segment can happen only at - packed cycle row `15`, -- `node_index` is constant on all non-boundary permutation rows, so a single - multiplicity is attached to the whole cycle. +Permutation cycle alignment (entry at cycle row 0, exit at cycle row 15) and +multiplicity constancy are enforced by the permutation sub-chiplet in +`permutation/mod.rs` using the precomputed `next_is_first` and `is_last` +flags from `ChipletFlags`. The first-row controller constraint is intentionally strong: ```text -s0 * (1 - perm_seg) = 1 +s_ctrl * s0 = 1 (on the first trace row) ``` -This forces the first hasher row to be a controller input row and prevents a -permutation row from masquerading as one by placing an arbitrary witness value in -`s0`. +This forces the first hasher row to be a controller *input* row (`s_ctrl = 1` +AND `s0 = 1`). Because `s0` is a witness column on permutation rows, this +also rules out a permutation row masquerading as the first row. The controller structure is then completed by: @@ -356,8 +424,8 @@ where `ark` is the row's external round-constant vector. #### 3. Rows 4-10: packed triples of internal rounds -These rows use `s0/s1/s2` as witnesses for the three internal-round S-box -outputs. If we define: +These rows use the shared physical columns `(s0, s1, s2)` as witnesses +`(w0, w1, w2)` for the three internal-round S-box outputs. If we define: - `y^(0) = h`, - `w_k = (y^(k)[0] + ark_k)^7` for `k in {0,1,2}`, @@ -368,12 +436,12 @@ then the row enforces: - three witness equations `w_k - (y^(k)[0] + ark_k)^7 = 0`, and - `h_next = y^(3)`. -This is the core packing idea, namely the witness equations carry the nonlinearity, -while the final next-state relation stays affine. +This is the core packing idea: the witness equations carry the nonlinearity, +while the final next-state relation stays affine in the trace columns. #### 4. Row 11: merged final internal round + first terminal external round -Row 11 uses only `s0` as a witness: +Row 11 uses only `w0` as a witness: ```text w0 = (h[0] + ARK_INT[21])^7 @@ -386,6 +454,11 @@ y = M_I(h with lane 0 replaced by w0) h_next = M_E(S(y + ark)) ``` +The internal round constant `ARK_INT[21]` is hard-coded in the constraint +rather than read from a periodic column: row 11 is the only row gated by +`is_int_ext`, so a periodic column would waste 15 zero slots to deliver one +value. + #### 5. Row 15: boundary / final state The final row of the packed cycle stores the final permutation output and has no @@ -393,15 +466,19 @@ next-state permutation-step constraint. ### Unused witness zeroing -Because `s0/s1/s2` are witnesses on permutation rows, the AIR also constrains -unused witness slots to zero: +Because the physical columns that hold `s0/s1/s2` on controller rows become +witnesses `w0/w1/w2` on permutation rows, the AIR constrains unused witness +slots to zero: - rows `0..3` and `12..15`: `w0 = w1 = w2 = 0`, - row `11`: `w1 = w2 = 0`. -These constraints are primarily defensive they make permutation rows maximally inert and reduce the -chance that some other selector consumer accidentally interprets witness values -as controller selectors. +Similarly, `mrupdate_id`, `is_boundary`, and `direction_bit` are forced to +zero on all permutation rows (see `PermutationCols::unused_padding()`). + +These constraints are primarily defensive: they make permutation rows inert +with respect to any constraint that might read the shared columns as if they +were controller sub-selectors or routing metadata. ### Sponge continuation capacity preservation @@ -427,15 +504,27 @@ The AIR enforces: idx = 2 * idx_next + direction_bit ``` -- direction-bit booleanity, -- continuity of the shifted index across non-final output -> next-input +- direction-bit booleanity on Merkle input rows, +- `direction_bit = 0` on sponge input rows and `HOUT` output rows (confinement), +- continuity of the shifted index across non-final output → next-input boundaries, - zero capacity on Merkle input rows, -- `node_index = 0` on digest-return (`HOUT`) rows. +- `node_index = 0` on sponge input rows and on digest-return (`HOUT`) rows. In addition, on non-final Merkle boundaries the output row carries the next -step's `direction_bit`, allowing the AIR to route the current digest into either -`RATE0` or `RATE1` of the next Merkle input row. +step's `direction_bit` (forward propagation), allowing the AIR to route the +current digest into either `RATE0` or `RATE1` of the next Merkle input row. + +A small degree optimization is used for the Merkle-next gate: instead of +computing the full `f_merkle_input_next` (degree 3) to detect that the next +row is a Merkle input, the routing constraints use a lightweight +`s1' + s2'` expression (degree 1) which is nonzero exactly on Merkle inputs +(`(0,1), (1,0), (1,1)`) and zero on sponge inputs. The non-unit value `2` +on MU rows is harmless because the constraint is gated by `on_output * (1 - +is_boundary)`, and the digest routing equation is linear in the gate. A +malicious prover cannot bypass routing by mislabeling a Merkle input as +sponge: the chiplets bus would then fire a sponge message with no matching +decoder request. ### `mrupdate_id` and sibling-table soundness @@ -510,33 +599,55 @@ sibling_word)`, unrelated updates cannot cancel each other. The hasher design is implemented across the following files: -- `air/src/constraints/chiplets/hasher/selectors.rs` - Controller structure, `perm_seg` rules, lifecycle, and padding constraints. +- `air/src/constraints/chiplets/selectors.rs` + Chiplet-level tri-state selector system (`s_ctrl`, `s_perm`, virtual `s0`, + `s1..s4`), booleanity, transition rules, last-row invariant, and precomputed + `ChipletFlags` (`is_active`, `is_transition`, `is_last`, `next_is_first`) for + every chiplet. -- `air/src/constraints/chiplets/hasher/state.rs` - Packed Poseidon2 transition constraints, witness usage, and unused-witness - zeroing rules. +- `air/src/constraints/chiplets/hasher_control/mod.rs` + Controller sub-chiplet entry point: first-row boundary, sub-selector + booleanity, input/output/padding adjacency, `mrupdate_id` progression, + RESPAN capacity preservation. -- `air/src/constraints/chiplets/hasher/merkle.rs` - Merkle index decomposition, continuity, routing, and zero-capacity rules. +- `air/src/constraints/chiplets/hasher_control/flags.rs` + Pre-computed `ControllerFlags` struct: sub-operation flags + (`on_sponge`, `on_merkle_input`, `on_hout`, `on_sout`, `on_padding`) and + next-row flags used by transition constraints. -- `air/src/constraints/chiplets/hasher/periodic.rs` - Packed 16-row schedule and periodic round-constant encoding. +- `air/src/constraints/chiplets/hasher_control/merkle.rs` + Merkle index decomposition, direction-bit booleanity/confinement/forward + propagation, zero-capacity rule for Merkle inputs, cross-step index + continuity, and digest routing. + +- `air/src/constraints/chiplets/permutation/mod.rs` + Permutation sub-chiplet entry point: Poseidon2 step gating, cycle alignment + (entry at row 0, exit at row 15), multiplicity constancy, and structural + zeroing of unused metadata columns. + +- `air/src/constraints/chiplets/permutation/state.rs` + Packed 16-row Poseidon2 transition constraints and unused-witness zeroing. + +- `air/src/constraints/chiplets/columns.rs` + `ControllerCols`, `PermutationCols`, and `HasherPeriodicCols` (including the + packed 16-row schedule and round-constant encoding). - `air/src/constraints/chiplets/bus/chiplets.rs` - Hasher messages visible to the rest of the VM. + Hasher messages visible to the rest of the VM via `b_chiplets`. - `air/src/constraints/chiplets/bus/wiring.rs` - Controller-to-permutation permutation-link relation on `v_wiring`. + Controller-to-permutation perm-link relation on the shared `v_wiring` + column. - `air/src/constraints/chiplets/bus/hash_kernel.rs` - Sibling-table and `log_precompile`-related hasher interactions. + Sibling-table balancing and `log_precompile`-related hasher interactions + on `b_hash_kernel`. - `processor/src/trace/chiplets/hasher/trace.rs` Trace generation for the controller and packed permutation segment. - `processor/src/trace/chiplets/aux_trace/hasher_perm.rs` - Auxiliary trace generation for the permutation-link running sum. + Auxiliary trace generation for the perm-link running sum. ## Soundness-critical design points @@ -557,12 +668,15 @@ A few aspects of the packed design are especially important: Implementation files: -- `air/src/constraints/chiplets/hasher/mod.rs` -- `air/src/constraints/chiplets/hasher/selectors.rs` -- `air/src/constraints/chiplets/hasher/state.rs` -- `air/src/constraints/chiplets/hasher/merkle.rs` -- `air/src/constraints/chiplets/hasher/periodic.rs` -- `processor/src/trace/chiplets/hasher/trace.rs` -- `processor/src/trace/chiplets/aux_trace/hasher_perm.rs` +- `air/src/constraints/chiplets/selectors.rs` +- `air/src/constraints/chiplets/columns.rs` +- `air/src/constraints/chiplets/hasher_control/mod.rs` +- `air/src/constraints/chiplets/hasher_control/flags.rs` +- `air/src/constraints/chiplets/hasher_control/merkle.rs` +- `air/src/constraints/chiplets/permutation/mod.rs` +- `air/src/constraints/chiplets/permutation/state.rs` - `air/src/constraints/chiplets/bus/chiplets.rs` - `air/src/constraints/chiplets/bus/wiring.rs` +- `air/src/constraints/chiplets/bus/hash_kernel.rs` +- `processor/src/trace/chiplets/hasher/trace.rs` +- `processor/src/trace/chiplets/aux_trace/hasher_perm.rs` diff --git a/processor/src/trace/chiplets/ace/mod.rs b/processor/src/trace/chiplets/ace/mod.rs index a41cf12237..70537ebd88 100644 --- a/processor/src/trace/chiplets/ace/mod.rs +++ b/processor/src/trace/chiplets/ace/mod.rs @@ -1,6 +1,8 @@ use alloc::{collections::BTreeMap, vec::Vec}; -use miden_air::trace::{Challenges, MainTrace, RowIndex, chiplets::ace::ACE_CHIPLET_NUM_COLS}; +use miden_air::trace::{ + Challenges, MainTrace, RowIndex, bus_types::ACE_WIRING_BUS, chiplets::ace::ACE_CHIPLET_NUM_COLS, +}; use miden_core::{Felt, ZERO, field::ExtensionField}; use crate::trace::TraceFragment; @@ -147,7 +149,10 @@ impl AceHints { ctx: u32, wire: [Felt; 3], ) -> E { - challenges.encode([Felt::from_u32(clk), Felt::from_u32(ctx), wire[0], wire[1], wire[2]]) + challenges.encode( + ACE_WIRING_BUS, + [Felt::from_u32(clk), Felt::from_u32(ctx), wire[0], wire[1], wire[2]], + ) } pub(crate) fn build_divisors>( diff --git a/processor/src/trace/chiplets/aux_trace/bus/ace.rs b/processor/src/trace/chiplets/aux_trace/bus/ace.rs index 69244fb693..c1fffd8ffe 100644 --- a/processor/src/trace/chiplets/aux_trace/bus/ace.rs +++ b/processor/src/trace/chiplets/aux_trace/bus/ace.rs @@ -1,6 +1,8 @@ use core::fmt::{Display, Formatter, Result as FmtResult}; -use miden_air::trace::{Challenges, MainTrace, RowIndex, chiplets::ace::ACE_INIT_LABEL}; +use miden_air::trace::{ + Challenges, MainTrace, RowIndex, bus_types::CHIPLETS_BUS, chiplets::ace::ACE_INIT_LABEL, +}; use miden_core::{Felt, ONE, field::ExtensionField}; use crate::debug::{BusDebugger, BusMessage}; @@ -100,14 +102,17 @@ where E: ExtensionField, { fn value(&self, challenges: &Challenges) -> E { - challenges.encode([ - self.op_label, - self.clk, - self.ctx, - self.ptr, - self.num_read_rows, - self.num_eval_rows, - ]) + challenges.encode( + CHIPLETS_BUS, + [ + self.op_label, + self.clk, + self.ctx, + self.ptr, + self.num_read_rows, + self.num_eval_rows, + ], + ) } fn source(&self) -> &str { diff --git a/processor/src/trace/chiplets/aux_trace/bus/bitwise.rs b/processor/src/trace/chiplets/aux_trace/bus/bitwise.rs index 628fba3361..de9783b282 100644 --- a/processor/src/trace/chiplets/aux_trace/bus/bitwise.rs +++ b/processor/src/trace/chiplets/aux_trace/bus/bitwise.rs @@ -1,7 +1,8 @@ use core::fmt::{Display, Formatter, Result as FmtResult}; use miden_air::trace::{ - Challenges, MainTrace, RowIndex, chiplets::bitwise::OP_CYCLE_LEN as BITWISE_OP_CYCLE_LEN, + Challenges, MainTrace, RowIndex, bus_types::CHIPLETS_BUS, + chiplets::bitwise::OP_CYCLE_LEN as BITWISE_OP_CYCLE_LEN, }; use miden_core::{Felt, ONE, ZERO, field::ExtensionField}; @@ -86,7 +87,7 @@ where E: ExtensionField, { fn value(&self, challenges: &Challenges) -> E { - challenges.encode([self.op_label, self.a, self.b, self.z]) + challenges.encode(CHIPLETS_BUS, [self.op_label, self.a, self.b, self.z]) } fn source(&self) -> &str { diff --git a/processor/src/trace/chiplets/aux_trace/bus/hasher.rs b/processor/src/trace/chiplets/aux_trace/bus/hasher.rs index 0535f7f071..4d83e92216 100644 --- a/processor/src/trace/chiplets/aux_trace/bus/hasher.rs +++ b/processor/src/trace/chiplets/aux_trace/bus/hasher.rs @@ -2,6 +2,7 @@ use core::fmt::{Display, Formatter, Result as FmtResult}; use miden_air::trace::{ Challenges, MainTrace, RowIndex, bus_message, + bus_types::CHIPLETS_BUS, chiplets::{ hasher, hasher::{ @@ -27,7 +28,7 @@ use crate::{ // // All hasher chiplet bus messages use a common encoding structure: // -// challenges.alpha = alpha (randomness base, accessed directly) +// challenges.bus_prefix[CHIPLETS_BUS] = alpha + 1*gamma (domain-separated base for this bus) // challenges.beta_powers[0] = beta^0 (label: transition type) // challenges.beta_powers[1] = beta^1 (addr: hasher chiplet address) // challenges.beta_powers[2] = beta^2 (node_index: Merkle path position, 0 for @@ -35,7 +36,8 @@ use crate::{ // challenges.beta_powers[3..10] = beta^3..beta^10 (state[0..7]: RATE0 || RATE1) // challenges.beta_powers[11..14] = beta^11..beta^14 (capacity[0..3]) // -// Message encoding: alpha + beta^0*label + beta^1*addr + beta^2*node_index +// Message encoding: bus_prefix[CHIPLETS_BUS] +// + beta^0*label + beta^1*addr + beta^2*node_index // + beta^3*state[0] + ... + beta^10*state[7] // + beta^11*capacity[0] + ... + beta^14*capacity[3] // @@ -69,7 +71,8 @@ fn word_to_hasher_state(word: &[Felt; WORD_SIZE]) -> [Felt; hasher::STATE_WIDTH] state } -/// Encodes hasher message as **alpha + ** +/// Encodes hasher message as **bus_prefix[CHIPLETS_BUS] + **. /// /// Used for tree operations (MPVERIFY, MRUPDATE) and generic hasher messages with node_index. #[inline(always)] @@ -83,7 +86,7 @@ fn hasher_message_value( where E: ExtensionField, { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * transition_label + challenges.beta_powers[bus_message::ADDR_IDX] * addr_next + challenges.beta_powers[bus_message::NODE_INDEX_IDX] * node_index; @@ -93,7 +96,8 @@ where acc } -/// Encodes hasher message as **alpha + ** (skips node_index). +/// Encodes hasher message as **bus_prefix[CHIPLETS_BUS] + ** +/// (skips node_index). #[inline(always)] fn header_rate_value( challenges: &Challenges, @@ -104,7 +108,7 @@ fn header_rate_value( where E: ExtensionField, { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * transition_label + challenges.beta_powers[bus_message::ADDR_IDX] * addr; for (i, &elem) in state.iter().enumerate() { @@ -113,8 +117,8 @@ where acc } -/// Encodes hasher message as **alpha + ** (skips node_index, digest -/// is RATE0 only). +/// Encodes hasher message as **bus_prefix[CHIPLETS_BUS] + ** +/// (skips node_index, digest is RATE0 only). #[inline(always)] fn header_digest_value( challenges: &Challenges, @@ -125,7 +129,7 @@ fn header_digest_value( where E: ExtensionField, { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * transition_label + challenges.beta_powers[bus_message::ADDR_IDX] * addr; for (i, &elem) in digest.iter().enumerate() { @@ -547,26 +551,28 @@ where E: ExtensionField, { // Permutation segment rows never produce chiplets bus responses. - if main_trace.chiplet_perm_seg(row) == ONE { + if main_trace.chiplet_s_perm(row) == ONE { return E::ONE; } // --- Precompute common values ----------------------------------------------- - let selector0 = main_trace.chiplet_selector_0(row); let selector1 = main_trace.chiplet_selector_1(row); let selector2 = main_trace.chiplet_selector_2(row); let selector3 = main_trace.chiplet_selector_3(row); - let op_label = get_op_label(selector0, selector1, selector2, selector3); + // Hasher labels are computed with s0=0 (the old chiplet-level selector for hasher). + // chiplet_selector_0 is now s_ctrl (1 on controller rows), but labels encode + // [0, s0, s1, s2] to match the label constants defined in hasher.rs. + let op_label = get_op_label(ZERO, selector1, selector2, selector3); let addr_next = Felt::from(row + 1); let state = main_trace.chiplet_hasher_state(row); let node_index = main_trace.chiplet_node_index(row); // Hasher-internal selectors (not chiplet-level selectors). // chiplet selector1 = hasher s0, selector2 = hasher s1, selector3 = hasher s2. - let hs0 = selector1; - let hs1 = selector2; - let hs2 = selector3; + let s0 = selector1; + let s1 = selector2; + let s2 = selector3; let is_boundary = main_trace.chiplet_is_boundary(row); @@ -582,7 +588,7 @@ where // The branches below are mutually exclusive. Each either returns a non-identity // response or falls through to return E::ONE (identity = no response). - if hs0 == ONE && hs1 == ZERO && hs2 == ZERO && is_boundary == ONE { + if s0 == ONE && s1 == ZERO && s2 == ZERO && is_boundary == ONE { // Sponge start (LINEAR_HASH, is_boundary=1): full 12-element state. // Matches SPAN / control block start request. let label = op_label + LABEL_OFFSET_START; @@ -599,7 +605,7 @@ where _debugger.add_response(alloc::boxed::Box::new(msg), challenges); value - } else if hs0 == ONE && hs1 == ZERO && hs2 == ZERO { + } else if s0 == ONE && s1 == ZERO && s2 == ZERO { // Sponge continuation (LINEAR_HASH, is_boundary=0): rate-only message. // Label uses OUTPUT_LABEL_OFFSET because the decoder's RESPAN request uses // LINEAR_HASH_LABEL + 32. @@ -619,7 +625,7 @@ where } value - } else if hs0 == ONE && (hs1 == ONE || hs2 == ONE) && is_boundary == ONE { + } else if s0 == ONE && (s1 == ONE || s2 == ONE) && is_boundary == ONE { // Tree start (MP_VERIFY / MR_UPDATE_OLD / MR_UPDATE_NEW, is_boundary=1): leaf word // selected by direction bit. Matches MPVERIFY / MRUPDATE first-input request. // Tree continuation inputs (is_boundary=0) produce no response. @@ -648,7 +654,7 @@ where } value - } else if hs0 == ZERO && hs1 == ZERO && hs2 == ZERO { + } else if s0 == ZERO && s1 == ZERO && s2 == ZERO { // HOUT -- RETURN_HASH (0,0,0): digest-only response. // Matches END / MPVERIFY output / MRUPDATE output. let label = op_label + LABEL_OFFSET_END; @@ -667,7 +673,7 @@ where } value - } else if hs0 == ZERO && hs1 == ZERO && hs2 == ONE && is_boundary == ONE { + } else if s0 == ZERO && s1 == ZERO && s2 == ONE && is_boundary == ONE { // SOUT final -- RETURN_STATE (0,0,1) with is_boundary=1: full 12-element state. // Matches HPERM output request. Intermediate SOUT (is_boundary=0) produces no response. let label = op_label + LABEL_OFFSET_END; @@ -685,7 +691,7 @@ where value } else { - // No response: padding rows (hs0=0, hs1=1), tree continuations (is_boundary=0), + // No response: padding rows (s0=0, s1=1), tree continuations (is_boundary=0), // intermediate SOUT (is_boundary=0), or any other non-responding row. E::ONE } @@ -704,8 +710,8 @@ impl BusMessage for ControlBlockRequestMessage where E: ExtensionField, { - /// Encodes as **alpha + ** (skips - /// node_index). + /// Encodes as **bus_prefix[CHIPLETS_BUS] + ** (skips node_index). fn value(&self, challenges: &Challenges) -> E { // Header + rate portion + capacity domain element for op_code let mut acc = header_rate_value( diff --git a/processor/src/trace/chiplets/aux_trace/bus/kernel.rs b/processor/src/trace/chiplets/aux_trace/bus/kernel.rs index 0455b292f6..a366c612b6 100644 --- a/processor/src/trace/chiplets/aux_trace/bus/kernel.rs +++ b/processor/src/trace/chiplets/aux_trace/bus/kernel.rs @@ -2,6 +2,7 @@ use core::fmt::{Display, Formatter, Result as FmtResult}; use miden_air::trace::{ Challenges, MainTrace, RowIndex, + bus_types::CHIPLETS_BUS, chiplets::kernel_rom::{KERNEL_PROC_CALL_LABEL, KERNEL_PROC_INIT_LABEL}, }; use miden_core::{Felt, field::ExtensionField}; @@ -74,13 +75,16 @@ where { #[inline(always)] fn value(&self, challenges: &Challenges) -> E { - challenges.encode([ - KERNEL_PROC_CALL_LABEL, - self.kernel_proc_digest[0], - self.kernel_proc_digest[1], - self.kernel_proc_digest[2], - self.kernel_proc_digest[3], - ]) + challenges.encode( + CHIPLETS_BUS, + [ + KERNEL_PROC_CALL_LABEL, + self.kernel_proc_digest[0], + self.kernel_proc_digest[1], + self.kernel_proc_digest[2], + self.kernel_proc_digest[3], + ], + ) } fn source(&self) -> &str { @@ -106,13 +110,16 @@ where { #[inline(always)] fn value(&self, challenges: &Challenges) -> E { - challenges.encode([ - KERNEL_PROC_INIT_LABEL, - self.kernel_proc_digest[0], - self.kernel_proc_digest[1], - self.kernel_proc_digest[2], - self.kernel_proc_digest[3], - ]) + challenges.encode( + CHIPLETS_BUS, + [ + KERNEL_PROC_INIT_LABEL, + self.kernel_proc_digest[0], + self.kernel_proc_digest[1], + self.kernel_proc_digest[2], + self.kernel_proc_digest[3], + ], + ) } fn source(&self) -> &str { diff --git a/processor/src/trace/chiplets/aux_trace/bus/memory.rs b/processor/src/trace/chiplets/aux_trace/bus/memory.rs index bd179571ac..52c7941b93 100644 --- a/processor/src/trace/chiplets/aux_trace/bus/memory.rs +++ b/processor/src/trace/chiplets/aux_trace/bus/memory.rs @@ -2,6 +2,7 @@ use core::fmt::{Display, Formatter, Result as FmtResult}; use miden_air::trace::{ Challenges, MainTrace, RowIndex, + bus_types::CHIPLETS_BUS, chiplets::{ ace::{ACE_INSTRUCTION_ID1_OFFSET, ACE_INSTRUCTION_ID2_OFFSET}, memory::{ @@ -601,16 +602,19 @@ where E: ExtensionField, { fn value(&self, challenges: &Challenges) -> E { - challenges.encode([ - self.op_label, - self.ctx, - self.addr, - self.clk, - self.word[0], - self.word[1], - self.word[2], - self.word[3], - ]) + challenges.encode( + CHIPLETS_BUS, + [ + self.op_label, + self.ctx, + self.addr, + self.clk, + self.word[0], + self.word[1], + self.word[2], + self.word[3], + ], + ) } fn source(&self) -> &str { @@ -641,7 +645,8 @@ where E: ExtensionField, { fn value(&self, challenges: &Challenges) -> E { - challenges.encode([self.op_label, self.ctx, self.addr, self.clk, self.element]) + challenges + .encode(CHIPLETS_BUS, [self.op_label, self.ctx, self.addr, self.clk, self.element]) } fn source(&self) -> &str { diff --git a/processor/src/trace/chiplets/aux_trace/bus/mod.rs b/processor/src/trace/chiplets/aux_trace/bus/mod.rs index a222f0a5ae..ced7ba4977 100644 --- a/processor/src/trace/chiplets/aux_trace/bus/mod.rs +++ b/processor/src/trace/chiplets/aux_trace/bus/mod.rs @@ -15,6 +15,7 @@ use memory::{ }; use miden_air::trace::{ Challenges, MainTrace, RowIndex, + bus_types::CHIPLETS_BUS, chiplets::{ hasher::LINEAR_HASH_LABEL, memory::{ @@ -184,7 +185,7 @@ where { use miden_air::trace::bus_message; - challenges.alpha + challenges.bus_prefix[CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(LINEAR_HASH_LABEL + 16) + challenges.beta_powers[bus_message::ADDR_IDX] * addr + challenges.beta_powers[bus_message::CAPACITY_DOMAIN_IDX] * op_code diff --git a/processor/src/trace/chiplets/aux_trace/hasher_perm.rs b/processor/src/trace/chiplets/aux_trace/hasher_perm.rs index 1421f0431d..44f87de089 100644 --- a/processor/src/trace/chiplets/aux_trace/hasher_perm.rs +++ b/processor/src/trace/chiplets/aux_trace/hasher_perm.rs @@ -10,15 +10,11 @@ use alloc::vec::Vec; use miden_air::trace::{ - Challenges, MainTrace, RowIndex, - chiplets::hasher::{HASH_CYCLE_LEN, STATE_WIDTH}, + Challenges, MainTrace, RowIndex, bus_types::HASHER_PERM_LINK, chiplets::hasher::HASH_CYCLE_LEN, }; use miden_core::{Felt, field::ExtensionField}; -/// Labels for domain-separating input vs output perm-link messages. -/// -/// TODO: These naive labels (0 and 1) risk collisions with other messages on the shared -/// v_wiring column (ACE wiring and memory range checks). Revisit when refactoring the buses. +/// Labels that distinguish input vs output perm-link messages within the `HASHER_PERM_LINK` bus. const LABEL_IN: Felt = Felt::ZERO; const LABEL_OUT: Felt = Felt::ONE; @@ -49,17 +45,19 @@ pub fn build_perm_link_running_sum>( continue; } - let perm_seg = main_trace.chiplet_perm_seg(row); - let hs1 = main_trace.chiplet_selector_1(row); - let hs2 = main_trace.chiplet_selector_2(row); + let s_perm = main_trace.chiplet_s_perm(row); + // Hasher-internal sub-selectors (only meaningful on controller rows): + // s0 = chiplets[1] (input flag), s1 = chiplets[2]. + let s0 = main_trace.chiplet_selector_1(row); + let s1 = main_trace.chiplet_selector_2(row); - if perm_seg == Felt::ZERO { + if s_perm == Felt::ZERO { // Controller region - if hs1 == Felt::ONE { + if s0 == Felt::ONE { // Controller input row: +1/msg_in let msg_in = encode_perm_link_message(main_trace, row, challenges, LABEL_IN); running_sum[row_idx + 1] = running_sum[row_idx] + msg_in.inverse(); - } else if hs1 == Felt::ZERO && hs2 == Felt::ZERO { + } else if s0 == Felt::ZERO && s1 == Felt::ZERO { // Controller output row (RETURN_HASH or RETURN_STATE with s0=0, s1=0): +1/msg_out let msg_out = encode_perm_link_message(main_trace, row, challenges, LABEL_OUT); running_sum[row_idx + 1] = running_sum[row_idx] + msg_out.inverse(); @@ -99,9 +97,7 @@ pub fn build_perm_link_running_sum>( running_sum } -/// Encodes a perm-link message: `challenges.encode([label, h0, h1, ..., h11])`. -/// -/// The message includes a domain-separation label and the full 12-element hasher state. +/// Encodes a perm-link message on the dedicated `HASHER_PERM_LINK` bus: `[label, h0, ..., h11]`. fn encode_perm_link_message>( main_trace: &MainTrace, row: RowIndex, @@ -109,8 +105,11 @@ fn encode_perm_link_message>( label: Felt, ) -> E { let state = main_trace.chiplet_hasher_state(row); - let mut elems = [Felt::ZERO; 1 + STATE_WIDTH]; - elems[0] = label; - elems[1..].copy_from_slice(&state); - challenges.encode(elems) + challenges.encode( + HASHER_PERM_LINK, + [ + label, state[0], state[1], state[2], state[3], state[4], state[5], state[6], state[7], + state[8], state[9], state[10], state[11], + ], + ) } diff --git a/processor/src/trace/chiplets/aux_trace/virtual_table.rs b/processor/src/trace/chiplets/aux_trace/virtual_table.rs index d4161ad064..b6a9d87767 100644 --- a/processor/src/trace/chiplets/aux_trace/virtual_table.rs +++ b/processor/src/trace/chiplets/aux_trace/virtual_table.rs @@ -1,5 +1,6 @@ use miden_air::trace::{ Challenges, LOG_PRECOMPILE_LABEL, MainTrace, RowIndex, + bus_types::{LOG_PRECOMPILE_TRANSCRIPT, SIBLING_TABLE}, chiplets::hasher::DIGEST_LEN, log_precompile::{HELPER_CAP_PREV_RANGE, STACK_CAP_NEXT_RANGE}, }; @@ -128,8 +129,11 @@ fn encode_sibling_from_trace>( // Node is right child, sibling is left child at RATE0 (SIBLING_RATE0_LAYOUT, &state[RATE0_RANGE]) }; - challenges - .encode_sparse(layout, [mrupdate_id, index, sibling[0], sibling[1], sibling[2], sibling[3]]) + challenges.encode_sparse( + SIBLING_TABLE, + layout, + [mrupdate_id, index, sibling[0], sibling[1], sibling[2], sibling[3]], + ) } /// Constructs the removals from the table for MU (new path) controller input rows. @@ -177,13 +181,16 @@ where { fn value(&self, challenges: &Challenges) -> E { let state_elements: [Felt; 4] = self.state.into(); - challenges.encode([ - Felt::from_u8(LOG_PRECOMPILE_LABEL), - state_elements[0], - state_elements[1], - state_elements[2], - state_elements[3], - ]) + challenges.encode( + LOG_PRECOMPILE_TRANSCRIPT, + [ + Felt::from_u8(LOG_PRECOMPILE_LABEL), + state_elements[0], + state_elements[1], + state_elements[2], + state_elements[3], + ], + ) } fn source(&self) -> &str { diff --git a/processor/src/trace/chiplets/aux_trace/wiring_bus.rs b/processor/src/trace/chiplets/aux_trace/wiring_bus.rs index 54eb16f724..11493c3602 100644 --- a/processor/src/trace/chiplets/aux_trace/wiring_bus.rs +++ b/processor/src/trace/chiplets/aux_trace/wiring_bus.rs @@ -72,9 +72,10 @@ impl<'a> WiringBusBuilder<'a> { assert_eq!(wiring_bus[trace_offset], E::ZERO); // Build memory range check LogUp requests as a running sum, then merge into wiring_bus. - // For each memory row, subtract 1/(alpha+w0) + 1/(alpha+w1) + 1/(alpha+4*w1). - // The range checker provides matching responses. - let alpha = challenges.alpha; + // For each memory row, subtract 1/(alpha_rc+w0) + 1/(alpha_rc+w1) + 1/(alpha_rc+4*w1). + // Must use bus_prefix[RANGE_CHECK_BUS] to match the range checker's encoding. + use miden_air::trace::bus_types::RANGE_CHECK_BUS; + let alpha = challenges.bus_prefix[RANGE_CHECK_BUS]; let mut mem_prefix = vec![E::ZERO; main_trace.num_rows()]; for row_idx in 0..(main_trace.num_rows() - 1) { let row: RowIndex = (row_idx as u32).into(); diff --git a/processor/src/trace/chiplets/hasher/mod.rs b/processor/src/trace/chiplets/hasher/mod.rs index adc500e089..ff19e86c79 100644 --- a/processor/src/trace/chiplets/hasher/mod.rs +++ b/processor/src/trace/chiplets/hasher/mod.rs @@ -47,11 +47,11 @@ fn key_to_state(key: &StateKey) -> HasherState { /// /// This component uses a controller/permutation split architecture: /// -/// - **Controller region** (perm_seg=0): pairs of (input, output) rows for each permutation -/// request. Input rows (s0=1) capture the operation type and pre-permutation state. Output rows -/// (s0=0, s1=0) capture the post-permutation state. +/// - **Controller region** (s_perm=0): pairs of (input, output) rows for each permutation request. +/// Input rows (s0=1) capture the operation type and pre-permutation state. Output rows (s0=0, +/// s1=0) capture the post-permutation state. /// -/// - **Permutation segment** (perm_seg=1): one 16-row Poseidon2 cycle per unique input state. +/// - **Permutation segment** (s_perm=1): one 16-row Poseidon2 cycle per unique input state. /// Multiplicity is stored in the node_index column. Linked to controller rows via the hasher_perm /// LogUp bus. /// @@ -60,7 +60,7 @@ fn key_to_state(key: &StateKey) -> HasherState { /// /// ## Trace layout (20 columns) /// -/// s0 s1 s2 h0..h11 idx mrupdate_id is_boundary direction_bit perm_seg +/// s0 s1 s2 h0..h11 idx mrupdate_id is_boundary direction_bit s_perm /// ├────┴───┴───┴────────┴────┴────────────┴─────────┴─────────┴────────┤ #[derive(Debug, Default)] pub struct Hasher { @@ -93,18 +93,26 @@ impl Hasher { } } + /// Returns the layout of the hasher region as `(controller_len, perm_len)`, both exact + /// multiples of `HASH_CYCLE_LEN`. Must be called before `fill_trace()` consumes the hasher. + /// + /// `controller_len` includes the padding rows that `finalize_trace()` will later append to + /// round the raw controller count up to a cycle boundary; `perm_len` is the total span of + /// the permutation cycles that `finalize_trace()` will emit, one per unique input state. + pub(super) fn region_lengths(&self) -> (usize, usize) { + debug_assert!(!self.finalized, "region_lengths must be called before finalization"); + let controller_len = self.trace.trace_len().next_multiple_of(HASH_CYCLE_LEN); + let perm_len = self.perm_request_map.len() * HASH_CYCLE_LEN; + (controller_len, perm_len) + } + /// Estimates the total trace length before finalization. /// /// This must match the actual length produced by `finalize_trace()`. The invariant is /// verified by a debug assertion in `fill_trace()`. fn estimate_trace_len(&self) -> usize { - let controller_len = self.trace.trace_len(); - let padding = { - let remainder = controller_len % HASH_CYCLE_LEN; - if remainder == 0 { 0 } else { HASH_CYCLE_LEN - remainder } - }; - let perm_len = self.perm_request_map.len() * HASH_CYCLE_LEN; - controller_len + padding + perm_len + let (controller_len, perm_len) = self.region_lengths(); + controller_len + perm_len } // HASHING METHODS diff --git a/processor/src/trace/chiplets/hasher/tests.rs b/processor/src/trace/chiplets/hasher/tests.rs index 2e3d6ea037..7ee92c16d1 100644 --- a/processor/src/trace/chiplets/hasher/tests.rs +++ b/processor/src/trace/chiplets/hasher/tests.rs @@ -2,7 +2,7 @@ use alloc::vec::Vec; use miden_air::trace::chiplets::hasher::{ DIRECTION_BIT_COL_IDX, HASH_CYCLE_LEN, IS_BOUNDARY_COL_IDX, MRUPDATE_ID_COL_IDX, - NODE_INDEX_COL_IDX, PERM_SEG_COL_IDX, STATE_COL_RANGE, TRACE_WIDTH, + NODE_INDEX_COL_IDX, S_PERM_COL_IDX, STATE_COL_RANGE, TRACE_WIDTH, }; use miden_core::{ ONE, ZERO, @@ -40,9 +40,9 @@ fn hasher_permute() { // Total hasher rows: 32. assert_eq!(trace[0].len(), 2 * HASH_CYCLE_LEN); - // Row 0: input (LINEAR_HASH, is_boundary=1, perm_seg=0) + // Row 0: input (LINEAR_HASH, is_boundary=1, s_perm=0) check_controller_input(&trace, 0, LINEAR_HASH, &init_state, ZERO, ONE, ZERO, ZERO); - // Row 1: output (RETURN_STATE, is_boundary=1, perm_seg=0) + // Row 1: output (RETURN_STATE, is_boundary=1, s_perm=0) check_controller_output(&trace, 1, RETURN_STATE, &expected_state, ZERO, ONE, ZERO); // Perm segment starts at row 16 (after padding) @@ -221,9 +221,9 @@ fn perm_segment_structure() { // Perm segment starts at HASH_CYCLE_LEN (after padding) let perm_start = HASH_CYCLE_LEN; - // All perm rows have perm_seg=1 + // All perm rows have s_perm=1 for row in perm_start..perm_start + HASH_CYCLE_LEN { - assert_eq!(trace[PERM_SEG_COL_IDX][row], ONE, "perm_seg should be 1 at row {row}"); + assert_eq!(trace[S_PERM_COL_IDX][row], ONE, "s_perm should be 1 at row {row}"); } // On perm rows, s0/s1/s2 serve as witness columns for packed internal rounds. @@ -563,10 +563,7 @@ fn check_controller_input( assert_eq!(trace[NODE_INDEX_COL_IDX][row], node_index, "node_index at row {row}"); assert_eq!(trace[IS_BOUNDARY_COL_IDX][row], is_boundary, "is_boundary at row {row}"); assert_eq!(trace[DIRECTION_BIT_COL_IDX][row], direction_bit, "direction_bit at row {row}"); - assert_eq!( - trace[PERM_SEG_COL_IDX][row], ZERO, - "perm_seg should be 0 on controller row {row}" - ); + assert_eq!(trace[S_PERM_COL_IDX][row], ZERO, "s_perm should be 0 on controller row {row}"); assert_eq!(trace[MRUPDATE_ID_COL_IDX][row], mrupdate_id, "mrupdate_id at row {row}"); } @@ -591,10 +588,7 @@ fn check_controller_output( assert_eq!(trace[NODE_INDEX_COL_IDX][row], node_index, "node_index at row {row}"); assert_eq!(trace[IS_BOUNDARY_COL_IDX][row], is_boundary, "is_boundary at row {row}"); assert_eq!(trace[DIRECTION_BIT_COL_IDX][row], direction_bit, "direction_bit at row {row}"); - assert_eq!( - trace[PERM_SEG_COL_IDX][row], ZERO, - "perm_seg should be 0 on controller row {row}" - ); + assert_eq!(trace[S_PERM_COL_IDX][row], ZERO, "s_perm should be 0 on controller row {row}"); } /// Checks both the input and output rows of a Merkle controller pair. @@ -603,7 +597,7 @@ fn check_controller_output( /// - Input row (`input_row`): has `input_selectors`, `node_index`, `is_boundary_input` flag. /// - Output row (`input_row + 1`): has `node_index >> 1`, `is_boundary_output` flag. /// -/// Both rows must have `perm_seg=0` and the given `mrupdate_id`. +/// Both rows must have `s_perm=0` and the given `mrupdate_id`. fn check_merkle_controller_pair( trace: &[Vec], input_row: usize, @@ -619,7 +613,7 @@ fn check_merkle_controller_pair( let is_boundary_input_felt = if is_boundary_input { ONE } else { ZERO }; let is_boundary_output_felt = if is_boundary_output { ONE } else { ZERO }; - // Input row: selectors, node_index, is_boundary, direction_bit, perm_seg=0 + // Input row: selectors, node_index, is_boundary, direction_bit, s_perm=0 assert_eq!(trace[0][input_row], input_selectors[0], "s0 at input row {input_row}"); assert_eq!(trace[1][input_row], input_selectors[1], "s1 at input row {input_row}"); assert_eq!(trace[2][input_row], input_selectors[2], "s2 at input row {input_row}"); @@ -636,13 +630,13 @@ fn check_merkle_controller_pair( trace[DIRECTION_BIT_COL_IDX][input_row], input_direction_bit, "direction_bit at input row {input_row}" ); - assert_eq!(trace[PERM_SEG_COL_IDX][input_row], ZERO, "perm_seg at input row {input_row}"); + assert_eq!(trace[S_PERM_COL_IDX][input_row], ZERO, "s_perm at input row {input_row}"); assert_eq!( trace[MRUPDATE_ID_COL_IDX][input_row], mrupdate_id, "mrupdate_id at input row {input_row}" ); - // Output row: node_index >> 1, is_boundary, direction_bit, perm_seg=0 + // Output row: node_index >> 1, is_boundary, direction_bit, s_perm=0 assert_eq!( trace[NODE_INDEX_COL_IDX][output_row], Felt::new(node_index >> 1), @@ -656,7 +650,7 @@ fn check_merkle_controller_pair( trace[DIRECTION_BIT_COL_IDX][output_row], output_direction_bit, "direction_bit at output row {output_row}" ); - assert_eq!(trace[PERM_SEG_COL_IDX][output_row], ZERO, "perm_seg at output row {output_row}"); + assert_eq!(trace[S_PERM_COL_IDX][output_row], ZERO, "s_perm at output row {output_row}"); assert_eq!( trace[MRUPDATE_ID_COL_IDX][output_row], mrupdate_id, "mrupdate_id at output row {output_row}" @@ -694,7 +688,7 @@ fn check_perm_segment( ); } assert_eq!(trace[NODE_INDEX_COL_IDX][start_row], expected_multiplicity); - assert_eq!(trace[PERM_SEG_COL_IDX][start_row], ONE); + assert_eq!(trace[S_PERM_COL_IDX][start_row], ONE); // Apply init+ext1, check row 1 Hasher::apply_matmul_external(&mut state); @@ -818,10 +812,10 @@ fn check_memoized_trace( "direction_bit mismatch: original row {orig_row} vs copied row {copy_row}" ); - // perm_seg should be 0 on all controller rows + // s_perm should be 0 on all controller rows assert_eq!( - trace[PERM_SEG_COL_IDX][copy_row], ZERO, - "perm_seg should be 0 on copied controller row {copy_row}" + trace[S_PERM_COL_IDX][copy_row], ZERO, + "s_perm should be 0 on copied controller row {copy_row}" ); } } diff --git a/processor/src/trace/chiplets/hasher/trace.rs b/processor/src/trace/chiplets/hasher/trace.rs index e58a2cedd6..36f1d2619d 100644 --- a/processor/src/trace/chiplets/hasher/trace.rs +++ b/processor/src/trace/chiplets/hasher/trace.rs @@ -19,11 +19,11 @@ use super::{Felt, HasherState, ONE, STATE_WIDTH, Selectors, TraceFragment, ZERO} /// - 1 mrupdate_id column (domain separator for sibling table). /// - 1 is_boundary column (1 on boundary rows: first input or last output, 0 otherwise). /// - 1 direction_bit column (Merkle direction bit on controller rows, 0 elsewhere). -/// - 1 perm_seg column (0 = controller region, 1 = permutation segment). +/// - 1 s_perm column (0 = controller region, 1 = permutation segment). /// /// The trace is divided into two regions: -/// - Controller region (perm_seg=0): pairs of (input, output) rows per permutation request. -/// - Permutation segment (perm_seg=1): one 16-row cycle per unique input state. +/// - Controller region (s_perm=0): pairs of (input, output) rows per permutation request. +/// - Permutation segment (s_perm=1): one 16-row cycle per unique input state. #[derive(Debug, Default)] pub struct HasherTrace { selectors: [Vec; 3], @@ -32,7 +32,7 @@ pub struct HasherTrace { mrupdate_id: Vec, is_boundary: Vec, direction_bit: Vec, - perm_seg: Vec, + s_perm: Vec, } impl HasherTrace { @@ -76,7 +76,7 @@ impl HasherTrace { self.mrupdate_id.push(mrupdate_id); self.is_boundary.push(is_boundary); self.direction_bit.push(direction_bit); - self.perm_seg.push(ZERO); + self.s_perm.push(ZERO); } // PERMUTATION SEGMENT METHODS @@ -151,7 +151,7 @@ impl HasherTrace { self.append_perm_row_with_witnesses(&state, multiplicity, [ZERO; 3]); } - /// Appends a single permutation segment row (perm_seg = 1). + /// Appends a single permutation segment row (s_perm = 1). /// /// On permutation rows, `s0, s1, s2` serve as witness columns for packed internal /// rounds. The `witnesses` array provides values to write into these columns. @@ -172,7 +172,7 @@ impl HasherTrace { self.mrupdate_id.push(ZERO); self.is_boundary.push(ZERO); self.direction_bit.push(ZERO); - self.perm_seg.push(ONE); + self.s_perm.push(ONE); } /// Appends padding rows to fill the controller region to a multiple of HASH_CYCLE_LEN. @@ -182,7 +182,7 @@ impl HasherTrace { /// non-MV-start transitions). pub fn pad_to_cycle_boundary(&mut self, mrupdate_id: Felt) { // Padding selectors: [0, 1, 0]. This combination is unused in the controller region - // (s0=0, s1=1 only appears in perm segment rows which have perm_seg=1). Using it + // (s0=0, s1=1 only appears in perm segment rows which have s_perm=1). Using it // prevents padding rows from being mistaken for HOUT output rows ([0,0,0]) by the // bus response builder. let padding_selectors = [ZERO, ONE, ZERO]; @@ -208,13 +208,13 @@ impl HasherTrace { /// Collects input states from controller input rows in the given range. /// - /// A controller input row is identified by s0 == ONE and perm_seg == ZERO. + /// A controller input row is identified by s0 == ONE and s_perm == ZERO. /// Returns the hasher state for each such row. pub fn input_states_in_range(&self, range: Range) -> Vec { let mut states = Vec::new(); for row in range { - // Controller input row: s0 = ONE and perm_seg = ZERO - if self.selectors[0][row] == ONE && self.perm_seg[row] == ZERO { + // Controller input row: s0 = ONE and s_perm = ZERO + if self.selectors[0][row] == ONE && self.s_perm[row] == ZERO { let mut state = [ZERO; STATE_WIDTH]; for (col, hasher) in self.hasher_state.iter().enumerate() { state[col] = hasher[row]; @@ -238,7 +238,7 @@ impl HasherTrace { self.mrupdate_id.extend_from_within(range.clone()); self.is_boundary.extend_from_within(range.clone()); self.direction_bit.extend_from_within(range.clone()); - self.perm_seg.extend_from_within(range.clone()); + self.s_perm.extend_from_within(range.clone()); // copy the latest hasher state to the provided state slice for (col, hasher) in self.hasher_state.iter().enumerate() { @@ -268,7 +268,7 @@ impl HasherTrace { columns.push(self.mrupdate_id); columns.push(self.is_boundary); columns.push(self.direction_bit); - columns.push(self.perm_seg); + columns.push(self.s_perm); for (out_column, column) in trace.columns().zip(columns) { out_column.copy_from_slice(&column); diff --git a/processor/src/trace/chiplets/mod.rs b/processor/src/trace/chiplets/mod.rs index 77f9c912d4..a61cf0699a 100644 --- a/processor/src/trace/chiplets/mod.rs +++ b/processor/src/trace/chiplets/mod.rs @@ -48,98 +48,88 @@ pub struct ChipletsTrace { /// and kernel ROM chiplets and is responsible for building a final execution trace from their /// stacked execution traces and chiplet selectors. /// -/// The module's trace can be thought of as 6 stacked segments in the following form: +/// The module's trace can be thought of as 6 stacked segments in the following form. /// -/// * Hasher segment: contains the trace and selector for the hasher chiplet. This segment fills the -/// first rows of the trace up to the length of the hasher `trace_len`. -/// - column 0: selector column with values set to ZERO -/// - columns 1-20: execution trace of hash chiplet +/// The chiplet system uses two physical selector columns (`s_ctrl = column 0` and +/// `s_perm = column 20`) plus the virtual `s0 = 1 - (s_ctrl + s_perm)` to partition +/// rows into three top-level regions. Columns 1-4 (`s1..s4`) subdivide the `s0` region. /// -/// * Bitwise segment: contains the trace and selectors for the bitwise chiplet. This segment begins -/// at the end of the hasher segment and fills the next rows of the trace for the `trace_len` of -/// the bitwise chiplet. -/// - column 0: selector column with values set to ONE -/// - column 1: selector column with values set to ZERO +/// * Hasher segment: fills the first rows of the trace up to the hasher `trace_len`. Split into +/// controller (s_ctrl=1, s_perm=0) and permutation (s_ctrl=0, s_perm=1) sub-regions. +/// - column 0 (s_ctrl): 1 on controller rows, 0 on permutation rows +/// - columns 1-19: execution trace of hash chiplet +/// - column 20 (s_perm): 0 on controller rows, 1 on permutation rows +/// +/// * Bitwise segment: begins at the end of the hasher segment. +/// - column 0 (s_ctrl): ZERO +/// - column 1 (s1): ZERO /// - columns 2-14: execution trace of bitwise chiplet /// - columns 15-20: unused columns padded with ZERO /// -/// * Memory segment: contains the trace and selectors for the memory chiplet. This segment begins -/// at the end of the bitwise segment and fills the next rows of the trace for the `trace_len` of -/// the memory chiplet. -/// - column 0-1: selector columns with values set to ONE -/// - column 2: selector column with values set to ZERO +/// * Memory segment: begins at the end of the bitwise segment. +/// - column 0 (s_ctrl): ZERO +/// - column 1 (s1): ONE +/// - column 2 (s2): ZERO /// - columns 3-19: execution trace of memory chiplet /// - column 20: unused column padded with ZERO /// -/// * ACE segment: contains the trace and selectors for the arithmetic circuit evaluation chiplet. -/// This segment begins at the end of the memory segment and fills the next rows of the trace for -/// the `trace_len` of the ACE chiplet. -/// - column 0-2: selector columns with values set to ONE -/// - column 3: selector column with values set to ZERO +/// * ACE segment: begins at the end of the memory segment. +/// - column 0 (s_ctrl): ZERO +/// - column 1-2 (s1, s2): ONE +/// - column 3 (s3): ZERO /// - columns 4-20: execution trace of ACE chiplet /// -/// * Kernel ROM segment: contains the trace and selectors for the kernel ROM chiplet * This segment -/// begins at the end of the memory segment and fills the next rows of the trace for the -/// `trace_len` of the kernel ROM chiplet. -/// - column 0-3: selector columns with values set to ONE -/// - column 4: selector column with values set to ZERO +/// * Kernel ROM segment: begins at the end of the ACE segment. +/// - column 0 (s_ctrl): ZERO +/// - columns 1-3 (s1, s2, s3): ONE +/// - column 4 (s4): ZERO /// - columns 5-9: execution trace of kernel ROM chiplet -/// - columns 10-20: unused column padded with ZERO +/// - columns 10-20: unused columns padded with ZERO /// -/// * Padding segment: unused. This segment begins at the end of the kernel ROM segment and fills -/// the rest of the execution trace minus the number of random rows. When it finishes, the -/// execution trace should have exactly enough rows remaining for the specified number of random -/// rows. -/// - columns 0-4: selector columns with values set to ONE +/// * Padding segment: fills the rest of the trace. +/// - column 0 (s_ctrl): ZERO +/// - columns 1-4 (s1..s4): ONE /// - columns 5-20: unused columns padded with ZERO /// /// /// The following is a pictorial representation of the chiplet module: /// /// ```text -/// +---+---------------------------------------------------------------------+ -/// | 0 | | -/// | . | Hash chiplet | -/// | . | 20 columns | -/// | . | constraint degree 9 | -/// | 0 | | -/// +---+---+------------------------------------------------------+----------+ -/// | 1 | 0 | |----------| -/// | . | . | Bitwise chiplet |----------| -/// | . | . | 13 columns |----------| -/// | . | . | constraint degree 5 |----------| -/// | . | . | |----------| -/// | . | 0 | |----------| -/// | . +---+---+--------------------------------------------------+-----+----+ -/// | . | 1 | 0 | |----| -/// | . | . | . | Memory chiplet |----| -/// | . | . | . | 17 columns |----| -/// | . | . | . | constraint degree 9 |----| -/// | . | . | 0 | |----| -/// | . + . +---+---+----------------------------------------------------+----+ -/// | . | . | 1 | 0 | |----| -/// | . | . | . | . | ACE chiplet |----| -/// | . | . | . | . | 16 columns |----| -/// | . | . | . | . | constraint degree 5 |----| -/// | . | . | . | 0 | |----| -/// | . + . | . +---+---+---------------------------+-------------------------+ -/// | . | . | . | 1 | 0 | |-------------------------| -/// | . | . | . | . | . | Kernel ROM chiplet |-------------------------| -/// | . | . | . | . | . | 5 columns |-------------------------| -/// | . | . | . | . | . | constraint degree 9 |-------------------------| -/// | . | . | . | . | 0 | |-------------------------| -/// | . + . | . | . +---+---+-----------------------+-------------------------+ -/// | . | . | . | . | 1 | 0 |-------------------------------------------------| -/// | . | . | . | . | . | . |-------------------------------------------------| -/// | . | . | . | . | . | . |-------------------------------------------------| -/// | . | . | . | . | . | . |-------------------------------------------------| -/// | . | . | . | . | . | . |-------------------- Padding --------------------| -/// | . + . | . | . | . | . |-------------------------------------------------| -/// | . | . | . | . | . | . |-------------------------------------------------| -/// | . | . | . | . | . | . |-------------------------------------------------| -/// | . | . | . | . | . | . |-------------------------------------------------| -/// | 1 | 1 | 1 | 1 | 1 | 0 |-------------------------------------------------| -/// +---+---+---+---+---------------------------------------------------------+ +/// s_ctrl s1 s2 s3 s4 s_perm +/// [0] [1] [2] [3] [4] [20] +/// +---+----------------------------------------------------------+---+ +/// ctrl | 1 | Hash chiplet (controller rows) | 0 | +/// | . | 20 columns | . | +/// | 1 | constraint degree 9 | 0 | +/// +---+ +---+ +/// perm | 0 | Hash chiplet (permutation rows) | 1 | +/// | . | | . | +/// | 0 | | 1 | +/// +---+---+------------------------------------------------------+---+ +/// | 0 | 0 | |---| +/// | . | . | Bitwise chiplet |---| +/// | . | . | 13 columns |---| +/// | 0 | 0 | constraint degree 5 |---| +/// | . +---+---+--------------------------------------------------+---+ +/// | . | 1 | 0 | |---| +/// | . | . | . | Memory chiplet |---| +/// | . | . | . | 17 columns |---| +/// | . | . | 0 | constraint degree 9 |---| +/// | . + . +---+---+----------------------------------------------+---+ +/// | . | . | 1 | 0 | |---| +/// | . | . | . | . | ACE chiplet |---| +/// | . | . | . | . | 16 columns |---| +/// | . | . | . | 0 | constraint degree 5 |---| +/// | . + . | . +---+---+-------------------------+--------------------+ +/// | . | . | . | 1 | 0 | |--------------------| +/// | . | . | . | . | . | Kernel ROM chiplet |--------------------| +/// | . | . | . | . | . | 5 columns |--------------------| +/// | . | . | . | . | 0 | constraint degree 9 |--------------------| +/// | . + . | . | . +---+-------------------------+--------------------+ +/// | . | . | . | . | 1 |-------- Padding ---------| | +/// | . | . | . | . | . | | | +/// | 0 | 1 | 1 | 1 | 1 | | 0 | +/// +---+---+---+---+---+--------------------------+-------------------+ /// ``` #[derive(Debug)] pub struct Chiplets { @@ -247,7 +237,10 @@ impl Chiplets { /// to identify each individual chiplet trace in addition to padding to fill the rest of /// the trace. fn fill_trace(self, trace: &mut [Vec; CHIPLETS_WIDTH]) -> AceHints { - let bitwise_start: usize = self.bitwise_start().into(); + // s_ctrl (trace[0]) is 1 on the hasher's controller rows and 0 elsewhere. + // The controller region is the padded prefix of the hasher region; `region_lengths` + // returns the same padded length that `finalize_trace` will materialize later. + let (hasher_ctrl_len, _hasher_perm_len) = self.hasher.region_lengths(); let memory_start: usize = self.memory_start().into(); let ace_start: usize = self.ace_start().into(); let kernel_rom_start: usize = self.kernel_rom_start().into(); @@ -255,104 +248,105 @@ impl Chiplets { let Chiplets { hasher, bitwise, memory, kernel_rom, ace } = self; - // populate external selector columns for all chiplets - trace[0][bitwise_start..].fill(ONE); + // Populate external selector columns. Each is a contiguous 0/1 indicator; the trace + // is zero-initialized, so we only memset the regions where the selector is ONE. + // s_perm (trace[20]) is written row-by-row by the hasher itself during fragment fill. + trace[0][..hasher_ctrl_len].fill(ONE); // s_ctrl: hasher controller rows trace[1][memory_start..].fill(ONE); trace[2][ace_start..].fill(ONE); trace[3][kernel_rom_start..].fill(ONE); trace[4][padding_start..].fill(ONE); - // allocate fragments to be filled with the respective execution traces of each chiplet - let mut hasher_fragment = TraceFragment::new(CHIPLETS_WIDTH, hasher.trace_len()); - let mut bitwise_fragment = TraceFragment::new(CHIPLETS_WIDTH, bitwise.trace_len()); - let mut memory_fragment = TraceFragment::new(CHIPLETS_WIDTH, memory.trace_len()); - let mut ace_fragment = TraceFragment::new(CHIPLETS_WIDTH, ace.trace_len()); - let mut kernel_rom_fragment = TraceFragment::new(CHIPLETS_WIDTH, kernel_rom.trace_len()); - - // add the hasher, bitwise, memory, ACE, and kernel ROM segments to their respective - // fragments so they can be filled with the chiplet traces - for (column_num, column) in trace.iter_mut().enumerate().skip(1) { - match column_num { - 1 => { - // column 1 is relevant only for the hasher - hasher_fragment.push_column_slice(column); - }, - 2 => { - // column 2 is relevant to the hasher and to bitwise chiplet - let rest = hasher_fragment.push_column_slice(column); - bitwise_fragment.push_column_slice(rest); - }, - 3 => { - // column 3 is relevant for hasher, bitwise, and memory chiplets - let rest = hasher_fragment.push_column_slice(column); - let rest = bitwise_fragment.push_column_slice(rest); - memory_fragment.push_column_slice(rest); - }, - 4 | 10..=14 => { - // columns 4 - 10 to 14 are relevant for hasher, bitwise, memory chiplets and - // ace chiplet - let rest = hasher_fragment.push_column_slice(column); - let rest = bitwise_fragment.push_column_slice(rest); - let rest = memory_fragment.push_column_slice(rest); - ace_fragment.push_column_slice(rest); - }, - 5..=9 => { - // columns 5 - 9 are relevant to all chiplets - let rest = hasher_fragment.push_column_slice(column); - let rest = bitwise_fragment.push_column_slice(rest); - let rest = memory_fragment.push_column_slice(rest); - let rest = ace_fragment.push_column_slice(rest); - kernel_rom_fragment.push_column_slice(rest); - }, - 15 | 16 => { - // columns 15 and 16 are relevant for the hasher, memory and ace chiplets - let rest = hasher_fragment.push_column_slice(column); - // skip bitwise chiplet - let (_, rest) = rest.split_at_mut(bitwise.trace_len()); - let rest = memory_fragment.push_column_slice(rest); - ace_fragment.push_column_slice(rest); - }, - 17..=19 => { - // columns 17-19 are relevant for hasher, memory, and ace chiplets - // (hasher: mrupdate_id/is_start/is_final; memory: f_scw/w0/w1; ace columns) - let rest = hasher_fragment.push_column_slice(column); - // skip bitwise chiplet - let (_, rest) = rest.split_at_mut(bitwise.trace_len()); - let rest = memory_fragment.push_column_slice(rest); - ace_fragment.push_column_slice(rest); - }, - 20 => { - // column 20 is relevant only for the hasher chiplet (perm_seg) - hasher_fragment.push_column_slice(column); - }, - _ => panic!("invalid column index"), + // Fill chiplet traces via fragments. The block scopes the fragment borrows. + { + // allocate fragments to be filled with the respective execution traces of each chiplet + let mut hasher_fragment = TraceFragment::new(CHIPLETS_WIDTH, hasher.trace_len()); + let mut bitwise_fragment = TraceFragment::new(CHIPLETS_WIDTH, bitwise.trace_len()); + let mut memory_fragment = TraceFragment::new(CHIPLETS_WIDTH, memory.trace_len()); + let mut ace_fragment = TraceFragment::new(CHIPLETS_WIDTH, ace.trace_len()); + let mut kernel_rom_fragment = + TraceFragment::new(CHIPLETS_WIDTH, kernel_rom.trace_len()); + + // add the hasher, bitwise, memory, ACE, and kernel ROM segments to their respective + // fragments so they can be filled with the chiplet traces + for (column_num, column) in trace.iter_mut().enumerate().skip(1) { + match column_num { + 1 => { + // column 1 is relevant only for the hasher + hasher_fragment.push_column_slice(column); + }, + 2 => { + // column 2 is relevant to the hasher and to bitwise chiplet + let rest = hasher_fragment.push_column_slice(column); + bitwise_fragment.push_column_slice(rest); + }, + 3 => { + // column 3 is relevant for hasher, bitwise, and memory chiplets + let rest = hasher_fragment.push_column_slice(column); + let rest = bitwise_fragment.push_column_slice(rest); + memory_fragment.push_column_slice(rest); + }, + 4 | 10..=14 => { + // columns 4 - 10 to 14 are relevant for hasher, bitwise, memory chiplets + // and ace chiplet + let rest = hasher_fragment.push_column_slice(column); + let rest = bitwise_fragment.push_column_slice(rest); + let rest = memory_fragment.push_column_slice(rest); + ace_fragment.push_column_slice(rest); + }, + 5..=9 => { + // columns 5 - 9 are relevant to all chiplets + let rest = hasher_fragment.push_column_slice(column); + let rest = bitwise_fragment.push_column_slice(rest); + let rest = memory_fragment.push_column_slice(rest); + let rest = ace_fragment.push_column_slice(rest); + kernel_rom_fragment.push_column_slice(rest); + }, + 15 | 16 => { + // columns 15 and 16 are relevant for the hasher, memory and ace chiplets + let rest = hasher_fragment.push_column_slice(column); + // skip bitwise chiplet + let (_, rest) = rest.split_at_mut(bitwise.trace_len()); + let rest = memory_fragment.push_column_slice(rest); + ace_fragment.push_column_slice(rest); + }, + 17..=19 => { + // columns 17-19 are relevant for hasher, memory, and ace chiplets + // (hasher: mrupdate_id/is_start/is_final; memory: f_scw/w0/w1; ace cols) + let rest = hasher_fragment.push_column_slice(column); + // skip bitwise chiplet + let (_, rest) = rest.split_at_mut(bitwise.trace_len()); + let rest = memory_fragment.push_column_slice(rest); + ace_fragment.push_column_slice(rest); + }, + 20 => { + // column 20 is relevant only for the hasher chiplet (s_perm) + hasher_fragment.push_column_slice(column); + }, + _ => panic!("invalid column index"), + } } - } - // fill the fragments with the execution trace from each chiplet in parallel - // The chiplets are independent and can be processed concurrently - - // Fill independent chiplets in parallel: hasher, bitwise, memory, kernel_rom - // Note: ACE must be processed separately since it returns a value - // Use ThreadPool::install() to prevent nested parallelism from column operations - rayon::scope(|s| { - s.spawn(move |_| { - hasher.fill_trace(&mut hasher_fragment); - }); - s.spawn(move |_| { - bitwise.fill_trace(&mut bitwise_fragment); + // Fill independent chiplets in parallel: hasher, bitwise, memory, kernel_rom. + // ACE must be processed separately since it returns a value. + rayon::scope(|s| { + s.spawn(move |_| { + hasher.fill_trace(&mut hasher_fragment); + }); + s.spawn(move |_| { + bitwise.fill_trace(&mut bitwise_fragment); + }); + s.spawn(move |_| { + memory.fill_trace(&mut memory_fragment); + }); + s.spawn(move |_| { + kernel_rom.fill_trace(&mut kernel_rom_fragment); + }); }); - s.spawn(move |_| { - memory.fill_trace(&mut memory_fragment); - }); - s.spawn(move |_| { - kernel_rom.fill_trace(&mut kernel_rom_fragment); - }); - }); - // Process ACE chiplet separately as it returns ace_sections - let ace_sections = ace.fill_trace(&mut ace_fragment); - AceHints::new(ace_start, ace_sections) + let ace_sections = ace.fill_trace(&mut ace_fragment); + AceHints::new(ace_start, ace_sections) + } } } diff --git a/processor/src/trace/chiplets/tests.rs b/processor/src/trace/chiplets/tests.rs index eb812b82bc..2a5193858b 100644 --- a/processor/src/trace/chiplets/tests.rs +++ b/processor/src/trace/chiplets/tests.rs @@ -5,7 +5,7 @@ use miden_air::trace::{ chiplets::{ NUM_BITWISE_SELECTORS, NUM_KERNEL_ROM_SELECTORS, NUM_MEMORY_SELECTORS, bitwise::{self, BITWISE_XOR, OP_CYCLE_LEN}, - hasher::{CONTROLLER_ROWS_PER_PERMUTATION, HASH_CYCLE_LEN, LINEAR_HASH, PERM_SEG_COL_IDX}, + hasher::{CONTROLLER_ROWS_PER_PERMUTATION, HASH_CYCLE_LEN, LINEAR_HASH, S_PERM_COL_IDX}, kernel_rom, memory, }, }; @@ -212,22 +212,23 @@ fn build_trace( /// Validates the hasher region of the chiplets trace. /// /// Checks: -/// - Chiplet selector (column 0) = 0 for all hasher rows -/// - Controller rows (perm_seg=0): correct selectors for operation type, is_start/is_final flags +/// - s_ctrl (column 0) = 1 on controller rows, 0 on permutation rows +/// - s_perm (column 20) = 0 on controller rows, 1 on permutation rows +/// - Controller rows (s_perm=0): correct selectors for operation type, is_start/is_final flags /// - Padding rows: selectors [0, 1, 0], non-selector columns are zero -/// - Perm segment rows (perm_seg=1): selectors are zero (don't-care), perm_seg=1 +/// - Perm segment rows (s_perm=1): selectors are zero (don't-care), s_perm=1 fn validate_hasher_trace( trace: &ChipletsTrace, expected_len: usize, controller_rows: usize, unique_perms: usize, ) { - // Column indices within chiplets trace (column 0 = chiplet selector s0). - // Hasher internal columns start at column 1. + // Column indices within chiplets trace. + // Column 0 = s_ctrl, column 20 = s_perm. Hasher internal columns start at column 1. let s0_col = 1; // hasher selector s0 let s1_col = 2; // hasher selector s1 let s2_col = 3; // hasher selector s2 - let perm_seg_col = 1 + PERM_SEG_COL_IDX; // perm_seg in chiplets trace + let s_perm_col = 1 + S_PERM_COL_IDX; // s_perm in chiplets trace (= column 20) let controller_padded = controller_rows.next_multiple_of(HASH_CYCLE_LEN); let perm_segment_start = controller_padded; @@ -235,18 +236,23 @@ fn validate_hasher_trace( assert_eq!(expected_len, controller_padded + perm_segment_len); - // --- Check all hasher rows have chiplet selector = 0 --- - for row in 0..expected_len { - assert_eq!(trace[0][row], ZERO, "chiplet selector s0 should be 0 for hasher row {row}"); + // --- Check s_ctrl and s_perm for all hasher rows --- + // Controller rows (including padding): s_ctrl=1, s_perm=0 + for row in 0..controller_padded { + assert_eq!(trace[0][row], ONE, "s_ctrl should be 1 for controller row {row}"); + assert_eq!(trace[s_perm_col][row], ZERO, "s_perm should be 0 for controller row {row}"); + } + // Permutation rows: s_ctrl=0, s_perm=1 + for row in perm_segment_start..expected_len { + assert_eq!(trace[0][row], ZERO, "s_ctrl should be 0 for perm row {row}"); + assert_eq!(trace[s_perm_col][row], ONE, "s_perm should be 1 for perm row {row}"); } - // --- Check controller rows (perm_seg = 0) --- + // --- Check controller rows (s_perm = 0) --- // Controller rows come in pairs: input row (is_start varies) + output row (is_final varies). // For a span hash: input has LINEAR_HASH selectors, output has RETURN_HASH selectors. // For HPerm: input has LINEAR_HASH selectors, output has RETURN_STATE selectors. for row in 0..controller_rows { - assert_eq!(trace[perm_seg_col][row], ZERO, "controller row {row} should have perm_seg=0"); - let is_input_row = row % CONTROLLER_ROWS_PER_PERMUTATION == 0; if is_input_row { // Input rows have s0=1 (LINEAR_HASH[0]) @@ -269,7 +275,6 @@ fn validate_hasher_trace( // Padding selectors are [0, 1, 0] (matching PERM_STEP pattern but in controller region). let padding_start = controller_rows; for row in padding_start..controller_padded { - assert_eq!(trace[perm_seg_col][row], ZERO, "padding row {row} should have perm_seg=0"); // Padding selectors: s0=0, s1=1, s2=0 assert_eq!(trace[s0_col][row], ZERO, "padding row {row}: s0 should be 0"); assert_eq!(trace[s1_col][row], ONE, "padding row {row}: s1 should be 1"); @@ -282,10 +287,8 @@ fn validate_hasher_trace( } } - // --- Check perm segment rows (perm_seg = 1) --- + // --- Check perm segment rows (s_perm = 1) --- for row in perm_segment_start..expected_len { - assert_eq!(trace[perm_seg_col][row], ONE, "perm segment row {row} should have perm_seg=1"); - // On perm rows, s0/s1/s2 serve as witness columns for packed internal rounds. // They are zero on external/boundary rows (offsets 0-3, 12-15 within each cycle), // and hold S-box witnesses on packed-internal rows (offsets 4-10) and the int+ext @@ -313,7 +316,7 @@ fn validate_hasher_trace( /// Validates the bitwise region of the chiplets trace. /// /// Checks: -/// - Chiplet selectors: s0=1, s1=0 +/// - Chiplet selectors: s_ctrl=0, s1=0, s_perm=0 /// - Bitwise operation selector = XOR /// - Columns beyond bitwise trace width + selectors are zero fn validate_bitwise_trace(trace: &ChipletsTrace, start: usize, end: usize) { @@ -322,8 +325,8 @@ fn validate_bitwise_trace(trace: &ChipletsTrace, start: usize, end: usize) { let bitwise_used_cols = NUM_BITWISE_SELECTORS + bitwise::TRACE_WIDTH; for row in start..end { - // Chiplet selectors: s0=1, s1=0 - assert_eq!(ONE, trace[0][row], "bitwise s0 at row {row}"); + // Chiplet selectors: s_ctrl=0, s1=0 (active via virtual s0 * !s1) + assert_eq!(ZERO, trace[0][row], "bitwise s_ctrl at row {row}"); assert_eq!(ZERO, trace[1][row], "bitwise s1 at row {row}"); // Internal bitwise operation selector (XOR) @@ -342,7 +345,7 @@ fn validate_bitwise_trace(trace: &ChipletsTrace, start: usize, end: usize) { /// Validates the memory region of the chiplets trace. /// /// Checks: -/// - Chiplet selectors: s0=1, s1=1, s2=0 +/// - Chiplet selectors: s_ctrl=0, s1=1, s2=0, s_perm=0 /// - Column beyond memory trace width + selectors is zero fn validate_memory_trace(trace: &ChipletsTrace, start: usize, end: usize) { // Memory uses NUM_MEMORY_SELECTORS (3) chiplet selector columns + memory::TRACE_WIDTH (17) @@ -350,8 +353,8 @@ fn validate_memory_trace(trace: &ChipletsTrace, start: usize, end: usize) { let memory_used_cols = NUM_MEMORY_SELECTORS + memory::TRACE_WIDTH; for row in start..end { - // Chiplet selectors: s0=1, s1=1, s2=0 - assert_eq!(ONE, trace[0][row], "memory s0 at row {row}"); + // Chiplet selectors: s_ctrl=0, s1=1, s2=0 (active via virtual s0 * s1 * !s2) + assert_eq!(ZERO, trace[0][row], "memory s_ctrl at row {row}"); assert_eq!(ONE, trace[1][row], "memory s1 at row {row}"); assert_eq!(ZERO, trace[2][row], "memory s2 at row {row}"); @@ -368,7 +371,7 @@ fn validate_memory_trace(trace: &ChipletsTrace, start: usize, end: usize) { /// Validates the kernel ROM region of the chiplets trace. /// /// Checks: -/// - Chiplet selectors: s0=1, s1=1, s2=1, s3=1, s4=0 +/// - Chiplet selectors: s_ctrl=0, s1=1, s2=1, s3=1, s4=0, s_perm=0 /// - Columns beyond kernel ROM trace width + selectors are zero fn validate_kernel_rom_trace(trace: &ChipletsTrace, start: usize, end: usize) { // Kernel ROM uses NUM_KERNEL_ROM_SELECTORS (5) chiplet selector columns + @@ -376,8 +379,9 @@ fn validate_kernel_rom_trace(trace: &ChipletsTrace, start: usize, end: usize) { let kernel_rom_used_cols = NUM_KERNEL_ROM_SELECTORS + kernel_rom::TRACE_WIDTH; for row in start..end { - // Chiplet selectors: s0=1, s1=1, s2=1, s3=1, s4=0 - assert_eq!(ONE, trace[0][row], "kernel_rom s0 at row {row}"); + // Chiplet selectors: s_ctrl=0, s1=1, s2=1, s3=1, s4=0 + // (active via virtual s0 * s1 * s2 * s3 * !s4) + assert_eq!(ZERO, trace[0][row], "kernel_rom s_ctrl at row {row}"); assert_eq!(ONE, trace[1][row], "kernel_rom s1 at row {row}"); assert_eq!(ONE, trace[2][row], "kernel_rom s2 at row {row}"); assert_eq!(ONE, trace[3][row], "kernel_rom s3 at row {row}"); @@ -396,15 +400,17 @@ fn validate_kernel_rom_trace(trace: &ChipletsTrace, start: usize, end: usize) { /// Validates the padding region at the end of the chiplets trace. /// /// Checks: -/// - All 5 selector columns are 1 (padding selector pattern) +/// - s_ctrl (column 0) = 0, s1..s4 (columns 1-4) = 1, s_perm (column 20) = 0 /// - All remaining columns (5..CHIPLETS_WIDTH) are zero fn validate_padding(trace: &ChipletsTrace, start: usize, end: usize) { for row in start..end { - // All 5 selector columns should be 1 - for col in 0..5 { - assert_eq!(ONE, trace[col][row], "padding selector at row {row}, col {col}"); + // s_ctrl = 0 on padding rows + assert_eq!(ZERO, trace[0][row], "padding s_ctrl at row {row}"); + // s1..s4 = 1 on padding rows + for col in 1..5 { + assert_eq!(ONE, trace[col][row], "padding s{col} at row {row}"); } - // All non-selector columns should be zero + // All non-selector columns should be zero (including s_perm at column 20) for col in 5..CHIPLETS_WIDTH { assert_eq!(ZERO, trace[col][row], "padding data col {col} at row {row} should be zero"); } diff --git a/processor/src/trace/decoder/aux_trace/block_hash_table.rs b/processor/src/trace/decoder/aux_trace/block_hash_table.rs index 523f7ebbc8..88fc15782c 100644 --- a/processor/src/trace/decoder/aux_trace/block_hash_table.rs +++ b/processor/src/trace/decoder/aux_trace/block_hash_table.rs @@ -1,4 +1,4 @@ -use miden_air::trace::{Challenges, RowIndex}; +use miden_air::trace::{Challenges, RowIndex, bus_types::BLOCK_HASH_TABLE}; use miden_core::{Word, ZERO, field::ExtensionField, operations::opcodes}; use super::{AuxColumnBuilder, Felt, MainTrace, ONE}; @@ -235,15 +235,18 @@ impl BlockHashTableRow { pub fn collapse>(&self, challenges: &Challenges) -> E { let is_first_child = if self.is_first_child { ONE } else { ZERO }; let is_loop_body = if self.is_loop_body { ONE } else { ZERO }; - challenges.encode([ - self.parent_block_id, - self.child_block_hash[0], - self.child_block_hash[1], - self.child_block_hash[2], - self.child_block_hash[3], - is_first_child, - is_loop_body, - ]) + challenges.encode( + BLOCK_HASH_TABLE, + [ + self.parent_block_id, + self.child_block_hash[0], + self.child_block_hash[1], + self.child_block_hash[2], + self.child_block_hash[3], + is_first_child, + is_loop_body, + ], + ) } // TEST diff --git a/processor/src/trace/decoder/aux_trace/block_stack_table.rs b/processor/src/trace/decoder/aux_trace/block_stack_table.rs index 74b2d4cb83..38984142b0 100644 --- a/processor/src/trace/decoder/aux_trace/block_stack_table.rs +++ b/processor/src/trace/decoder/aux_trace/block_stack_table.rs @@ -1,4 +1,4 @@ -use miden_air::trace::{Challenges, RowIndex}; +use miden_air::trace::{Challenges, RowIndex, bus_types::BLOCK_STACK_TABLE}; use miden_core::{field::ExtensionField, operations::opcodes}; use super::{AuxColumnBuilder, Felt, MainTrace, ONE, ZERO}; @@ -78,7 +78,7 @@ fn get_block_stack_table_respan_multiplicand>( let parent_id = main_trace.decoder_hasher_state_element(1, i + 1); let is_loop = ZERO; - challenges.encode([block_id, parent_id, is_loop]) + challenges.encode(BLOCK_STACK_TABLE, [block_id, parent_id, is_loop]) } /// Computes the multiplicand representing the removal of a row from the block stack table when @@ -98,20 +98,23 @@ fn get_block_stack_table_end_multiplicand>( let parent_next_overflow_addr = main_trace.parent_overflow_address(i + 1); let parent_fn_hash = main_trace.fn_hash(i + 1); - challenges.encode([ - block_id, - parent_id, - is_loop, - parent_ctx, - parent_stack_depth, - parent_next_overflow_addr, - parent_fn_hash[0], - parent_fn_hash[1], - parent_fn_hash[2], - parent_fn_hash[3], - ]) + challenges.encode( + BLOCK_STACK_TABLE, + [ + block_id, + parent_id, + is_loop, + parent_ctx, + parent_stack_depth, + parent_next_overflow_addr, + parent_fn_hash[0], + parent_fn_hash[1], + parent_fn_hash[2], + parent_fn_hash[3], + ], + ) } else { - challenges.encode([block_id, parent_id, is_loop]) + challenges.encode(BLOCK_STACK_TABLE, [block_id, parent_id, is_loop]) } } @@ -139,36 +142,42 @@ fn get_block_stack_table_inclusion_multiplicand>( let parent_stack_depth = main_trace.stack_depth(i); let parent_next_overflow_addr = main_trace.parent_overflow_address(i); let parent_fn_hash = main_trace.fn_hash(i); - challenges.encode([ - block_id, - parent_id, - is_loop, - parent_ctx, - parent_stack_depth, - parent_next_overflow_addr, - parent_fn_hash[0], - parent_fn_hash[1], - parent_fn_hash[2], - parent_fn_hash[3], - ]) + challenges.encode( + BLOCK_STACK_TABLE, + [ + block_id, + parent_id, + is_loop, + parent_ctx, + parent_stack_depth, + parent_next_overflow_addr, + parent_fn_hash[0], + parent_fn_hash[1], + parent_fn_hash[2], + parent_fn_hash[3], + ], + ) } else if op_code == opcodes::DYNCALL { let parent_ctx = main_trace.ctx(i); let parent_stack_depth = main_trace.decoder_hasher_state_element(4, i); let parent_next_overflow_addr = main_trace.decoder_hasher_state_element(5, i); let parent_fn_hash = main_trace.fn_hash(i); - challenges.encode([ - block_id, - parent_id, - is_loop, - parent_ctx, - parent_stack_depth, - parent_next_overflow_addr, - parent_fn_hash[0], - parent_fn_hash[1], - parent_fn_hash[2], - parent_fn_hash[3], - ]) + challenges.encode( + BLOCK_STACK_TABLE, + [ + block_id, + parent_id, + is_loop, + parent_ctx, + parent_stack_depth, + parent_next_overflow_addr, + parent_fn_hash[0], + parent_fn_hash[1], + parent_fn_hash[2], + parent_fn_hash[3], + ], + ) } else { - challenges.encode([block_id, parent_id, is_loop]) + challenges.encode(BLOCK_STACK_TABLE, [block_id, parent_id, is_loop]) } } diff --git a/processor/src/trace/decoder/aux_trace/op_group_table.rs b/processor/src/trace/decoder/aux_trace/op_group_table.rs index 3e984ac24f..5520e1dad4 100644 --- a/processor/src/trace/decoder/aux_trace/op_group_table.rs +++ b/processor/src/trace/decoder/aux_trace/op_group_table.rs @@ -1,5 +1,6 @@ use miden_air::trace::{ Challenges, RowIndex, + bus_types::OP_GROUP_TABLE, decoder::{OP_BATCH_2_GROUPS, OP_BATCH_4_GROUPS, OP_BATCH_8_GROUPS}, }; use miden_core::{field::ExtensionField, operations::opcodes}; @@ -74,16 +75,18 @@ fn get_op_group_table_inclusion_multiplicand>( if op_batch_flag == OP_BATCH_8_GROUPS { let h = main_trace.decoder_hasher_state(i); (1..8_u8).fold(E::ONE, |acc, k| { - acc * challenges.encode([block_id, group_count - Felt::from_u8(k), h[k as usize]]) + acc * challenges + .encode(OP_GROUP_TABLE, [block_id, group_count - Felt::from_u8(k), h[k as usize]]) }) } else if op_batch_flag == OP_BATCH_4_GROUPS { let h = main_trace.decoder_hasher_state_first_half(i); (1..4_u8).fold(E::ONE, |acc, k| { - acc * challenges.encode([block_id, group_count - Felt::from_u8(k), h[k as usize]]) + acc * challenges + .encode(OP_GROUP_TABLE, [block_id, group_count - Felt::from_u8(k), h[k as usize]]) }) } else if op_batch_flag == OP_BATCH_2_GROUPS { let h = main_trace.decoder_hasher_state_first_half(i); - challenges.encode([block_id, group_count - ONE, h[1]]) + challenges.encode(OP_GROUP_TABLE, [block_id, group_count - ONE, h[1]]) } else { E::ONE } @@ -110,5 +113,5 @@ fn get_op_group_table_removal_multiplicand>( } }; - challenges.encode([block_id, group_count, group_value]) + challenges.encode(OP_GROUP_TABLE, [block_id, group_count, group_value]) } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_01.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_01.snap index 46b622e7be..6bddb9766b 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_01.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_01.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 0, 0, 1, 0, 0, 0, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 0, 0, 1, 0, 0, 0, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5140376474314663948, 3739327994472119619, 12197195286374413309, 8260931550665656557, 18424611315455665672, 8710514240711102938, 13745802786964652170, 6548375970637655697, 14697063750404833549, 11345515238018223131, 809326793687057962, 8353595870573531205, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5151077999657789073, 9855163346786806166, 10427073607190553707, 11893740670479805498, 8660762125905589832, 3087828367487460915, 10807941376803729065, 12966884757436832352, 5887611756450648665, 2946171615755015016, 13043350793597586415, 2540346347559199959, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16885380856972561696, 7272719153662087111, 533047373605454411, 1829926574142237762, 17127340306827455573, 8550318671602553781, 11967821891194701924, 8617173377985249829, 4390455106880745190, 10503353101665672276, 3445826420292422918, 15905617593867500462, 1, 0, 0, 0, 1, 0, 14015495768979275110, 14880246136006978483, 2370383909586342854, 4396313619195267116, 10277182995998348622, 10580779234737523528, 1594484475404924132, 2784948507084849054, 4930631020140393563, 2468953284439066013, 14369692677316723198, 12605921110673978057, 15589073729373314001, 15832983954926147440, 15206447585345432360, 1, 0, 0, 0, 1, 0, 11655043985748250296, 10699504707431232516, 9467299864033965285, 17818361021916066381, 5757159540459665691, 9765809951316535147, 9595530987647092729, 8347633294012310580, 2828555514110129215, 16235476345222743147, 16488861457711574881, 9581721436999738864, 6661690865570834646, 14925506152061129229, 12647708209366536631, 1, 0, 0, 0, 1, 0, 17354386000029748168, 1615091744629199786, 6126471050563264586, 16833029552007335772, 10562329593955594288, 9697859497182376308, 4563063455320265667, 16459952452199547026, 8327420331623942113, 7827742839669371295, 2458019052558535305, 15260860572373553109, 575220748088635860, 18336554683084823555, 6724344971643611017, 1, 0, 0, 0, 1, 0, 10761244172272014098, 18186939778341908967, 9856938012656986962, 9947044966489369966, 18303351465385086236, 6110992258367195164, 7735824317535531109, 8768898256362256567, 453077352291409865, 1609065912712094319, 247484960726213991, 9649122197052954943, 5225807468457901577, 16347954830762298502, 9582673736768413052, 1, 0, 0, 0, 1, 0, 15683239765212415917, 12949077672553569346, 6136438285021512441, 9818108804633787874, 9244678019206311862, 11530371422565574919, 12480600709687621128, 4574304056007112162, 8150970536507693114, 2648588484571064605, 11606973446973456199, 3689293233291605771, 17198482303941924567, 9084874200639035992, 15180713067843619854, 1, 0, 0, 0, 1, 0, 13352191639049950502, 1781612529695982717, 17940295799223377801, 4313511094695098159, 5878623689014611519, 4405616242805307371, 1262088577389795166, 17597264692962831013, 9734673703119078710, 17976467869316326526, 17692030742991723124, 8596529378407272747, 16841535128816011006, 16640836306313302925, 5780865724855930643, 1, 0, 0, 0, 1, 0, 14809719365593713010, 10532643948327499097, 11726590278216945558, 12934070243418782738, 12505885186641282427, 78901366432993105, 5046795949307964432, 8474944897236640626, 8294118794714299790, 4079016485765258670, 7568893198878892067, 9399437128660150397, 9756998763275612257, 16135446855619161594, 5490240700537832368, 1, 0, 0, 0, 1, 0, 1825940038334452510, 0, 0, 1303361134214255144, 17429829341045194126, 4285338701077916719, 2910522803612995552, 6045066589466757281, 3823107055299292863, 17630322765550216924, 4973217863350539721, 6949143047896273946, 11354865285620231158, 7541264006304433571, 10157260196426992044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17525379757599431696, 8834060796313238365, 8610620161032996227, 9527459414368740643, 9178488780906183949, 6890858608219888881, 13578840114630190185, 18189457662137520245, 3979322074577621357, 12504370868862613699, 9966350562627740919, 16215780421699068990, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15824846667317041360, 856881534780831669, 1345962755312618543, 17392858720163980888, 572497659895507109, 10680339138669917038, 2119568863265536467, 17447468029829501860, 5317810489943751161, 7450671729747196018, 10317133817946706776, 12595602375369553246, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8992618192991263654, 8614320689815223473, 5938021660540313570, 500779098360895522, 14724337405152116499, 9892588909603237147, 8158174533637128652, 5366612376176920228, 13663234493876910991, 11869180945716319347, 2674823044861603020, 14007226435224111078, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8962397996249942813, 13564283360082851490, 15320836901220842229, 7059236745058640735, 14597771066871753553, 12891440258701617795, 7976296880270099068, 9869196225863171361, 16723391107514202352, 18076794411180476280, 7318735608001207147, 17139781905758323226, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6385487366266632060, 16294057552644672316, 9687580313089453282, 9552556216292266897, 5977340097238271765, 10322300200196682981, 279851189829800217, 6918765821995287137, 9754566926160679801, 205142327694293412, 2870457579998112786, 3995355680811906625, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15421658280337698465, 6097183689626534496, 4646487368895915296, 4246851900171193724, 7707653349895837404, 17715988767376665360, 1629791578136936575, 1369739146488483681, 12819365845000407643, 16544719539062425474, 8435616415860238896, 8414041561969840147, 1, 0, 0, 0, 1, 0, 4454659362488555244, 897257401795782847, 1442741355132240277, 10565312036761368185, 5142791099649335720, 14821642720711744364, 14051544049298817271, 750410385838623118, 12529577197437921705, 9250281207577685312, 1289422996858358477, 9991664912056245947, 2678151302770396230, 196396598284240198, 6056580584982795553, 1, 0, 0, 0, 1, 0, 17078534924241776339, 15440110056678900200, 18208650451735606208, 10756948069435380801, 15510754792097734964, 2375067891701857361, 2923239127151948080, 10704182720413467090, 2473371596923514175, 1150752289248225959, 15140294830527696728, 17937489760159731410, 6601966437239502772, 6893308270453759366, 12621557274381914353, 1, 0, 0, 0, 1, 0, 316614558845336509, 2878699202280611836, 4275560082084202144, 7825754886390455440, 7997738108478273878, 11956271016055823946, 8453074578285752653, 17538680525690853062, 3583695132258196536, 10246367578585743447, 1421290680685617214, 5286310130352931456, 1784797448120793789, 10911572374110245694, 13198139370097152194, 1, 0, 0, 0, 1, 0, 12678676945213092865, 15246741769098836296, 15584605922953436007, 13983789395651571583, 13294611871319191983, 5847635127357093482, 9897038047323897370, 4141923705337186001, 8176730118494162678, 6783090395235209659, 7174788237318142123, 9471733465477014135, 670946413872621524, 10285804549311169869, 605479756900086202, 1, 0, 0, 0, 1, 0, 16568523364350885487, 15819937544318835786, 1810889556141981899, 3363240447642516424, 2845656992888419272, 16007826574763812566, 10836844319802726945, 1759841724041652075, 10220987366360269577, 4288337514646499477, 15302356383007635999, 10084364066798723299, 4708938355998137236, 4512217941150685160, 6401077792884902899, 1, 0, 0, 0, 1, 0, 443828493241314088, 17479115015136738827, 16807605577473118694, 7828293012926775020, 4406743315212729130, 17819043892120276345, 10288960109250570842, 8627241529856509742, 12763806424191572386, 10924085850925815890, 11240603387110570141, 4596163035992380964, 10053747442208350154, 1495035938694254211, 4149682069832499543, 1, 0, 0, 0, 1, 0, 3238559664072884360, 9979572324819437588, 9676585927660439650, 12922287692448102380, 16122102826540224213, 1387322623565652732, 295310595529849583, 626496362396505138, 12692366118122891151, 9118931780992437842, 1835696655621331722, 17492638446874188318, 9446845463763503898, 2033490153416681362, 10601663807010949823, 1, 0, 0, 0, 1, 0, 12833432460597635146, 0, 0, 12362167187142713720, 7652433402428128865, 13848956826511295359, 5959646737238852401, 4051444777808751499, 17743718519616976296, 4470738656604083779, 9409022898528060781, 8739778943225234768, 10733909952514206486, 2288182338723422425, 12415014162240143946, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14911169987988052811, 9684204095164476815, 10202942699122698773, 9822906574365710103, 14333518987829918669, 2543793480285047170, 6422638912707970220, 17063170837522968299, 11891715600478694595, 9571493212894702614, 2390601416181918661, 16738431774071597762, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15100444854223162361, 17702995505216793489, 7439539809669146478, 17892016949428967969, 17843924827166978222, 17021793130360212806, 16012433424607683700, 3702512996340883595, 5580010029452924235, 4393284534245665333, 7303237900174645421, 639602489095149029, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7731918223558949955, 10675603116079282076, 13477200069544690909, 9033576496544593982, 10647867748676596435, 11915740833798992018, 6326608805282345628, 2628586313169132635, 1761218265234642115, 7926227231583287531, 2453521579710367516, 13916262071165774844, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18248966067159614734, 13590585102940813084, 9590621322847534573, 4885112663983886856, 13157788436891508553, 11521696315622895181, 8426354436255247671, 2713831240363482992, 3447697248540225808, 17594999963544064287, 2358849405739495388, 1652445317709542069, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14997726253538871503, 13603816939964373123, 12932191302609726157, 12798756157498171562, 12242844110543519517, 1112809250875085271, 14696972132215546141, 17933860786448377030, 10044864192452182412, 12743397052876062010, 8252049255686697090, 9710174156710538584, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8817287785847965336, 3385249563011961849, 17918869724719667108, 8555258669059245167, 14956019708245712821, 12021362864117640865, 16692922442306646447, 12140276230850597158, 7058340312231756422, 16793498368204377302, 1550389821256969487, 3687395741963426550, 1, 0, 0, 0, 1, 0, 13889646877547174618, 5867013684002937049, 3874077199438956671, 7563891540952433248, 112536514236739072, 14326240507681405072, 12593636579411959551, 10570950564294000321, 18151871077622688335, 8874979589420119367, 1606372307127613897, 11424300291678555912, 11520998711037823747, 6750324157015485381, 18198216273587752711, 1, 0, 0, 0, 1, 0, 16236403493045129867, 8532135944457515917, 17647636734684350457, 13463537305496517162, 15195193333392427571, 12352345465945418691, 10174923844635011062, 7668476027270202579, 10359334248806725290, 10085921208436197132, 16448487398099419345, 14911345319478414189, 1869688954383701255, 1421326959851451806, 15957089851173678739, 1, 0, 0, 0, 1, 0, 13764650897714891563, 17810684478882660202, 14031148050915831965, 3808288102601471056, 14347073347558249169, 10584893895333648109, 1428273348489524024, 2062361183656478066, 10866279963718241802, 2718833903563323199, 7493603045769629260, 2533220603754125879, 1133217540165824186, 2198451335895548750, 13002397426121818840, 1, 0, 0, 0, 1, 0, 17725409119032852267, 11323941782055916015, 16251673015114650089, 4938442710501308657, 5613057382731574150, 10105110162171772438, 8183805712769991021, 15900656105857229467, 4713833248608103744, 5975284652827254996, 17140128915513269672, 10662827764253743390, 1360814798563974092, 18204665069024529476, 5861292583325103670, 1, 0, 0, 0, 1, 0, 14914053581161264238, 2620801595702286526, 11717666498402108632, 12002553001135911279, 5693866887050036020, 11964900944541509452, 8293446604021081650, 12256719005104851107, 3995119331147317584, 17181552195820469706, 8512417397041248917, 15742094452256624479, 3435210620583322514, 4160946893194356300, 7010314501210327907, 1, 0, 0, 0, 1, 0, 3562234265760858029, 4769670971948134199, 13385330306078539868, 10789879208843041511, 4107508461331672257, 4621662715196065678, 3079504282059755968, 260627379830442974, 894389675194381154, 179996691661177615, 12193512270869861572, 7196421200244503747, 11336008056438129603, 17326536692088196432, 2381487671462803904, 1, 0, 0, 0, 1, 0, 5906557576131351225, 13293454763685280754, 9930431347496206092, 7069639777384924144, 364669749717258, 6809248840077290249, 17801775841166869486, 13819086418675951632, 14554524254203776994, 8885320358009245035, 3851130964131028937, 9451078778045131871, 5581858847773628805, 6554220297842488502, 10199495361398762521, 1, 0, 0, 0, 1, 0, 2656770040929279434, 0, 0, 15539063566397429438, 17691418632824774891, 1922074210551113159, 3106011472540779982, 15257531885396120213, 12320900210322448034, 11637817792474845578, 3363935513258073239, 7181119043238227738, 18247981403702122132, 9039178885558385498, 6369472266524549650, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10333172214933120836, 15557683662491153084, 1598739907793205518, 6265664197169483681, 7206583663178666402, 6198597980723382916, 10395653141429564317, 15929576060773374367, 7951988307407900542, 17479206923733922587, 10069135081496908116, 16946656379378628774, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3750356548306982137, 12209140182523723096, 14526700523373973306, 9801143914278062154, 18199569338713260127, 7473328648066901490, 12120812098909026742, 9238706649514600628, 13025686387588160039, 8202861560648587401, 4751010459333335795, 5583968744804760129, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12302499613655276109, 17383410983291524378, 16517594411296145407, 2114471287922017076, 11998802949255523211, 1026110231435118088, 14623333492544617469, 6772806779673451094, 10950281275289859162, 6069495537705640, 15084214110056267454, 12827986113643603592, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(13) }, program_info: ProgramInfo { program_hash: Word([6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 14, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 96, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 0, 0, 1, 0, 0, 1, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 0, 0, 1, 0, 0, 1, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5140376474314663948, 3739327994472119619, 12197195286374413309, 8260931550665656557, 18424611315455665672, 8710514240711102938, 13745802786964652170, 6548375970637655697, 14697063750404833549, 11345515238018223131, 809326793687057962, 8353595870573531205, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5151077999657789073, 9855163346786806166, 10427073607190553707, 11893740670479805498, 8660762125905589832, 3087828367487460915, 10807941376803729065, 12966884757436832352, 5887611756450648665, 2946171615755015016, 13043350793597586415, 2540346347559199959, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16885380856972561696, 7272719153662087111, 533047373605454411, 1829926574142237762, 17127340306827455573, 8550318671602553781, 11967821891194701924, 8617173377985249829, 4390455106880745190, 10503353101665672276, 3445826420292422918, 15905617593867500462, 1, 0, 0, 0, 1, 0, 14015495768979275110, 14880246136006978483, 2370383909586342854, 4396313619195267116, 10277182995998348622, 10580779234737523528, 1594484475404924132, 2784948507084849054, 4930631020140393563, 2468953284439066013, 14369692677316723198, 12605921110673978057, 15589073729373314001, 15832983954926147440, 15206447585345432360, 1, 0, 0, 0, 1, 0, 11655043985748250296, 10699504707431232516, 9467299864033965285, 17818361021916066381, 5757159540459665691, 9765809951316535147, 9595530987647092729, 8347633294012310580, 2828555514110129215, 16235476345222743147, 16488861457711574881, 9581721436999738864, 6661690865570834646, 14925506152061129229, 12647708209366536631, 1, 0, 0, 0, 1, 0, 17354386000029748168, 1615091744629199786, 6126471050563264586, 16833029552007335772, 10562329593955594288, 9697859497182376308, 4563063455320265667, 16459952452199547026, 8327420331623942113, 7827742839669371295, 2458019052558535305, 15260860572373553109, 575220748088635860, 18336554683084823555, 6724344971643611017, 1, 0, 0, 0, 1, 0, 10761244172272014098, 18186939778341908967, 9856938012656986962, 9947044966489369966, 18303351465385086236, 6110992258367195164, 7735824317535531109, 8768898256362256567, 453077352291409865, 1609065912712094319, 247484960726213991, 9649122197052954943, 5225807468457901577, 16347954830762298502, 9582673736768413052, 1, 0, 0, 0, 1, 0, 15683239765212415917, 12949077672553569346, 6136438285021512441, 9818108804633787874, 9244678019206311862, 11530371422565574919, 12480600709687621128, 4574304056007112162, 8150970536507693114, 2648588484571064605, 11606973446973456199, 3689293233291605771, 17198482303941924567, 9084874200639035992, 15180713067843619854, 1, 0, 0, 0, 1, 0, 13352191639049950502, 1781612529695982717, 17940295799223377801, 4313511094695098159, 5878623689014611519, 4405616242805307371, 1262088577389795166, 17597264692962831013, 9734673703119078710, 17976467869316326526, 17692030742991723124, 8596529378407272747, 16841535128816011006, 16640836306313302925, 5780865724855930643, 1, 0, 0, 0, 1, 0, 14809719365593713010, 10532643948327499097, 11726590278216945558, 12934070243418782738, 12505885186641282427, 78901366432993105, 5046795949307964432, 8474944897236640626, 8294118794714299790, 4079016485765258670, 7568893198878892067, 9399437128660150397, 9756998763275612257, 16135446855619161594, 5490240700537832368, 1, 0, 0, 0, 1, 0, 1825940038334452510, 0, 0, 1303361134214255144, 17429829341045194126, 4285338701077916719, 2910522803612995552, 6045066589466757281, 3823107055299292863, 17630322765550216924, 4973217863350539721, 6949143047896273946, 11354865285620231158, 7541264006304433571, 10157260196426992044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17525379757599431696, 8834060796313238365, 8610620161032996227, 9527459414368740643, 9178488780906183949, 6890858608219888881, 13578840114630190185, 18189457662137520245, 3979322074577621357, 12504370868862613699, 9966350562627740919, 16215780421699068990, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15824846667317041360, 856881534780831669, 1345962755312618543, 17392858720163980888, 572497659895507109, 10680339138669917038, 2119568863265536467, 17447468029829501860, 5317810489943751161, 7450671729747196018, 10317133817946706776, 12595602375369553246, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8992618192991263654, 8614320689815223473, 5938021660540313570, 500779098360895522, 14724337405152116499, 9892588909603237147, 8158174533637128652, 5366612376176920228, 13663234493876910991, 11869180945716319347, 2674823044861603020, 14007226435224111078, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8962397996249942813, 13564283360082851490, 15320836901220842229, 7059236745058640735, 14597771066871753553, 12891440258701617795, 7976296880270099068, 9869196225863171361, 16723391107514202352, 18076794411180476280, 7318735608001207147, 17139781905758323226, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6385487366266632060, 16294057552644672316, 9687580313089453282, 9552556216292266897, 5977340097238271765, 10322300200196682981, 279851189829800217, 6918765821995287137, 9754566926160679801, 205142327694293412, 2870457579998112786, 3995355680811906625, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15421658280337698465, 6097183689626534496, 4646487368895915296, 4246851900171193724, 7707653349895837404, 17715988767376665360, 1629791578136936575, 1369739146488483681, 12819365845000407643, 16544719539062425474, 8435616415860238896, 8414041561969840147, 1, 0, 0, 0, 1, 0, 4454659362488555244, 897257401795782847, 1442741355132240277, 10565312036761368185, 5142791099649335720, 14821642720711744364, 14051544049298817271, 750410385838623118, 12529577197437921705, 9250281207577685312, 1289422996858358477, 9991664912056245947, 2678151302770396230, 196396598284240198, 6056580584982795553, 1, 0, 0, 0, 1, 0, 17078534924241776339, 15440110056678900200, 18208650451735606208, 10756948069435380801, 15510754792097734964, 2375067891701857361, 2923239127151948080, 10704182720413467090, 2473371596923514175, 1150752289248225959, 15140294830527696728, 17937489760159731410, 6601966437239502772, 6893308270453759366, 12621557274381914353, 1, 0, 0, 0, 1, 0, 316614558845336509, 2878699202280611836, 4275560082084202144, 7825754886390455440, 7997738108478273878, 11956271016055823946, 8453074578285752653, 17538680525690853062, 3583695132258196536, 10246367578585743447, 1421290680685617214, 5286310130352931456, 1784797448120793789, 10911572374110245694, 13198139370097152194, 1, 0, 0, 0, 1, 0, 12678676945213092865, 15246741769098836296, 15584605922953436007, 13983789395651571583, 13294611871319191983, 5847635127357093482, 9897038047323897370, 4141923705337186001, 8176730118494162678, 6783090395235209659, 7174788237318142123, 9471733465477014135, 670946413872621524, 10285804549311169869, 605479756900086202, 1, 0, 0, 0, 1, 0, 16568523364350885487, 15819937544318835786, 1810889556141981899, 3363240447642516424, 2845656992888419272, 16007826574763812566, 10836844319802726945, 1759841724041652075, 10220987366360269577, 4288337514646499477, 15302356383007635999, 10084364066798723299, 4708938355998137236, 4512217941150685160, 6401077792884902899, 1, 0, 0, 0, 1, 0, 443828493241314088, 17479115015136738827, 16807605577473118694, 7828293012926775020, 4406743315212729130, 17819043892120276345, 10288960109250570842, 8627241529856509742, 12763806424191572386, 10924085850925815890, 11240603387110570141, 4596163035992380964, 10053747442208350154, 1495035938694254211, 4149682069832499543, 1, 0, 0, 0, 1, 0, 3238559664072884360, 9979572324819437588, 9676585927660439650, 12922287692448102380, 16122102826540224213, 1387322623565652732, 295310595529849583, 626496362396505138, 12692366118122891151, 9118931780992437842, 1835696655621331722, 17492638446874188318, 9446845463763503898, 2033490153416681362, 10601663807010949823, 1, 0, 0, 0, 1, 0, 12833432460597635146, 0, 0, 12362167187142713720, 7652433402428128865, 13848956826511295359, 5959646737238852401, 4051444777808751499, 17743718519616976296, 4470738656604083779, 9409022898528060781, 8739778943225234768, 10733909952514206486, 2288182338723422425, 12415014162240143946, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14911169987988052811, 9684204095164476815, 10202942699122698773, 9822906574365710103, 14333518987829918669, 2543793480285047170, 6422638912707970220, 17063170837522968299, 11891715600478694595, 9571493212894702614, 2390601416181918661, 16738431774071597762, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15100444854223162361, 17702995505216793489, 7439539809669146478, 17892016949428967969, 17843924827166978222, 17021793130360212806, 16012433424607683700, 3702512996340883595, 5580010029452924235, 4393284534245665333, 7303237900174645421, 639602489095149029, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7731918223558949955, 10675603116079282076, 13477200069544690909, 9033576496544593982, 10647867748676596435, 11915740833798992018, 6326608805282345628, 2628586313169132635, 1761218265234642115, 7926227231583287531, 2453521579710367516, 13916262071165774844, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18248966067159614734, 13590585102940813084, 9590621322847534573, 4885112663983886856, 13157788436891508553, 11521696315622895181, 8426354436255247671, 2713831240363482992, 3447697248540225808, 17594999963544064287, 2358849405739495388, 1652445317709542069, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14997726253538871503, 13603816939964373123, 12932191302609726157, 12798756157498171562, 12242844110543519517, 1112809250875085271, 14696972132215546141, 17933860786448377030, 10044864192452182412, 12743397052876062010, 8252049255686697090, 9710174156710538584, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8817287785847965336, 3385249563011961849, 17918869724719667108, 8555258669059245167, 14956019708245712821, 12021362864117640865, 16692922442306646447, 12140276230850597158, 7058340312231756422, 16793498368204377302, 1550389821256969487, 3687395741963426550, 1, 0, 0, 0, 1, 0, 13889646877547174618, 5867013684002937049, 3874077199438956671, 7563891540952433248, 112536514236739072, 14326240507681405072, 12593636579411959551, 10570950564294000321, 18151871077622688335, 8874979589420119367, 1606372307127613897, 11424300291678555912, 11520998711037823747, 6750324157015485381, 18198216273587752711, 1, 0, 0, 0, 1, 0, 16236403493045129867, 8532135944457515917, 17647636734684350457, 13463537305496517162, 15195193333392427571, 12352345465945418691, 10174923844635011062, 7668476027270202579, 10359334248806725290, 10085921208436197132, 16448487398099419345, 14911345319478414189, 1869688954383701255, 1421326959851451806, 15957089851173678739, 1, 0, 0, 0, 1, 0, 13764650897714891563, 17810684478882660202, 14031148050915831965, 3808288102601471056, 14347073347558249169, 10584893895333648109, 1428273348489524024, 2062361183656478066, 10866279963718241802, 2718833903563323199, 7493603045769629260, 2533220603754125879, 1133217540165824186, 2198451335895548750, 13002397426121818840, 1, 0, 0, 0, 1, 0, 17725409119032852267, 11323941782055916015, 16251673015114650089, 4938442710501308657, 5613057382731574150, 10105110162171772438, 8183805712769991021, 15900656105857229467, 4713833248608103744, 5975284652827254996, 17140128915513269672, 10662827764253743390, 1360814798563974092, 18204665069024529476, 5861292583325103670, 1, 0, 0, 0, 1, 0, 14914053581161264238, 2620801595702286526, 11717666498402108632, 12002553001135911279, 5693866887050036020, 11964900944541509452, 8293446604021081650, 12256719005104851107, 3995119331147317584, 17181552195820469706, 8512417397041248917, 15742094452256624479, 3435210620583322514, 4160946893194356300, 7010314501210327907, 1, 0, 0, 0, 1, 0, 3562234265760858029, 4769670971948134199, 13385330306078539868, 10789879208843041511, 4107508461331672257, 4621662715196065678, 3079504282059755968, 260627379830442974, 894389675194381154, 179996691661177615, 12193512270869861572, 7196421200244503747, 11336008056438129603, 17326536692088196432, 2381487671462803904, 1, 0, 0, 0, 1, 0, 5906557576131351225, 13293454763685280754, 9930431347496206092, 7069639777384924144, 364669749717258, 6809248840077290249, 17801775841166869486, 13819086418675951632, 14554524254203776994, 8885320358009245035, 3851130964131028937, 9451078778045131871, 5581858847773628805, 6554220297842488502, 10199495361398762521, 1, 0, 0, 0, 1, 0, 2656770040929279434, 0, 0, 15539063566397429438, 17691418632824774891, 1922074210551113159, 3106011472540779982, 15257531885396120213, 12320900210322448034, 11637817792474845578, 3363935513258073239, 7181119043238227738, 18247981403702122132, 9039178885558385498, 6369472266524549650, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10333172214933120836, 15557683662491153084, 1598739907793205518, 6265664197169483681, 7206583663178666402, 6198597980723382916, 10395653141429564317, 15929576060773374367, 7951988307407900542, 17479206923733922587, 10069135081496908116, 16946656379378628774, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3750356548306982137, 12209140182523723096, 14526700523373973306, 9801143914278062154, 18199569338713260127, 7473328648066901490, 12120812098909026742, 9238706649514600628, 13025686387588160039, 8202861560648587401, 4751010459333335795, 5583968744804760129, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12302499613655276109, 17383410983291524378, 16517594411296145407, 2114471287922017076, 11998802949255523211, 1026110231435118088, 14623333492544617469, 6772806779673451094, 10950281275289859162, 6069495537705640, 15084214110056267454, 12827986113643603592, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(13) }, program_info: ProgramInfo { program_hash: Word([6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 14, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 96, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_02.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_02.snap index 46b622e7be..6bddb9766b 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_02.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_02.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 0, 0, 1, 0, 0, 0, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 0, 0, 1, 0, 0, 0, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5140376474314663948, 3739327994472119619, 12197195286374413309, 8260931550665656557, 18424611315455665672, 8710514240711102938, 13745802786964652170, 6548375970637655697, 14697063750404833549, 11345515238018223131, 809326793687057962, 8353595870573531205, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5151077999657789073, 9855163346786806166, 10427073607190553707, 11893740670479805498, 8660762125905589832, 3087828367487460915, 10807941376803729065, 12966884757436832352, 5887611756450648665, 2946171615755015016, 13043350793597586415, 2540346347559199959, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16885380856972561696, 7272719153662087111, 533047373605454411, 1829926574142237762, 17127340306827455573, 8550318671602553781, 11967821891194701924, 8617173377985249829, 4390455106880745190, 10503353101665672276, 3445826420292422918, 15905617593867500462, 1, 0, 0, 0, 1, 0, 14015495768979275110, 14880246136006978483, 2370383909586342854, 4396313619195267116, 10277182995998348622, 10580779234737523528, 1594484475404924132, 2784948507084849054, 4930631020140393563, 2468953284439066013, 14369692677316723198, 12605921110673978057, 15589073729373314001, 15832983954926147440, 15206447585345432360, 1, 0, 0, 0, 1, 0, 11655043985748250296, 10699504707431232516, 9467299864033965285, 17818361021916066381, 5757159540459665691, 9765809951316535147, 9595530987647092729, 8347633294012310580, 2828555514110129215, 16235476345222743147, 16488861457711574881, 9581721436999738864, 6661690865570834646, 14925506152061129229, 12647708209366536631, 1, 0, 0, 0, 1, 0, 17354386000029748168, 1615091744629199786, 6126471050563264586, 16833029552007335772, 10562329593955594288, 9697859497182376308, 4563063455320265667, 16459952452199547026, 8327420331623942113, 7827742839669371295, 2458019052558535305, 15260860572373553109, 575220748088635860, 18336554683084823555, 6724344971643611017, 1, 0, 0, 0, 1, 0, 10761244172272014098, 18186939778341908967, 9856938012656986962, 9947044966489369966, 18303351465385086236, 6110992258367195164, 7735824317535531109, 8768898256362256567, 453077352291409865, 1609065912712094319, 247484960726213991, 9649122197052954943, 5225807468457901577, 16347954830762298502, 9582673736768413052, 1, 0, 0, 0, 1, 0, 15683239765212415917, 12949077672553569346, 6136438285021512441, 9818108804633787874, 9244678019206311862, 11530371422565574919, 12480600709687621128, 4574304056007112162, 8150970536507693114, 2648588484571064605, 11606973446973456199, 3689293233291605771, 17198482303941924567, 9084874200639035992, 15180713067843619854, 1, 0, 0, 0, 1, 0, 13352191639049950502, 1781612529695982717, 17940295799223377801, 4313511094695098159, 5878623689014611519, 4405616242805307371, 1262088577389795166, 17597264692962831013, 9734673703119078710, 17976467869316326526, 17692030742991723124, 8596529378407272747, 16841535128816011006, 16640836306313302925, 5780865724855930643, 1, 0, 0, 0, 1, 0, 14809719365593713010, 10532643948327499097, 11726590278216945558, 12934070243418782738, 12505885186641282427, 78901366432993105, 5046795949307964432, 8474944897236640626, 8294118794714299790, 4079016485765258670, 7568893198878892067, 9399437128660150397, 9756998763275612257, 16135446855619161594, 5490240700537832368, 1, 0, 0, 0, 1, 0, 1825940038334452510, 0, 0, 1303361134214255144, 17429829341045194126, 4285338701077916719, 2910522803612995552, 6045066589466757281, 3823107055299292863, 17630322765550216924, 4973217863350539721, 6949143047896273946, 11354865285620231158, 7541264006304433571, 10157260196426992044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17525379757599431696, 8834060796313238365, 8610620161032996227, 9527459414368740643, 9178488780906183949, 6890858608219888881, 13578840114630190185, 18189457662137520245, 3979322074577621357, 12504370868862613699, 9966350562627740919, 16215780421699068990, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15824846667317041360, 856881534780831669, 1345962755312618543, 17392858720163980888, 572497659895507109, 10680339138669917038, 2119568863265536467, 17447468029829501860, 5317810489943751161, 7450671729747196018, 10317133817946706776, 12595602375369553246, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8992618192991263654, 8614320689815223473, 5938021660540313570, 500779098360895522, 14724337405152116499, 9892588909603237147, 8158174533637128652, 5366612376176920228, 13663234493876910991, 11869180945716319347, 2674823044861603020, 14007226435224111078, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8962397996249942813, 13564283360082851490, 15320836901220842229, 7059236745058640735, 14597771066871753553, 12891440258701617795, 7976296880270099068, 9869196225863171361, 16723391107514202352, 18076794411180476280, 7318735608001207147, 17139781905758323226, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6385487366266632060, 16294057552644672316, 9687580313089453282, 9552556216292266897, 5977340097238271765, 10322300200196682981, 279851189829800217, 6918765821995287137, 9754566926160679801, 205142327694293412, 2870457579998112786, 3995355680811906625, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15421658280337698465, 6097183689626534496, 4646487368895915296, 4246851900171193724, 7707653349895837404, 17715988767376665360, 1629791578136936575, 1369739146488483681, 12819365845000407643, 16544719539062425474, 8435616415860238896, 8414041561969840147, 1, 0, 0, 0, 1, 0, 4454659362488555244, 897257401795782847, 1442741355132240277, 10565312036761368185, 5142791099649335720, 14821642720711744364, 14051544049298817271, 750410385838623118, 12529577197437921705, 9250281207577685312, 1289422996858358477, 9991664912056245947, 2678151302770396230, 196396598284240198, 6056580584982795553, 1, 0, 0, 0, 1, 0, 17078534924241776339, 15440110056678900200, 18208650451735606208, 10756948069435380801, 15510754792097734964, 2375067891701857361, 2923239127151948080, 10704182720413467090, 2473371596923514175, 1150752289248225959, 15140294830527696728, 17937489760159731410, 6601966437239502772, 6893308270453759366, 12621557274381914353, 1, 0, 0, 0, 1, 0, 316614558845336509, 2878699202280611836, 4275560082084202144, 7825754886390455440, 7997738108478273878, 11956271016055823946, 8453074578285752653, 17538680525690853062, 3583695132258196536, 10246367578585743447, 1421290680685617214, 5286310130352931456, 1784797448120793789, 10911572374110245694, 13198139370097152194, 1, 0, 0, 0, 1, 0, 12678676945213092865, 15246741769098836296, 15584605922953436007, 13983789395651571583, 13294611871319191983, 5847635127357093482, 9897038047323897370, 4141923705337186001, 8176730118494162678, 6783090395235209659, 7174788237318142123, 9471733465477014135, 670946413872621524, 10285804549311169869, 605479756900086202, 1, 0, 0, 0, 1, 0, 16568523364350885487, 15819937544318835786, 1810889556141981899, 3363240447642516424, 2845656992888419272, 16007826574763812566, 10836844319802726945, 1759841724041652075, 10220987366360269577, 4288337514646499477, 15302356383007635999, 10084364066798723299, 4708938355998137236, 4512217941150685160, 6401077792884902899, 1, 0, 0, 0, 1, 0, 443828493241314088, 17479115015136738827, 16807605577473118694, 7828293012926775020, 4406743315212729130, 17819043892120276345, 10288960109250570842, 8627241529856509742, 12763806424191572386, 10924085850925815890, 11240603387110570141, 4596163035992380964, 10053747442208350154, 1495035938694254211, 4149682069832499543, 1, 0, 0, 0, 1, 0, 3238559664072884360, 9979572324819437588, 9676585927660439650, 12922287692448102380, 16122102826540224213, 1387322623565652732, 295310595529849583, 626496362396505138, 12692366118122891151, 9118931780992437842, 1835696655621331722, 17492638446874188318, 9446845463763503898, 2033490153416681362, 10601663807010949823, 1, 0, 0, 0, 1, 0, 12833432460597635146, 0, 0, 12362167187142713720, 7652433402428128865, 13848956826511295359, 5959646737238852401, 4051444777808751499, 17743718519616976296, 4470738656604083779, 9409022898528060781, 8739778943225234768, 10733909952514206486, 2288182338723422425, 12415014162240143946, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14911169987988052811, 9684204095164476815, 10202942699122698773, 9822906574365710103, 14333518987829918669, 2543793480285047170, 6422638912707970220, 17063170837522968299, 11891715600478694595, 9571493212894702614, 2390601416181918661, 16738431774071597762, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15100444854223162361, 17702995505216793489, 7439539809669146478, 17892016949428967969, 17843924827166978222, 17021793130360212806, 16012433424607683700, 3702512996340883595, 5580010029452924235, 4393284534245665333, 7303237900174645421, 639602489095149029, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7731918223558949955, 10675603116079282076, 13477200069544690909, 9033576496544593982, 10647867748676596435, 11915740833798992018, 6326608805282345628, 2628586313169132635, 1761218265234642115, 7926227231583287531, 2453521579710367516, 13916262071165774844, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18248966067159614734, 13590585102940813084, 9590621322847534573, 4885112663983886856, 13157788436891508553, 11521696315622895181, 8426354436255247671, 2713831240363482992, 3447697248540225808, 17594999963544064287, 2358849405739495388, 1652445317709542069, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14997726253538871503, 13603816939964373123, 12932191302609726157, 12798756157498171562, 12242844110543519517, 1112809250875085271, 14696972132215546141, 17933860786448377030, 10044864192452182412, 12743397052876062010, 8252049255686697090, 9710174156710538584, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8817287785847965336, 3385249563011961849, 17918869724719667108, 8555258669059245167, 14956019708245712821, 12021362864117640865, 16692922442306646447, 12140276230850597158, 7058340312231756422, 16793498368204377302, 1550389821256969487, 3687395741963426550, 1, 0, 0, 0, 1, 0, 13889646877547174618, 5867013684002937049, 3874077199438956671, 7563891540952433248, 112536514236739072, 14326240507681405072, 12593636579411959551, 10570950564294000321, 18151871077622688335, 8874979589420119367, 1606372307127613897, 11424300291678555912, 11520998711037823747, 6750324157015485381, 18198216273587752711, 1, 0, 0, 0, 1, 0, 16236403493045129867, 8532135944457515917, 17647636734684350457, 13463537305496517162, 15195193333392427571, 12352345465945418691, 10174923844635011062, 7668476027270202579, 10359334248806725290, 10085921208436197132, 16448487398099419345, 14911345319478414189, 1869688954383701255, 1421326959851451806, 15957089851173678739, 1, 0, 0, 0, 1, 0, 13764650897714891563, 17810684478882660202, 14031148050915831965, 3808288102601471056, 14347073347558249169, 10584893895333648109, 1428273348489524024, 2062361183656478066, 10866279963718241802, 2718833903563323199, 7493603045769629260, 2533220603754125879, 1133217540165824186, 2198451335895548750, 13002397426121818840, 1, 0, 0, 0, 1, 0, 17725409119032852267, 11323941782055916015, 16251673015114650089, 4938442710501308657, 5613057382731574150, 10105110162171772438, 8183805712769991021, 15900656105857229467, 4713833248608103744, 5975284652827254996, 17140128915513269672, 10662827764253743390, 1360814798563974092, 18204665069024529476, 5861292583325103670, 1, 0, 0, 0, 1, 0, 14914053581161264238, 2620801595702286526, 11717666498402108632, 12002553001135911279, 5693866887050036020, 11964900944541509452, 8293446604021081650, 12256719005104851107, 3995119331147317584, 17181552195820469706, 8512417397041248917, 15742094452256624479, 3435210620583322514, 4160946893194356300, 7010314501210327907, 1, 0, 0, 0, 1, 0, 3562234265760858029, 4769670971948134199, 13385330306078539868, 10789879208843041511, 4107508461331672257, 4621662715196065678, 3079504282059755968, 260627379830442974, 894389675194381154, 179996691661177615, 12193512270869861572, 7196421200244503747, 11336008056438129603, 17326536692088196432, 2381487671462803904, 1, 0, 0, 0, 1, 0, 5906557576131351225, 13293454763685280754, 9930431347496206092, 7069639777384924144, 364669749717258, 6809248840077290249, 17801775841166869486, 13819086418675951632, 14554524254203776994, 8885320358009245035, 3851130964131028937, 9451078778045131871, 5581858847773628805, 6554220297842488502, 10199495361398762521, 1, 0, 0, 0, 1, 0, 2656770040929279434, 0, 0, 15539063566397429438, 17691418632824774891, 1922074210551113159, 3106011472540779982, 15257531885396120213, 12320900210322448034, 11637817792474845578, 3363935513258073239, 7181119043238227738, 18247981403702122132, 9039178885558385498, 6369472266524549650, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10333172214933120836, 15557683662491153084, 1598739907793205518, 6265664197169483681, 7206583663178666402, 6198597980723382916, 10395653141429564317, 15929576060773374367, 7951988307407900542, 17479206923733922587, 10069135081496908116, 16946656379378628774, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3750356548306982137, 12209140182523723096, 14526700523373973306, 9801143914278062154, 18199569338713260127, 7473328648066901490, 12120812098909026742, 9238706649514600628, 13025686387588160039, 8202861560648587401, 4751010459333335795, 5583968744804760129, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12302499613655276109, 17383410983291524378, 16517594411296145407, 2114471287922017076, 11998802949255523211, 1026110231435118088, 14623333492544617469, 6772806779673451094, 10950281275289859162, 6069495537705640, 15084214110056267454, 12827986113643603592, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(13) }, program_info: ProgramInfo { program_hash: Word([6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 14, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 96, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 0, 0, 1, 0, 0, 1, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 0, 0, 1, 0, 0, 1, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5140376474314663948, 3739327994472119619, 12197195286374413309, 8260931550665656557, 18424611315455665672, 8710514240711102938, 13745802786964652170, 6548375970637655697, 14697063750404833549, 11345515238018223131, 809326793687057962, 8353595870573531205, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5151077999657789073, 9855163346786806166, 10427073607190553707, 11893740670479805498, 8660762125905589832, 3087828367487460915, 10807941376803729065, 12966884757436832352, 5887611756450648665, 2946171615755015016, 13043350793597586415, 2540346347559199959, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16885380856972561696, 7272719153662087111, 533047373605454411, 1829926574142237762, 17127340306827455573, 8550318671602553781, 11967821891194701924, 8617173377985249829, 4390455106880745190, 10503353101665672276, 3445826420292422918, 15905617593867500462, 1, 0, 0, 0, 1, 0, 14015495768979275110, 14880246136006978483, 2370383909586342854, 4396313619195267116, 10277182995998348622, 10580779234737523528, 1594484475404924132, 2784948507084849054, 4930631020140393563, 2468953284439066013, 14369692677316723198, 12605921110673978057, 15589073729373314001, 15832983954926147440, 15206447585345432360, 1, 0, 0, 0, 1, 0, 11655043985748250296, 10699504707431232516, 9467299864033965285, 17818361021916066381, 5757159540459665691, 9765809951316535147, 9595530987647092729, 8347633294012310580, 2828555514110129215, 16235476345222743147, 16488861457711574881, 9581721436999738864, 6661690865570834646, 14925506152061129229, 12647708209366536631, 1, 0, 0, 0, 1, 0, 17354386000029748168, 1615091744629199786, 6126471050563264586, 16833029552007335772, 10562329593955594288, 9697859497182376308, 4563063455320265667, 16459952452199547026, 8327420331623942113, 7827742839669371295, 2458019052558535305, 15260860572373553109, 575220748088635860, 18336554683084823555, 6724344971643611017, 1, 0, 0, 0, 1, 0, 10761244172272014098, 18186939778341908967, 9856938012656986962, 9947044966489369966, 18303351465385086236, 6110992258367195164, 7735824317535531109, 8768898256362256567, 453077352291409865, 1609065912712094319, 247484960726213991, 9649122197052954943, 5225807468457901577, 16347954830762298502, 9582673736768413052, 1, 0, 0, 0, 1, 0, 15683239765212415917, 12949077672553569346, 6136438285021512441, 9818108804633787874, 9244678019206311862, 11530371422565574919, 12480600709687621128, 4574304056007112162, 8150970536507693114, 2648588484571064605, 11606973446973456199, 3689293233291605771, 17198482303941924567, 9084874200639035992, 15180713067843619854, 1, 0, 0, 0, 1, 0, 13352191639049950502, 1781612529695982717, 17940295799223377801, 4313511094695098159, 5878623689014611519, 4405616242805307371, 1262088577389795166, 17597264692962831013, 9734673703119078710, 17976467869316326526, 17692030742991723124, 8596529378407272747, 16841535128816011006, 16640836306313302925, 5780865724855930643, 1, 0, 0, 0, 1, 0, 14809719365593713010, 10532643948327499097, 11726590278216945558, 12934070243418782738, 12505885186641282427, 78901366432993105, 5046795949307964432, 8474944897236640626, 8294118794714299790, 4079016485765258670, 7568893198878892067, 9399437128660150397, 9756998763275612257, 16135446855619161594, 5490240700537832368, 1, 0, 0, 0, 1, 0, 1825940038334452510, 0, 0, 1303361134214255144, 17429829341045194126, 4285338701077916719, 2910522803612995552, 6045066589466757281, 3823107055299292863, 17630322765550216924, 4973217863350539721, 6949143047896273946, 11354865285620231158, 7541264006304433571, 10157260196426992044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17525379757599431696, 8834060796313238365, 8610620161032996227, 9527459414368740643, 9178488780906183949, 6890858608219888881, 13578840114630190185, 18189457662137520245, 3979322074577621357, 12504370868862613699, 9966350562627740919, 16215780421699068990, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15824846667317041360, 856881534780831669, 1345962755312618543, 17392858720163980888, 572497659895507109, 10680339138669917038, 2119568863265536467, 17447468029829501860, 5317810489943751161, 7450671729747196018, 10317133817946706776, 12595602375369553246, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8992618192991263654, 8614320689815223473, 5938021660540313570, 500779098360895522, 14724337405152116499, 9892588909603237147, 8158174533637128652, 5366612376176920228, 13663234493876910991, 11869180945716319347, 2674823044861603020, 14007226435224111078, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 12030454825456445148, 14743087584632180635, 804908825530740834, 15978537433270792071, 12876040067831025585, 10995045216798627929, 8201489714833429310, 13655239822733173662, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8962397996249942813, 13564283360082851490, 15320836901220842229, 7059236745058640735, 14597771066871753553, 12891440258701617795, 7976296880270099068, 9869196225863171361, 16723391107514202352, 18076794411180476280, 7318735608001207147, 17139781905758323226, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6385487366266632060, 16294057552644672316, 9687580313089453282, 9552556216292266897, 5977340097238271765, 10322300200196682981, 279851189829800217, 6918765821995287137, 9754566926160679801, 205142327694293412, 2870457579998112786, 3995355680811906625, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15421658280337698465, 6097183689626534496, 4646487368895915296, 4246851900171193724, 7707653349895837404, 17715988767376665360, 1629791578136936575, 1369739146488483681, 12819365845000407643, 16544719539062425474, 8435616415860238896, 8414041561969840147, 1, 0, 0, 0, 1, 0, 4454659362488555244, 897257401795782847, 1442741355132240277, 10565312036761368185, 5142791099649335720, 14821642720711744364, 14051544049298817271, 750410385838623118, 12529577197437921705, 9250281207577685312, 1289422996858358477, 9991664912056245947, 2678151302770396230, 196396598284240198, 6056580584982795553, 1, 0, 0, 0, 1, 0, 17078534924241776339, 15440110056678900200, 18208650451735606208, 10756948069435380801, 15510754792097734964, 2375067891701857361, 2923239127151948080, 10704182720413467090, 2473371596923514175, 1150752289248225959, 15140294830527696728, 17937489760159731410, 6601966437239502772, 6893308270453759366, 12621557274381914353, 1, 0, 0, 0, 1, 0, 316614558845336509, 2878699202280611836, 4275560082084202144, 7825754886390455440, 7997738108478273878, 11956271016055823946, 8453074578285752653, 17538680525690853062, 3583695132258196536, 10246367578585743447, 1421290680685617214, 5286310130352931456, 1784797448120793789, 10911572374110245694, 13198139370097152194, 1, 0, 0, 0, 1, 0, 12678676945213092865, 15246741769098836296, 15584605922953436007, 13983789395651571583, 13294611871319191983, 5847635127357093482, 9897038047323897370, 4141923705337186001, 8176730118494162678, 6783090395235209659, 7174788237318142123, 9471733465477014135, 670946413872621524, 10285804549311169869, 605479756900086202, 1, 0, 0, 0, 1, 0, 16568523364350885487, 15819937544318835786, 1810889556141981899, 3363240447642516424, 2845656992888419272, 16007826574763812566, 10836844319802726945, 1759841724041652075, 10220987366360269577, 4288337514646499477, 15302356383007635999, 10084364066798723299, 4708938355998137236, 4512217941150685160, 6401077792884902899, 1, 0, 0, 0, 1, 0, 443828493241314088, 17479115015136738827, 16807605577473118694, 7828293012926775020, 4406743315212729130, 17819043892120276345, 10288960109250570842, 8627241529856509742, 12763806424191572386, 10924085850925815890, 11240603387110570141, 4596163035992380964, 10053747442208350154, 1495035938694254211, 4149682069832499543, 1, 0, 0, 0, 1, 0, 3238559664072884360, 9979572324819437588, 9676585927660439650, 12922287692448102380, 16122102826540224213, 1387322623565652732, 295310595529849583, 626496362396505138, 12692366118122891151, 9118931780992437842, 1835696655621331722, 17492638446874188318, 9446845463763503898, 2033490153416681362, 10601663807010949823, 1, 0, 0, 0, 1, 0, 12833432460597635146, 0, 0, 12362167187142713720, 7652433402428128865, 13848956826511295359, 5959646737238852401, 4051444777808751499, 17743718519616976296, 4470738656604083779, 9409022898528060781, 8739778943225234768, 10733909952514206486, 2288182338723422425, 12415014162240143946, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14911169987988052811, 9684204095164476815, 10202942699122698773, 9822906574365710103, 14333518987829918669, 2543793480285047170, 6422638912707970220, 17063170837522968299, 11891715600478694595, 9571493212894702614, 2390601416181918661, 16738431774071597762, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15100444854223162361, 17702995505216793489, 7439539809669146478, 17892016949428967969, 17843924827166978222, 17021793130360212806, 16012433424607683700, 3702512996340883595, 5580010029452924235, 4393284534245665333, 7303237900174645421, 639602489095149029, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7731918223558949955, 10675603116079282076, 13477200069544690909, 9033576496544593982, 10647867748676596435, 11915740833798992018, 6326608805282345628, 2628586313169132635, 1761218265234642115, 7926227231583287531, 2453521579710367516, 13916262071165774844, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 8523492539397344614, 13282343245327117747, 16657610054734022844, 10245076951199455280, 11605105809497505058, 15430453444364458588, 11406074192870264875, 6409620289494267476, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11959214793721861949, 11044849754686238278, 5121401795821831283, 3548930057165921670, 4141253528664299662, 4690506171811599662, 7471531250255239926, 16928201695930024468, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18248966067159614734, 13590585102940813084, 9590621322847534573, 4885112663983886856, 13157788436891508553, 11521696315622895181, 8426354436255247671, 2713831240363482992, 3447697248540225808, 17594999963544064287, 2358849405739495388, 1652445317709542069, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14997726253538871503, 13603816939964373123, 12932191302609726157, 12798756157498171562, 12242844110543519517, 1112809250875085271, 14696972132215546141, 17933860786448377030, 10044864192452182412, 12743397052876062010, 8252049255686697090, 9710174156710538584, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8817287785847965336, 3385249563011961849, 17918869724719667108, 8555258669059245167, 14956019708245712821, 12021362864117640865, 16692922442306646447, 12140276230850597158, 7058340312231756422, 16793498368204377302, 1550389821256969487, 3687395741963426550, 1, 0, 0, 0, 1, 0, 13889646877547174618, 5867013684002937049, 3874077199438956671, 7563891540952433248, 112536514236739072, 14326240507681405072, 12593636579411959551, 10570950564294000321, 18151871077622688335, 8874979589420119367, 1606372307127613897, 11424300291678555912, 11520998711037823747, 6750324157015485381, 18198216273587752711, 1, 0, 0, 0, 1, 0, 16236403493045129867, 8532135944457515917, 17647636734684350457, 13463537305496517162, 15195193333392427571, 12352345465945418691, 10174923844635011062, 7668476027270202579, 10359334248806725290, 10085921208436197132, 16448487398099419345, 14911345319478414189, 1869688954383701255, 1421326959851451806, 15957089851173678739, 1, 0, 0, 0, 1, 0, 13764650897714891563, 17810684478882660202, 14031148050915831965, 3808288102601471056, 14347073347558249169, 10584893895333648109, 1428273348489524024, 2062361183656478066, 10866279963718241802, 2718833903563323199, 7493603045769629260, 2533220603754125879, 1133217540165824186, 2198451335895548750, 13002397426121818840, 1, 0, 0, 0, 1, 0, 17725409119032852267, 11323941782055916015, 16251673015114650089, 4938442710501308657, 5613057382731574150, 10105110162171772438, 8183805712769991021, 15900656105857229467, 4713833248608103744, 5975284652827254996, 17140128915513269672, 10662827764253743390, 1360814798563974092, 18204665069024529476, 5861292583325103670, 1, 0, 0, 0, 1, 0, 14914053581161264238, 2620801595702286526, 11717666498402108632, 12002553001135911279, 5693866887050036020, 11964900944541509452, 8293446604021081650, 12256719005104851107, 3995119331147317584, 17181552195820469706, 8512417397041248917, 15742094452256624479, 3435210620583322514, 4160946893194356300, 7010314501210327907, 1, 0, 0, 0, 1, 0, 3562234265760858029, 4769670971948134199, 13385330306078539868, 10789879208843041511, 4107508461331672257, 4621662715196065678, 3079504282059755968, 260627379830442974, 894389675194381154, 179996691661177615, 12193512270869861572, 7196421200244503747, 11336008056438129603, 17326536692088196432, 2381487671462803904, 1, 0, 0, 0, 1, 0, 5906557576131351225, 13293454763685280754, 9930431347496206092, 7069639777384924144, 364669749717258, 6809248840077290249, 17801775841166869486, 13819086418675951632, 14554524254203776994, 8885320358009245035, 3851130964131028937, 9451078778045131871, 5581858847773628805, 6554220297842488502, 10199495361398762521, 1, 0, 0, 0, 1, 0, 2656770040929279434, 0, 0, 15539063566397429438, 17691418632824774891, 1922074210551113159, 3106011472540779982, 15257531885396120213, 12320900210322448034, 11637817792474845578, 3363935513258073239, 7181119043238227738, 18247981403702122132, 9039178885558385498, 6369472266524549650, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10333172214933120836, 15557683662491153084, 1598739907793205518, 6265664197169483681, 7206583663178666402, 6198597980723382916, 10395653141429564317, 15929576060773374367, 7951988307407900542, 17479206923733922587, 10069135081496908116, 16946656379378628774, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3750356548306982137, 12209140182523723096, 14526700523373973306, 9801143914278062154, 18199569338713260127, 7473328648066901490, 12120812098909026742, 9238706649514600628, 13025686387588160039, 8202861560648587401, 4751010459333335795, 5583968744804760129, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12302499613655276109, 17383410983291524378, 16517594411296145407, 2114471287922017076, 11998802949255523211, 1026110231435118088, 14623333492544617469, 6772806779673451094, 10950281275289859162, 6069495537705640, 15084214110056267454, 12827986113643603592, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552, 8214490973132607971, 4584625016228750380, 7448701979965755247, 12849137552501188796, 677561570464011141, 6253001344519856608, 1607381721595724854, 11319208922614274152, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(13) }, program_info: ProgramInfo { program_hash: Word([6116677274871151273, 10392133002436897113, 10134148635057625602, 12864813595450034552]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 14, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 96, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_03.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_03.snap index 683684ddbf..a11268f47f 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_03.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_03.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 0, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 1, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_04.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_04.snap index 3e283a0d35..04ad908689 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_04.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_04.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_05.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_05.snap index 683684ddbf..a11268f47f 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_05.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_05.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 0, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 1, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 1, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14059267169109730234, 15833028045737259664, 4457596741936238930, 8186419089203192999, 13502722698945446624, 16864340361327671903, 6567391571487826395, 13313027311321423572, 946461078672821334, 10841411014448826746, 8422262931452347509, 9168769012195838974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15746924929585133009, 379315838026506093, 12529581077675993243, 15318603549361168513, 10582364865337924932, 2636070061904000825, 5204289601743072522, 9192034959170904294, 16281780351388912901, 10924324070009278511, 13885570107923725144, 8757246072351383525, 1, 0, 0, 0, 1, 0, 0, 0, 0, 471985631500087772, 8581974592770288933, 303974201734355881, 7911471416782656233, 8264438684589566467, 1539270658943308645, 3431536436519013066, 14701500658652215925, 2935418863412242354, 4390811061445162297, 235244799151795110, 15819587373362991575, 1, 0, 0, 0, 1, 0, 12803581155021505789, 1617229089722186747, 11821086028219467787, 16946433723443173275, 17442451301272882541, 13345903392866909652, 14239435248344205979, 7775924941916048886, 8663103496298937284, 18098398151169262506, 3854356596578551734, 14713353090133347394, 10665404042695900090, 17975760300270072840, 6330331124468459419, 1, 0, 0, 0, 1, 0, 4117165326757319536, 1434871395181292700, 5147296384675574401, 18402496786565368100, 1541891846645406613, 6608322246477847509, 113263425049039362, 14624701183045087851, 5418421295167202847, 9902960937688969164, 8526809416150489728, 8319785044806982194, 15369021590994653978, 11260622121353286786, 10468588157075103568, 1, 0, 0, 0, 1, 0, 10779284519276237242, 5207917218557150537, 17102744930422995322, 7881354678273462636, 9096730616149686024, 8889792067304111866, 17358468187481791647, 12209401598010007429, 10326065236143981873, 259487815978835763, 2939637999200097803, 2244733962249620937, 7652640894347806080, 16601834208041636644, 10257339134394161483, 1, 0, 0, 0, 1, 0, 15007735984166481726, 2893692142669467166, 5586756186106745240, 7881520773741268125, 1119526938685078607, 8580323529307502020, 1868806426895026968, 11046353624103181594, 2355139499180822246, 13294225392413433281, 8555475415255527439, 5921002467687226204, 4047796662675347846, 2612703737764640459, 17174772404727048357, 1, 0, 0, 0, 1, 0, 11641703905547654953, 13518861492744284220, 13602438854947769427, 11440521690988525934, 1858131981777548381, 14683551372837095812, 8741184015917561905, 4381652925229768341, 3668923621194401622, 8742633689618768661, 17171454789201612359, 17386925554974145101, 6224704259817574157, 14396227383672448392, 13817494132369433237, 1, 0, 0, 0, 1, 0, 17007411413036910904, 6937272254859089520, 3345146633011014675, 16854936978988550164, 4472804247539583969, 11270159100715194202, 15367181090448289261, 1868429356172715569, 3430895131654614161, 1015593294205135440, 10191353484336583572, 8582026933349467190, 10834199646006576067, 15953404371899770169, 12856235623981550070, 1, 0, 0, 0, 1, 0, 6583655571084272508, 1064174383094762843, 14004531006300423026, 11420674364099598202, 8460103377465445883, 10804815118997327370, 7301079719327054003, 4877497612363750655, 14559648290526166949, 9120291006888379304, 2115641271859045975, 16434619985909351985, 12242894720083399562, 576711179775643850, 7537989708572581312, 1, 0, 0, 0, 1, 0, 9177904733833547672, 0, 0, 4263756598719013378, 16645964836945405904, 1535579717520953536, 9288443086735636960, 12124737918817624189, 3028234720115016827, 6680864214558642932, 12931918488324919856, 8451565207539691282, 17045153176928915002, 10503620158827014837, 12295542285792207282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13465875315346524402, 16176623117443515258, 208588932528011586, 17461402434481489861, 7578220797847929864, 17564919688262005304, 9600963709893327666, 11244752067809188397, 7714774968702541161, 13892339685592049122, 5442709211693844142, 6411496154095679628, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17464705757459592393, 15081244610133230814, 11685358340804306780, 10152174670869705735, 9410406960468072857, 284282844772359316, 7733975108380115257, 2111913529644288504, 14978023560208702638, 3881709886225480466, 2968563472347562608, 96618257160083950, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14751425303934963720, 6410948793715747581, 2822178276157738566, 6117144343302310887, 4811333449307081983, 7938696543505248162, 3435995547523177385, 6112640616610282754, 18014742166879778909, 10446442293007407525, 10528964699829495885, 2708395562256972928, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 5256913258227871425, 17100537000217132265, 10362535235958450122, 6599190416745833044, 5450578834500306709, 1539493896147927159, 358459342719025633, 13820925760592258770, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_06.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_06.snap index 3e283a0d35..04ad908689 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_06.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_06.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5598651459581075585, 7804753453550466256, 17777748786253636403, 9435312778805252724, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 84, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13247747688876077858, 1563629168745730928, 9477262435683869924, 1586451078180607598, 10199880931320172189, 12237115836192970750, 15524901873579080579, 18112581651832813996, 9554433906850032874, 5132111129018882891, 18017734206314589878, 2376871353626003378, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18204236545845216971, 4862512017968946683, 9199231093019338048, 9325815886784366656, 6982964906206022277, 13532373892635206986, 14961355291644520251, 7934301823485851614, 4012321235764609039, 8232522030470930177, 4362746362325529522, 17667748366842763551, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16083593158731167399, 1035294938480129016, 7358751435793575899, 13163107377789060321, 18160468829511284938, 11668565565569624948, 8912131487655833337, 13134589595174512908, 14967212595115142793, 2748555984042091513, 5580595613883635850, 1405929090442079600, 1, 0, 0, 0, 1, 0, 16924508715632711059, 12042164907586537699, 6879187775976945062, 4357419437649084221, 17121277837906333314, 12569972625839259527, 5998117226166788975, 13459748022261389691, 2114739335810906841, 845467818172067610, 5143267856379088965, 5983394632166978443, 15852736438270791360, 14186966130004258435, 18135181650619726914, 1, 0, 0, 0, 1, 0, 685023358845462459, 14587753177249686178, 16926803897274392790, 7975999984217399211, 8221980324343257318, 10432134440683583258, 5188984820381727203, 9448428205117043728, 9578952411771586845, 918209442918452849, 18193547062192211825, 2140629501848088776, 16659854091479845434, 10540307613825778005, 203041400479358567, 1, 0, 0, 0, 1, 0, 12541032576104625773, 16170387295460866341, 12891686882411197461, 7889055060352596454, 4403991158284421772, 1153491566876700606, 5955476415838559193, 8961849300614763067, 4327169169737696049, 15710903694873023395, 17429784608409914678, 10552757613235067722, 16332742745573253042, 9544366711268571215, 15733337581560247916, 1, 0, 0, 0, 1, 0, 18167944694759834272, 12663738219026080288, 12343732554083789364, 10296105519823441978, 13052305487168984918, 6340590356564925801, 13637649140457772157, 17666409503469399853, 10474171567958477310, 16794196935209020317, 5437598344549503419, 8538471352201975220, 5680967626748162975, 16022817295707876509, 816639760928622921, 1, 0, 0, 0, 1, 0, 10492313957532501655, 17437594987253247748, 17921559395393369208, 13275897735411980967, 8123717249091864283, 8278469467176979574, 2032050757569801828, 11693451034972088239, 2067286230266639471, 6815831073966054431, 14661239785476454049, 1148470236137421383, 8017806737059891905, 332425507059551196, 6031165808075129231, 1, 0, 0, 0, 1, 0, 3252881356430421557, 4587003287498047415, 6869066489621458415, 4028816571826363002, 2083501518846346052, 6710003146178124596, 7820237015849984079, 866468160396608077, 6622135657383660119, 7891509834730356602, 8985292275604857439, 14632278337044440617, 1765857304688336746, 5135102707173364321, 14155312441647748702, 1, 0, 0, 0, 1, 0, 15822931891080832543, 8232418911131413437, 13767571106456033164, 15475498524455915389, 18315976927222050841, 11273188656572444234, 7746677489393361812, 12005877568613345660, 813491835360077960, 15303933786232509118, 12912789541737329022, 5696241881348246065, 595269491299106953, 426018854260317513, 7632437875765360091, 1, 0, 0, 0, 1, 0, 15885522252972164471, 0, 0, 8883008337890476036, 7777530579170086866, 3764388601356982695, 6142067256785271224, 12806387721803954058, 8848575890036236601, 3878821330615144039, 1232238311229055715, 13300309889942581843, 18004816485425051763, 14542650836653761124, 17846423932362838045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14581052801302714514, 4106083518382761605, 15563655808705061071, 14737929225229310854, 8854457266879028181, 7028466390812097322, 15839551803056895538, 5422499495491255741, 1639569934817636487, 17541610204110287382, 4457636384061007994, 1154262141907751651, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17999554639252319772, 3917672276375751396, 5533608926617884295, 17685816709290022661, 9558115804602486754, 8403721226663073636, 2863101478933748100, 8009273299237215820, 17233518173045382262, 7370145379849234412, 2416704573314226662, 15744039038114735423, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18022889162320300611, 667054191578263747, 14514898346462505299, 5568614684720127113, 6487880825188915613, 8970732296705167988, 6867483661888889167, 13359803287975487032, 14413924905126977169, 11764023996857035803, 914323423605581375, 13449385390195333360, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 2384716068805359876, 12459739889109502988, 11007533278239168078, 5187224287159924757, 9045462722956532208, 3516218181999416212, 6601699247185721889, 16051125308748956016, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 13620833136975709089, 2256486347761721492, 5193960644663470490, 12344784587178360875, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11629723830403400020, 7555819500301263096, 1908428216714745226, 18296820143542754124, 5022880593775506902, 12438672130810751909, 9942094792989095510, 10242077034078069399, 6534480484041428863, 1267311017976162806, 7398379382324753631, 13467318737723490903, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18085092721393681494, 7871576915936585054, 2226486931669462500, 5759648439566973806, 7356080910092118039, 10240118010240816453, 18239658104155677632, 6920809802339641674, 3251048018398498863, 171317623411600853, 16529615322051348437, 18417997150771375303, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5334827122981806215, 7738161198426062879, 16096322966046779578, 7690180744863199464, 16589884839242022257, 12454995736750842450, 3247221802734244696, 17643499204383222535, 14672293546278713057, 14846028244624432327, 17750754114621262532, 7719389523268106465, 1, 0, 0, 0, 1, 0, 14999821401736289617, 15448865933229589054, 13583843693540182696, 18131418839636252978, 4439752770537371709, 5448090446075942959, 6255055536007924620, 8919754405551141869, 12272610174663972685, 8138145110381489386, 16688592460292823795, 16728924149188845306, 5697605161887258162, 3376246851343252040, 2784882046013758615, 1, 0, 0, 0, 1, 0, 14635509374075973423, 12677010964369607514, 8962420667996168153, 3843332007587847712, 8114913103795360695, 18236464326626014645, 3970724348518176437, 1189869440416317038, 9344021820453066790, 13363880742094688735, 1827636079652666195, 8277248794545234814, 17428436932452366793, 10370890449220293026, 10938440435726947483, 1, 0, 0, 0, 1, 0, 7061896277845699344, 1873336673338143769, 8446543978270747820, 133391072621725577, 17840970837055628605, 7355089244606367886, 8497160540604180804, 3063592889799439815, 7982818396816137943, 9226283480795415930, 7777539981955361461, 5304102959326456112, 18287702590376570538, 1433120707818296652, 16923840111614250132, 1, 0, 0, 0, 1, 0, 4447115381548236223, 480042594266264640, 5488247032936248678, 4078804678813269002, 8930953641447820548, 782991345573128788, 8712431777609915948, 815213714413043438, 14730751205912092663, 16932487676782686187, 2461265848652382458, 11611317382660466625, 15533043966546096492, 13503968807830695383, 7800595096011710855, 1, 0, 0, 0, 1, 0, 6709571999678684256, 11804490432649482304, 5849114674484871556, 10348876437499804673, 1537331530871119668, 5444667365009856158, 16603575236790899764, 8569284627647542389, 3352703426322824443, 1135364094435597517, 4311636691398707716, 2791259658093074998, 9812515853737376613, 2051419284241394287, 8534668514381008137, 1, 0, 0, 0, 1, 0, 2787989614403510536, 6304392612397259174, 9351992476691347166, 13735545676744754358, 18158002788694963974, 6385821061540880880, 10648493462065257860, 17214386397833253270, 1785076194951656280, 7852757539889945333, 14107503556614837834, 3545073666350874448, 9332017051661502953, 9974196014981023153, 4715851494578741692, 1, 0, 0, 0, 1, 0, 7775468742954420419, 17692887772382430342, 9705826033582956692, 9410850814958744902, 15848213422225602213, 8831024347202442032, 5730064365163707705, 5744303806832189345, 12701095265259304800, 1274251095252206369, 12500666959478542023, 10971920968668641865, 4083552985517123622, 247517241416190936, 9297942977636733700, 1, 0, 0, 0, 1, 0, 17152107383937626708, 0, 0, 9684778724196116231, 18144229372703820177, 15267089652751109873, 4559302720015817859, 75478605149737153, 10397456717804752138, 12911489632740586743, 9045450374393109306, 9884965742324813117, 13871430865741604308, 581610329922371147, 8250812173422443178, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5677068088590394277, 420461259745383997, 5461641667913740527, 12375228725744876260, 10408597074326334289, 17926066510128935923, 11042755251558401992, 16568845003086625163, 16445466086575260512, 3993419962022258191, 5798502399718959312, 14694981892968238671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13067481717060632118, 17094012225747072853, 4977882380646661156, 13367890413392736054, 1854469405851562328, 1264814027228690376, 1655214279385078584, 4695178656129701184, 14688957924306712254, 6722743736070459606, 5346182502077854664, 485814636516518185, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17366862825980504064, 16556024871956851478, 5148753722704728721, 15438373163420410642, 5120877191992423544, 15123699931666188121, 17558359767143120899, 1678315832465296045, 16306354913676224825, 1297747773924291443, 14220066076326577834, 14546030952858743710, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526, 6125088443291536169, 2665390174743669239, 18009389558374812227, 15789153556893733830, 16604794485775028126, 15433589206667095645, 1379414419793409060, 17545164675990066495, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(11) }, program_info: ProgramInfo { program_hash: Word([12752059346458920613, 18135096529078946099, 13200399719329805350, 905179285088193526]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 12, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_07.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_07.snap index 64c0008994..8a7edfcbe6 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_07.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_07.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(8) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 9, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(8) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 9, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_08.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_08.snap index 64c0008994..8a7edfcbe6 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_08.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_08.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(8) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 9, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(8) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 9, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_09.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_09.snap index 3175690aa2..24780891db 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_09.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_09.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 0, 41, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 7, 1, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6811813611500970866, 9860311344216082483, 279816225750213135, 1439899159397533405, 4254579990847524851, 13079805966919738688, 6743125803107521679, 4681956701739972184, 7418486580310857761, 7994119771983090684, 13498446627995378981, 12442366360197298238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12330218901740233931, 4356844177334189800, 3650402777016745376, 14727094498238943916, 17114576923598071233, 12218492589526939611, 1867163304908812007, 3297507518564977562, 17019749743168160467, 1155757367334915164, 6649809143130705797, 6098667720777990098, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16287800225917557614, 8724150062868049447, 1781472746866786234, 10746359213734270257, 14501968992007296006, 1562069618543971026, 1669000574108639518, 10978317254779656082, 4937487787523099272, 14020255521522346779, 9522654220689816851, 15014871424912942550, 1, 0, 0, 0, 1, 0, 14877174880820946473, 17456558212836048017, 17739158337269775126, 2390658038828763199, 3846911055059526201, 10113987313323159199, 1223812058834541930, 7693932549469059792, 952986602744509450, 3582028644269610893, 18354142145846877062, 9870317658000082520, 17824815497741664585, 7559480440412863769, 15008680935203256586, 1, 0, 0, 0, 1, 0, 13977067499243959482, 11395256034671298845, 7327799218104320227, 2699367049541735206, 7763338432894318220, 30358156203896034, 6743090978755405998, 12027612752909244618, 2303575863276843576, 13566879202183211144, 14991347734816807516, 15545533182903182788, 3824341730458112374, 8930056613191782368, 10887298179723462085, 1, 0, 0, 0, 1, 0, 8858901812137030682, 13558987077266275339, 15564429589094530081, 5734803687955113279, 15092595329879644577, 1697370376582801763, 13966013418513317366, 15212529265532680398, 11814345067449767109, 12248403740758614702, 13253613960908137010, 13069247508460875244, 5646668393535724753, 12836057040498431452, 6132850845308416918, 1, 0, 0, 0, 1, 0, 3289076678693837113, 3306415136959427537, 4595381067892187327, 15617193812494172197, 13969944955380272714, 2151092097708635255, 9308934663460035993, 17701622526704384546, 10643130636190759117, 10608583573536775206, 2924854172257996410, 16966215805924461950, 11523838157115606042, 13766601347831535388, 15461729627686219061, 1, 0, 0, 0, 1, 0, 2861046167966645052, 10889239779607274128, 17320053671944779813, 3406927099241203725, 4689628285093180625, 8991051645303444091, 15420175838347825984, 10581163748471525208, 2494640429618639710, 5287408014276309700, 12153757963762118208, 8235209133198882488, 16153951788992043302, 6738693051085880966, 17758791276367026584, 1, 0, 0, 0, 1, 0, 10308255496352503262, 18121871418048845228, 15889419620549458343, 10343975768128176185, 1524422576558323017, 10037026397378548640, 11821902144147060712, 11001907572334629439, 15808731023964574299, 9790979724735385269, 15700324760341857643, 17774065041915838082, 10370417002357863310, 14069036937855587505, 12405462687145854473, 1, 0, 0, 0, 1, 0, 11515575222719100082, 3607722074361327345, 10538200152279946362, 3757345954094976880, 3511571172448102031, 18213897356329070177, 10064659859509677191, 724394552750888620, 1595171953489970254, 11073532118063625032, 9731412496448089833, 5891290976833577870, 11096622266210541923, 1899062451757954377, 8384214154009398478, 1, 0, 0, 0, 1, 0, 5623476244212125463, 0, 0, 11387279664761561894, 16119779393022010645, 12476469095199609689, 3278355048806054125, 11468668142758644503, 4997071000317359325, 17451936898459652544, 16157291854026127596, 2945651218563202825, 11746170412650491065, 7698809547406684914, 18261819862243438027, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12664138717389652380, 16373019178487693626, 5311930945536331644, 4616652429570306671, 2671393322368710032, 7020445890779083806, 15646972017585065174, 16340142805513243131, 2481092360881257830, 6535987403990440638, 3104393142368480565, 17079185842171546000, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8299034149894841811, 13423474518210064130, 7223353560134237057, 3777113587480581710, 1059544940949021637, 13774982404484476980, 8948369964312160088, 13982894413446367987, 10656699665804756215, 10122156746538229970, 7738728989754721313, 2573099324947734045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141583402420192864, 10379152206886126257, 13509433978352760019, 7620976189553973499, 18127894597596272634, 17184349270149775183, 12421841574297279117, 16491357058269217705, 2380753665748314674, 3728282910211741030, 4802195899845329288, 9396372422985936818, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 0, 41, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 7, 1, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6811813611500970866, 9860311344216082483, 279816225750213135, 1439899159397533405, 4254579990847524851, 13079805966919738688, 6743125803107521679, 4681956701739972184, 7418486580310857761, 7994119771983090684, 13498446627995378981, 12442366360197298238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12330218901740233931, 4356844177334189800, 3650402777016745376, 14727094498238943916, 17114576923598071233, 12218492589526939611, 1867163304908812007, 3297507518564977562, 17019749743168160467, 1155757367334915164, 6649809143130705797, 6098667720777990098, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16287800225917557614, 8724150062868049447, 1781472746866786234, 10746359213734270257, 14501968992007296006, 1562069618543971026, 1669000574108639518, 10978317254779656082, 4937487787523099272, 14020255521522346779, 9522654220689816851, 15014871424912942550, 1, 0, 0, 0, 1, 0, 14877174880820946473, 17456558212836048017, 17739158337269775126, 2390658038828763199, 3846911055059526201, 10113987313323159199, 1223812058834541930, 7693932549469059792, 952986602744509450, 3582028644269610893, 18354142145846877062, 9870317658000082520, 17824815497741664585, 7559480440412863769, 15008680935203256586, 1, 0, 0, 0, 1, 0, 13977067499243959482, 11395256034671298845, 7327799218104320227, 2699367049541735206, 7763338432894318220, 30358156203896034, 6743090978755405998, 12027612752909244618, 2303575863276843576, 13566879202183211144, 14991347734816807516, 15545533182903182788, 3824341730458112374, 8930056613191782368, 10887298179723462085, 1, 0, 0, 0, 1, 0, 8858901812137030682, 13558987077266275339, 15564429589094530081, 5734803687955113279, 15092595329879644577, 1697370376582801763, 13966013418513317366, 15212529265532680398, 11814345067449767109, 12248403740758614702, 13253613960908137010, 13069247508460875244, 5646668393535724753, 12836057040498431452, 6132850845308416918, 1, 0, 0, 0, 1, 0, 3289076678693837113, 3306415136959427537, 4595381067892187327, 15617193812494172197, 13969944955380272714, 2151092097708635255, 9308934663460035993, 17701622526704384546, 10643130636190759117, 10608583573536775206, 2924854172257996410, 16966215805924461950, 11523838157115606042, 13766601347831535388, 15461729627686219061, 1, 0, 0, 0, 1, 0, 2861046167966645052, 10889239779607274128, 17320053671944779813, 3406927099241203725, 4689628285093180625, 8991051645303444091, 15420175838347825984, 10581163748471525208, 2494640429618639710, 5287408014276309700, 12153757963762118208, 8235209133198882488, 16153951788992043302, 6738693051085880966, 17758791276367026584, 1, 0, 0, 0, 1, 0, 10308255496352503262, 18121871418048845228, 15889419620549458343, 10343975768128176185, 1524422576558323017, 10037026397378548640, 11821902144147060712, 11001907572334629439, 15808731023964574299, 9790979724735385269, 15700324760341857643, 17774065041915838082, 10370417002357863310, 14069036937855587505, 12405462687145854473, 1, 0, 0, 0, 1, 0, 11515575222719100082, 3607722074361327345, 10538200152279946362, 3757345954094976880, 3511571172448102031, 18213897356329070177, 10064659859509677191, 724394552750888620, 1595171953489970254, 11073532118063625032, 9731412496448089833, 5891290976833577870, 11096622266210541923, 1899062451757954377, 8384214154009398478, 1, 0, 0, 0, 1, 0, 5623476244212125463, 0, 0, 11387279664761561894, 16119779393022010645, 12476469095199609689, 3278355048806054125, 11468668142758644503, 4997071000317359325, 17451936898459652544, 16157291854026127596, 2945651218563202825, 11746170412650491065, 7698809547406684914, 18261819862243438027, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12664138717389652380, 16373019178487693626, 5311930945536331644, 4616652429570306671, 2671393322368710032, 7020445890779083806, 15646972017585065174, 16340142805513243131, 2481092360881257830, 6535987403990440638, 3104393142368480565, 17079185842171546000, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8299034149894841811, 13423474518210064130, 7223353560134237057, 3777113587480581710, 1059544940949021637, 13774982404484476980, 8948369964312160088, 13982894413446367987, 10656699665804756215, 10122156746538229970, 7738728989754721313, 2573099324947734045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141583402420192864, 10379152206886126257, 13509433978352760019, 7620976189553973499, 18127894597596272634, 17184349270149775183, 12421841574297279117, 16491357058269217705, 2380753665748314674, 3728282910211741030, 4802195899845329288, 9396372422985936818, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_10.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_10.snap index 443647eae8..e5e0da9157 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_10.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_10.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 0, 41, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 7, 1, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 1, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 0, 41, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 9, 1, 0, 0, 1, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 12, 1, 14, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 6811813611500970866, 9860311344216082483, 279816225750213135, 1439899159397533405, 4254579990847524851, 13079805966919738688, 6743125803107521679, 4681956701739972184, 7418486580310857761, 7994119771983090684, 13498446627995378981, 12442366360197298238, 2, 0, 0, 0, 1, 0, 0, 0, 0, 12330218901740233931, 4356844177334189800, 3650402777016745376, 14727094498238943916, 17114576923598071233, 12218492589526939611, 1867163304908812007, 3297507518564977562, 17019749743168160467, 1155757367334915164, 6649809143130705797, 6098667720777990098, 2, 0, 0, 0, 1, 0, 0, 0, 0, 16287800225917557614, 8724150062868049447, 1781472746866786234, 10746359213734270257, 14501968992007296006, 1562069618543971026, 1669000574108639518, 10978317254779656082, 4937487787523099272, 14020255521522346779, 9522654220689816851, 15014871424912942550, 2, 0, 0, 0, 1, 0, 14877174880820946473, 17456558212836048017, 17739158337269775126, 2390658038828763199, 3846911055059526201, 10113987313323159199, 1223812058834541930, 7693932549469059792, 952986602744509450, 3582028644269610893, 18354142145846877062, 9870317658000082520, 17824815497741664585, 7559480440412863769, 15008680935203256586, 2, 0, 0, 0, 1, 0, 13977067499243959482, 11395256034671298845, 7327799218104320227, 2699367049541735206, 7763338432894318220, 30358156203896034, 6743090978755405998, 12027612752909244618, 2303575863276843576, 13566879202183211144, 14991347734816807516, 15545533182903182788, 3824341730458112374, 8930056613191782368, 10887298179723462085, 2, 0, 0, 0, 1, 0, 8858901812137030682, 13558987077266275339, 15564429589094530081, 5734803687955113279, 15092595329879644577, 1697370376582801763, 13966013418513317366, 15212529265532680398, 11814345067449767109, 12248403740758614702, 13253613960908137010, 13069247508460875244, 5646668393535724753, 12836057040498431452, 6132850845308416918, 2, 0, 0, 0, 1, 0, 3289076678693837113, 3306415136959427537, 4595381067892187327, 15617193812494172197, 13969944955380272714, 2151092097708635255, 9308934663460035993, 17701622526704384546, 10643130636190759117, 10608583573536775206, 2924854172257996410, 16966215805924461950, 11523838157115606042, 13766601347831535388, 15461729627686219061, 2, 0, 0, 0, 1, 0, 2861046167966645052, 10889239779607274128, 17320053671944779813, 3406927099241203725, 4689628285093180625, 8991051645303444091, 15420175838347825984, 10581163748471525208, 2494640429618639710, 5287408014276309700, 12153757963762118208, 8235209133198882488, 16153951788992043302, 6738693051085880966, 17758791276367026584, 2, 0, 0, 0, 1, 0, 10308255496352503262, 18121871418048845228, 15889419620549458343, 10343975768128176185, 1524422576558323017, 10037026397378548640, 11821902144147060712, 11001907572334629439, 15808731023964574299, 9790979724735385269, 15700324760341857643, 17774065041915838082, 10370417002357863310, 14069036937855587505, 12405462687145854473, 2, 0, 0, 0, 1, 0, 11515575222719100082, 3607722074361327345, 10538200152279946362, 3757345954094976880, 3511571172448102031, 18213897356329070177, 10064659859509677191, 724394552750888620, 1595171953489970254, 11073532118063625032, 9731412496448089833, 5891290976833577870, 11096622266210541923, 1899062451757954377, 8384214154009398478, 2, 0, 0, 0, 1, 0, 5623476244212125463, 0, 0, 11387279664761561894, 16119779393022010645, 12476469095199609689, 3278355048806054125, 11468668142758644503, 4997071000317359325, 17451936898459652544, 16157291854026127596, 2945651218563202825, 11746170412650491065, 7698809547406684914, 18261819862243438027, 2, 0, 0, 0, 1, 0, 0, 0, 0, 12664138717389652380, 16373019178487693626, 5311930945536331644, 4616652429570306671, 2671393322368710032, 7020445890779083806, 15646972017585065174, 16340142805513243131, 2481092360881257830, 6535987403990440638, 3104393142368480565, 17079185842171546000, 2, 0, 0, 0, 1, 0, 0, 0, 0, 8299034149894841811, 13423474518210064130, 7223353560134237057, 3777113587480581710, 1059544940949021637, 13774982404484476980, 8948369964312160088, 13982894413446367987, 10656699665804756215, 10122156746538229970, 7738728989754721313, 2573099324947734045, 2, 0, 0, 0, 1, 0, 0, 0, 0, 4141583402420192864, 10379152206886126257, 13509433978352760019, 7620976189553973499, 18127894597596272634, 17184349270149775183, 12421841574297279117, 16491357058269217705, 2380753665748314674, 3728282910211741030, 4802195899845329288, 9396372422985936818, 2, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 2, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(17) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 18, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 0, 41, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 7, 1, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 1, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 0, 41, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 9, 1, 0, 0, 1, 0, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 12, 1, 14, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 6811813611500970866, 9860311344216082483, 279816225750213135, 1439899159397533405, 4254579990847524851, 13079805966919738688, 6743125803107521679, 4681956701739972184, 7418486580310857761, 7994119771983090684, 13498446627995378981, 12442366360197298238, 2, 0, 0, 0, 1, 0, 0, 0, 0, 12330218901740233931, 4356844177334189800, 3650402777016745376, 14727094498238943916, 17114576923598071233, 12218492589526939611, 1867163304908812007, 3297507518564977562, 17019749743168160467, 1155757367334915164, 6649809143130705797, 6098667720777990098, 2, 0, 0, 0, 1, 0, 0, 0, 0, 16287800225917557614, 8724150062868049447, 1781472746866786234, 10746359213734270257, 14501968992007296006, 1562069618543971026, 1669000574108639518, 10978317254779656082, 4937487787523099272, 14020255521522346779, 9522654220689816851, 15014871424912942550, 2, 0, 0, 0, 1, 0, 14877174880820946473, 17456558212836048017, 17739158337269775126, 2390658038828763199, 3846911055059526201, 10113987313323159199, 1223812058834541930, 7693932549469059792, 952986602744509450, 3582028644269610893, 18354142145846877062, 9870317658000082520, 17824815497741664585, 7559480440412863769, 15008680935203256586, 2, 0, 0, 0, 1, 0, 13977067499243959482, 11395256034671298845, 7327799218104320227, 2699367049541735206, 7763338432894318220, 30358156203896034, 6743090978755405998, 12027612752909244618, 2303575863276843576, 13566879202183211144, 14991347734816807516, 15545533182903182788, 3824341730458112374, 8930056613191782368, 10887298179723462085, 2, 0, 0, 0, 1, 0, 8858901812137030682, 13558987077266275339, 15564429589094530081, 5734803687955113279, 15092595329879644577, 1697370376582801763, 13966013418513317366, 15212529265532680398, 11814345067449767109, 12248403740758614702, 13253613960908137010, 13069247508460875244, 5646668393535724753, 12836057040498431452, 6132850845308416918, 2, 0, 0, 0, 1, 0, 3289076678693837113, 3306415136959427537, 4595381067892187327, 15617193812494172197, 13969944955380272714, 2151092097708635255, 9308934663460035993, 17701622526704384546, 10643130636190759117, 10608583573536775206, 2924854172257996410, 16966215805924461950, 11523838157115606042, 13766601347831535388, 15461729627686219061, 2, 0, 0, 0, 1, 0, 2861046167966645052, 10889239779607274128, 17320053671944779813, 3406927099241203725, 4689628285093180625, 8991051645303444091, 15420175838347825984, 10581163748471525208, 2494640429618639710, 5287408014276309700, 12153757963762118208, 8235209133198882488, 16153951788992043302, 6738693051085880966, 17758791276367026584, 2, 0, 0, 0, 1, 0, 10308255496352503262, 18121871418048845228, 15889419620549458343, 10343975768128176185, 1524422576558323017, 10037026397378548640, 11821902144147060712, 11001907572334629439, 15808731023964574299, 9790979724735385269, 15700324760341857643, 17774065041915838082, 10370417002357863310, 14069036937855587505, 12405462687145854473, 2, 0, 0, 0, 1, 0, 11515575222719100082, 3607722074361327345, 10538200152279946362, 3757345954094976880, 3511571172448102031, 18213897356329070177, 10064659859509677191, 724394552750888620, 1595171953489970254, 11073532118063625032, 9731412496448089833, 5891290976833577870, 11096622266210541923, 1899062451757954377, 8384214154009398478, 2, 0, 0, 0, 1, 0, 5623476244212125463, 0, 0, 11387279664761561894, 16119779393022010645, 12476469095199609689, 3278355048806054125, 11468668142758644503, 4997071000317359325, 17451936898459652544, 16157291854026127596, 2945651218563202825, 11746170412650491065, 7698809547406684914, 18261819862243438027, 2, 0, 0, 0, 1, 0, 0, 0, 0, 12664138717389652380, 16373019178487693626, 5311930945536331644, 4616652429570306671, 2671393322368710032, 7020445890779083806, 15646972017585065174, 16340142805513243131, 2481092360881257830, 6535987403990440638, 3104393142368480565, 17079185842171546000, 2, 0, 0, 0, 1, 0, 0, 0, 0, 8299034149894841811, 13423474518210064130, 7223353560134237057, 3777113587480581710, 1059544940949021637, 13774982404484476980, 8948369964312160088, 13982894413446367987, 10656699665804756215, 10122156746538229970, 7738728989754721313, 2573099324947734045, 2, 0, 0, 0, 1, 0, 0, 0, 0, 4141583402420192864, 10379152206886126257, 13509433978352760019, 7620976189553973499, 18127894597596272634, 17184349270149775183, 12421841574297279117, 16491357058269217705, 2380753665748314674, 3728282910211741030, 4802195899845329288, 9396372422985936818, 2, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 2, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 85, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 321461142783715873, 340111207878988785, 16980963677900604856, 8122025352910807675, 2672032990889952726, 18287547865064093386, 6883907187243818989, 16773782102167370766, 11249881205591563163, 1709210755771630360, 13599297410359034734, 4944140066849387506, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2826379816086788535, 18256387944673635196, 15976151213056828438, 14806163515298168591, 10966643852490493990, 16643076982183140204, 10614920431791547888, 9517551778943323923, 16071218949222383338, 11707086547963657475, 11548640197966434952, 2095785635431009262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1389982844959459783, 10860511098536981986, 92714918004478284, 5442054526001626765, 2592429945178091576, 17607797632632583753, 13376310260819809150, 9735157781939056258, 546830354766363539, 2794745820933624420, 16397756946501824199, 12375413327700682072, 1, 0, 0, 0, 1, 0, 7216891187249046669, 17104304802226135179, 213723419203905114, 7504428176840094167, 8459821732881051520, 17365496272474871894, 3774836954819930057, 8172562148455605634, 4606352897788642339, 970536228322621221, 13685677539131842935, 7776682728634159270, 2841923277622193225, 4509993724149584481, 11081872751342419742, 1, 0, 0, 0, 1, 0, 13630982819704974164, 709629587910116102, 10852437178432066259, 7971642927196132266, 13791358524817111974, 16893172732645584491, 379441097109437269, 9875636580100479976, 9887976024132347018, 18182241650367492861, 16455044890046321010, 8386791303267182172, 14692549583873964816, 1679695851270735493, 6718639559482054424, 1, 0, 0, 0, 1, 0, 16461193933015291689, 9011520252233625918, 15300572918329198995, 17186760898540197468, 9775353746636648794, 2501796678284190373, 10400069677678307421, 491259531166040341, 17832834191852929098, 9409416070961479945, 8049700212209077372, 16951904742993551809, 6052645635446937049, 4189079835826917979, 12122170781554046887, 1, 0, 0, 0, 1, 0, 13955125520582449746, 13107809866340143246, 13139247942561227813, 14264987096664760063, 8663944065392476082, 26738717326360259, 18413269984357459958, 5789610466730383818, 18316393283013557997, 13615028923015526256, 17099282884571514622, 390611853699198814, 12233143040630128964, 18357860221728901477, 16799534473726304569, 1, 0, 0, 0, 1, 0, 14763764810165002571, 7475534393389499071, 4111976696170618769, 8192703318881365638, 6327683047402873297, 6986963031258272860, 11851310101017854885, 15784515228652197776, 2684395608227063909, 14504653302726904108, 16371352256021817139, 11552589705164935867, 15548258272185388836, 11050299770631141961, 7686328019139102331, 1, 0, 0, 0, 1, 0, 5685269238246855930, 7640663189411641925, 12336665115542599217, 17852385312535653754, 9430822593953620080, 15075850538217806798, 6966840703169954718, 7841617945839187879, 13946693875892332716, 367320422432359503, 12952269508513821163, 16069569499603265432, 7218244406354738621, 12664144355455319157, 2506152622879710750, 1, 0, 0, 0, 1, 0, 1427472554639263168, 18418882661072479711, 9257829930238828548, 8976000347315438733, 323829297696706606, 6173756644452043592, 6457652449305783921, 6762591351360230328, 3265288527569414193, 4458873320026667405, 16759292612217335519, 10892805137373131994, 15139518776246125573, 14791890923980574308, 8760992635981950709, 1, 0, 0, 0, 1, 0, 7302903671861085826, 0, 0, 16635907827753325426, 16419251794401517641, 12463158039410249198, 8120300831241327696, 10750885965856570936, 9614148693204557112, 4158450525844909688, 7792109010626424915, 13088066304082794059, 4656955130371010155, 1746726629032389326, 1219894586292412814, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2377128724052460864, 2239581712082993389, 7060420962088551737, 432418536618916281, 16868606775754956395, 17518823857230050559, 3246198533692444934, 7480053259498635867, 419065699932221163, 17118765335121629772, 4235062597258109895, 824784286256764128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4064757387509104114, 12489932951016483829, 9342274029206616333, 10696618739033813212, 12653757924793616214, 7139121107914525514, 3222033110084083257, 3615950593461764641, 3886495484944885171, 3475198118169682060, 17016381150799971149, 10170016208525526833, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5276412771718093926, 11738733634614750668, 1435264878438078251, 2085147768356017783, 11706271638131904220, 470824845274439747, 5683784147168326312, 16487019928286415392, 1240710433266681785, 11483695604905597390, 387032599105912823, 593495485489349093, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 10827276321637451859, 1419643695620305796, 7836113917086293276, 10289142213544989468, 5374430875291145484, 11783370765491737635, 13820432364368151262, 11923860796119339735, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8212736248369912082, 4071281311826053218, 16681111697957494384, 6160598189905115531, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10784649219148085459, 16204388331933209503, 7535295255934147784, 8594455900178560628, 7058022398850579311, 4610105990937441552, 14292233265078610671, 11512968082996599149, 3080746365611415597, 11859146482331138479, 11664682242720909218, 915471480408530766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 128781735205120527, 9851558383041711453, 14961534904937133494, 5726930420197336139, 14448859106484550632, 14871257653827208567, 11560507218468362083, 1159818605994823015, 6133575519759388325, 12232695746376293294, 2500570831459298438, 18393930191488027312, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4547968979093876849, 2647731244796610075, 15458110929197782417, 13273590888045863622, 8488923843888712176, 17566918610707158078, 11435884371355098677, 2364926874595277907, 11695447135684149141, 995389826954784529, 13004725650794618836, 13545212286845976163, 1, 0, 0, 0, 1, 0, 10963869565254465549, 3178875389651486587, 584333678278801940, 3546336675446295543, 13479103754506160685, 5854257801187918217, 8753781667987110661, 14387511811111000559, 4662267156400217313, 707619676799722739, 7943063494760571709, 6615075028106709917, 11949085664163595757, 8624527149940617200, 18210660875436245579, 1, 0, 0, 0, 1, 0, 7672596955217153457, 5064179278899630287, 15824928726849370210, 5493374351233807563, 8910192708346993775, 6953015881067099300, 11540514940863049397, 81438176960127805, 8933338746704632990, 4672379866331806862, 15342799649049057800, 1254198290967296340, 12608149157887976305, 2589834268393847902, 8676871105886252208, 1, 0, 0, 0, 1, 0, 3531253839134075838, 16735896821376739720, 8167081614237821546, 1614874318552505578, 12924378726200437768, 2748780903535738274, 1424153760517090352, 13654856085785737791, 17049945775096584485, 9708763303767628077, 16691905436935888241, 14739488160024614333, 9454287016901482416, 11899064714918281636, 9265666514596208448, 1, 0, 0, 0, 1, 0, 13609225654816031898, 16627834940022015256, 10557198230311183963, 8307036201059139827, 14386798070662103151, 12069265029549314681, 16087116659981325603, 15278759115432814741, 1233454545325180310, 16036499041626449319, 16328475049153986635, 8945689852522735768, 2150959420327906479, 11946855882944424845, 9457367929087028434, 1, 0, 0, 0, 1, 0, 17700630260394682670, 10564666254450756820, 13128612970712110036, 9024048572557701022, 10724238176158470430, 13358005363663908988, 2170747068790740224, 4277878641698006595, 9548215660109667029, 5119649922187981964, 1750096680784451786, 10185013658812384549, 17565393891424303638, 7842923952979169755, 8358881080234670725, 1, 0, 0, 0, 1, 0, 12969929663590209562, 17400427229379047873, 8161725761906333130, 13981710006578989582, 7297009056930466619, 3604233398898996465, 9993917348799810609, 16823455732252835952, 9206641926728869527, 32726321504424883, 627717841813244731, 5673651272129016554, 4241445880929460300, 5936050971291911531, 6541843013709002421, 1, 0, 0, 0, 1, 0, 12686638732510422112, 8915914979000954491, 17429665533669488649, 11824695302249715491, 13382186579597492216, 16156878489884540028, 12787265931454127207, 5871229270093729693, 4856995795253621298, 14683358530499849942, 10259409981493264670, 1502692624900434396, 5250671015911848716, 8190973727913189622, 10224257779706313529, 1, 0, 0, 0, 1, 0, 15763807785631230887, 0, 0, 9872576991436394594, 6000186529178301892, 4992467617151662209, 10689062953812945200, 3521868013962458536, 6696272579393185401, 12213179217732598594, 8469105874522435313, 3389969163810664285, 5618587527864308269, 10050755079785196589, 11722023958758893627, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10552500864729979640, 7022204645736728964, 12063673466969028652, 3744742376692732597, 8813490692122304227, 10134861521414682067, 3637686875728492502, 3404810976915461357, 17084466347038006872, 2626622112813681720, 10906931598039016782, 13905103948731397841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18032794979945654604, 5338134468072720249, 6266501778891918617, 7474246814889551252, 15033504818965134746, 17465898446534646298, 2382678006125050452, 3829882598743334141, 6606368157240498477, 4599215552676510549, 16150808274840457147, 9009398081722850699, 1, 0, 0, 0, 1, 0, 0, 0, 0, 153382829717154572, 15645384100209479912, 17390445613818630245, 12416458660228151392, 671768789535371387, 2270472397704099161, 14226016292255835291, 14062283116063151751, 13093088208853880999, 5363423870755590475, 13280081123993966327, 16014363687546775515, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851, 6002676145170957552, 5665896864361060199, 589873375673641870, 1610809089415408623, 1276807186500217245, 4352525099414593256, 5571840125263174859, 10945967283455090973, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(17) }, program_info: ProgramInfo { program_hash: Word([8442199976350624000, 9488069924049927331, 3589804369840038271, 11846932079106298851]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 18, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_11.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_11.snap index c46e18199d..a246ce02de 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_11.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_11.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 0, 0, 0, 1, 1, 1, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9449073279161460587, 1121487758252150877, 8941582041334934334, 11595861135030037790, 7760605592330700907, 3718367898484243235, 6502498117283132750, 12950881678740459660, 11422404183367723688, 1030231790864474253, 17340772818369048990, 15511565770182079598, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12931192181764701571, 11145191037714825824, 8312329417918475026, 15790255405818319154, 8360793687611805321, 9018263790739496394, 10381882708453841125, 6646706469455563416, 4734813192583045175, 8493304069558799424, 4710612857210121909, 17588127306488605836, 1, 0, 0, 0, 1, 0, 0, 0, 0, 984010488942368543, 1213485180702191508, 1987590179830007973, 1788244094476607025, 738095676972904954, 11183632545038441118, 13452669420839074331, 5900873935105415470, 16795465921267519808, 3813500112725093016, 6383904020814938565, 12156963648059548539, 1, 0, 0, 0, 1, 0, 17823833418367433838, 10163261575005260622, 16867152799881751267, 9685532581221734183, 7846971226962020365, 2110379688364488268, 3713346340151405890, 15564477193367915463, 11084602196898449287, 4680755747100261382, 17072140113884084441, 12362009349652409415, 1584024639278012914, 2185295286363661452, 9855001437726729603, 1, 0, 0, 0, 1, 0, 16263253970534166960, 18299548522351097591, 2763752469532803404, 6753674160453463758, 13494897806355030713, 17635305137043271645, 12211195930325373909, 11411212736325006200, 4459785951807836148, 9239864853466318604, 3133914205806983551, 18428726703177922018, 8312414042457270416, 2708167856204711091, 12076679785316333126, 1, 0, 0, 0, 1, 0, 9250560550349672379, 4111731623463033163, 12435642223369362064, 17888529253300920997, 8659258489615358612, 12170067272088757680, 7340196426348852368, 17351081171119935003, 1149237165662367781, 17257251339549225733, 14489298897463599319, 11539035678955040518, 4503780104272324718, 6648082856126081802, 13665676832765504604, 1, 0, 0, 0, 1, 0, 15411388868694405084, 8403298620076719772, 9672760334604751932, 6933428701043454429, 13991061905462032659, 7657051830321493279, 16984288007453782663, 5362234606277969799, 15566979183400849953, 10517783806308559735, 17366018125192157291, 15356197472622263350, 7323566571197968291, 14424400955124662023, 650038937356756422, 1, 0, 0, 0, 1, 0, 1186775770822648218, 3847522256362703115, 803671992030916978, 11116051071552283912, 3035711690563019728, 11645316320468991699, 11051615708535243788, 18410067321498813805, 15872210457308658069, 10472918269298152403, 2294268388330909452, 2881507314714938985, 15910943131140158025, 5903620650725668621, 10259188468824740395, 1, 0, 0, 0, 1, 0, 4455783957351365745, 4244879931623960089, 5077946946054782793, 6599410081338642359, 14938409169697365298, 11077840439234171924, 11427117893432527856, 10053996112039279419, 6002088535876283975, 15057664949131650205, 11534526793163396841, 4068525996563916658, 17378127155945101975, 8510983625183148698, 17653496644410780843, 1, 0, 0, 0, 1, 0, 15773002892562336276, 10082181176672218839, 7305364504534574394, 10240544379350652389, 12203611326855107051, 9890840092123213718, 2986843800380659541, 269445170964238763, 2384048206878222613, 13990442832618678273, 2268817966601289631, 18249110448117027038, 4533560749542240026, 6611487504966808602, 5971369750353050420, 1, 0, 0, 0, 1, 0, 11384058812288717888, 0, 0, 1760171480459315772, 8285118005586313889, 7336759030812521166, 14589941254121359798, 8094627026199116369, 63498412877849097, 15524863835262422966, 18373940558834700052, 16281776889210602562, 1530061232442071378, 13092360131462553695, 16004411386897649153, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6781621337133548780, 4956581778649408453, 14718016860648898221, 12606215244329868526, 9140718271797260749, 15648250834702978300, 7664866084994005813, 2364324903714729084, 5046527547997136739, 7908366039873426748, 15931672450436655146, 18030233803416436591, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6905620312272855934, 2207149270543631094, 10620364686165750780, 16670383938906392554, 16931156974940547986, 8529394818161928928, 6402603575808426205, 11224300914395639224, 15389940485215503504, 17285432733773675712, 1240279786436372570, 18259374036374690916, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11742310966982885025, 14846185326871759573, 13091258350263300328, 9639583597360292920, 14990750302990274425, 12738537911867917740, 15478402516028642985, 6723817418214557043, 8078314735919109828, 7133857220640768475, 14570949492747980696, 15125936605156360851, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18361620591822500183, 1059957073285149997, 10238372411792495411, 7295075507077524016, 7749914311668337250, 10868075426920088717, 5620556269036690141, 9972703476491052945, 13420837528738763520, 4475574334214635511, 9773381208787513234, 15751718828876603764, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16289398515402274208, 7414794499417747342, 5045095827015758924, 1708983071443589586, 2490550827364591193, 14626639685450047092, 14491113445439742990, 7474968551123382164, 8496521368864059734, 15844375305567102825, 2185606873808106597, 11509908635527699125, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12841425204405288471, 8707706418338537128, 712045908447132336, 5101441454781013927, 4834428694324052171, 15824191413144451094, 3583407126333665201, 7181997692355145187, 2484674105691110618, 10178368558488980289, 5326701750299677540, 11475332140491226913, 1, 0, 0, 0, 1, 0, 11645643459830071782, 17452639128133136408, 12995847406362179797, 15487398038599823036, 18233967745224015541, 5489587686936736744, 1762085221214582981, 1237735850038716981, 3872785008711037698, 11553681770295205503, 15428345773987404117, 14534130756197581682, 366424541133389116, 18331867594591263096, 17384989371947212455, 1, 0, 0, 0, 1, 0, 4487072367900477878, 7171904450118919866, 17827188519504780939, 6523151203286366650, 2722387933855210372, 17923261380734419001, 2426086071573235308, 3706649958322292721, 12504162360551599075, 10160118687758838044, 12211833414579612038, 6158355997654729039, 14736248158977353058, 13272144351666153699, 14780080241553087954, 1, 0, 0, 0, 1, 0, 13422884527210045309, 14780013685457338092, 5091415823979132990, 12559670426893619349, 16245041381764943451, 498420322150313505, 191858132690363422, 12922970210395916603, 11182299479692082524, 13892332176168710533, 4859169418838628114, 7966664559987380274, 1788553586845505120, 2612761535881667398, 895339354972846288, 1, 0, 0, 0, 1, 0, 945499751187771083, 17506834482620543131, 17636928664480131737, 14464825374273596237, 13217946414061638961, 16563220449590599184, 3113047032182286095, 4991814670781152799, 13011220300525187244, 13191859809007430670, 3341988471057096642, 10117630725268935850, 3267515885574430559, 12242667433588409287, 16616980036078363960, 1, 0, 0, 0, 1, 0, 7009760878916999172, 14463989071067232357, 6299414349120672984, 5926060660140296438, 560525447297576809, 2602239721821758274, 10297192864125327962, 17317480533129930885, 4912758288798487759, 3655472932705407889, 9040916820504033241, 3415891051222089939, 1067905233090125355, 13352179165506178583, 1340602429246747412, 1, 0, 0, 0, 1, 0, 4766670773273829174, 6721482847518652360, 12310728229379388686, 6745543631073250405, 6921572661546485589, 4750941303537176677, 49291998290789182, 1478747224857255407, 1188141313951948960, 477055463074084789, 6388325427377182963, 3083939397091390513, 2351734901108666112, 13899921222016942193, 10715486062907500431, 1, 0, 0, 0, 1, 0, 16138236286182850912, 18300827445906265048, 6811282905011593847, 8175629301673337378, 7478653578860599304, 6713440703831969386, 11401680143523240515, 13559769323964866828, 3688955093092273987, 11132173538218883660, 6157532873490141938, 1038453745979635965, 12823977733512090066, 18285262020229949627, 9293572206177681748, 1, 0, 0, 0, 1, 0, 2600985046105704136, 0, 0, 3983555747063229007, 18436093682323240213, 4371677581775699941, 1597537279118331686, 8391144048742825188, 18379600813280833240, 13624820787911837119, 16304509166225849524, 1857640599304385129, 9807406399356825925, 17698213099167806270, 15812468027446779083, 1, 0, 0, 0, 1, 0, 0, 0, 0, 726265693390881232, 14896924519547367367, 15268715163867613574, 3135755890995221672, 3043860411079700945, 7370638446447886746, 10407697142160461181, 935982989392333515, 10006390466474490543, 7718195260684522704, 16672746771430202203, 4527163876177139455, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14561475405601408308, 5700869957895642798, 18046680204045439410, 15097801996593502346, 3316394317418127534, 2915034789487291427, 14258174989754257767, 1210836981232166821, 14803299263866517418, 12447607757449687684, 17570877581179860050, 1244842376420464745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12499075216226282978, 1468047895374295633, 4916517868000584486, 4266164594774171363, 7755478137750309004, 17553720084081617212, 11934701342627358954, 15698638297176561506, 15066726409373257878, 2284861843754100216, 2661602147392096981, 7071163393872573565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 6, 4294967292, 0, 1, 5, 0, 0, 2147483648, 0, 1, 0, 1, 1, 65535, 16383, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2188, 4375, 6562, 8749, 10936, 13123, 15310, 16039, 16282, 16363, 16372, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 45, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 1, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 0, 0, 0, 1, 1, 1, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9449073279161460587, 1121487758252150877, 8941582041334934334, 11595861135030037790, 7760605592330700907, 3718367898484243235, 6502498117283132750, 12950881678740459660, 11422404183367723688, 1030231790864474253, 17340772818369048990, 15511565770182079598, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12931192181764701571, 11145191037714825824, 8312329417918475026, 15790255405818319154, 8360793687611805321, 9018263790739496394, 10381882708453841125, 6646706469455563416, 4734813192583045175, 8493304069558799424, 4710612857210121909, 17588127306488605836, 1, 0, 0, 0, 1, 0, 0, 0, 0, 984010488942368543, 1213485180702191508, 1987590179830007973, 1788244094476607025, 738095676972904954, 11183632545038441118, 13452669420839074331, 5900873935105415470, 16795465921267519808, 3813500112725093016, 6383904020814938565, 12156963648059548539, 1, 0, 0, 0, 1, 0, 17823833418367433838, 10163261575005260622, 16867152799881751267, 9685532581221734183, 7846971226962020365, 2110379688364488268, 3713346340151405890, 15564477193367915463, 11084602196898449287, 4680755747100261382, 17072140113884084441, 12362009349652409415, 1584024639278012914, 2185295286363661452, 9855001437726729603, 1, 0, 0, 0, 1, 0, 16263253970534166960, 18299548522351097591, 2763752469532803404, 6753674160453463758, 13494897806355030713, 17635305137043271645, 12211195930325373909, 11411212736325006200, 4459785951807836148, 9239864853466318604, 3133914205806983551, 18428726703177922018, 8312414042457270416, 2708167856204711091, 12076679785316333126, 1, 0, 0, 0, 1, 0, 9250560550349672379, 4111731623463033163, 12435642223369362064, 17888529253300920997, 8659258489615358612, 12170067272088757680, 7340196426348852368, 17351081171119935003, 1149237165662367781, 17257251339549225733, 14489298897463599319, 11539035678955040518, 4503780104272324718, 6648082856126081802, 13665676832765504604, 1, 0, 0, 0, 1, 0, 15411388868694405084, 8403298620076719772, 9672760334604751932, 6933428701043454429, 13991061905462032659, 7657051830321493279, 16984288007453782663, 5362234606277969799, 15566979183400849953, 10517783806308559735, 17366018125192157291, 15356197472622263350, 7323566571197968291, 14424400955124662023, 650038937356756422, 1, 0, 0, 0, 1, 0, 1186775770822648218, 3847522256362703115, 803671992030916978, 11116051071552283912, 3035711690563019728, 11645316320468991699, 11051615708535243788, 18410067321498813805, 15872210457308658069, 10472918269298152403, 2294268388330909452, 2881507314714938985, 15910943131140158025, 5903620650725668621, 10259188468824740395, 1, 0, 0, 0, 1, 0, 4455783957351365745, 4244879931623960089, 5077946946054782793, 6599410081338642359, 14938409169697365298, 11077840439234171924, 11427117893432527856, 10053996112039279419, 6002088535876283975, 15057664949131650205, 11534526793163396841, 4068525996563916658, 17378127155945101975, 8510983625183148698, 17653496644410780843, 1, 0, 0, 0, 1, 0, 15773002892562336276, 10082181176672218839, 7305364504534574394, 10240544379350652389, 12203611326855107051, 9890840092123213718, 2986843800380659541, 269445170964238763, 2384048206878222613, 13990442832618678273, 2268817966601289631, 18249110448117027038, 4533560749542240026, 6611487504966808602, 5971369750353050420, 1, 0, 0, 0, 1, 0, 11384058812288717888, 0, 0, 1760171480459315772, 8285118005586313889, 7336759030812521166, 14589941254121359798, 8094627026199116369, 63498412877849097, 15524863835262422966, 18373940558834700052, 16281776889210602562, 1530061232442071378, 13092360131462553695, 16004411386897649153, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6781621337133548780, 4956581778649408453, 14718016860648898221, 12606215244329868526, 9140718271797260749, 15648250834702978300, 7664866084994005813, 2364324903714729084, 5046527547997136739, 7908366039873426748, 15931672450436655146, 18030233803416436591, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6905620312272855934, 2207149270543631094, 10620364686165750780, 16670383938906392554, 16931156974940547986, 8529394818161928928, 6402603575808426205, 11224300914395639224, 15389940485215503504, 17285432733773675712, 1240279786436372570, 18259374036374690916, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11742310966982885025, 14846185326871759573, 13091258350263300328, 9639583597360292920, 14990750302990274425, 12738537911867917740, 15478402516028642985, 6723817418214557043, 8078314735919109828, 7133857220640768475, 14570949492747980696, 15125936605156360851, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18361620591822500183, 1059957073285149997, 10238372411792495411, 7295075507077524016, 7749914311668337250, 10868075426920088717, 5620556269036690141, 9972703476491052945, 13420837528738763520, 4475574334214635511, 9773381208787513234, 15751718828876603764, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16289398515402274208, 7414794499417747342, 5045095827015758924, 1708983071443589586, 2490550827364591193, 14626639685450047092, 14491113445439742990, 7474968551123382164, 8496521368864059734, 15844375305567102825, 2185606873808106597, 11509908635527699125, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12841425204405288471, 8707706418338537128, 712045908447132336, 5101441454781013927, 4834428694324052171, 15824191413144451094, 3583407126333665201, 7181997692355145187, 2484674105691110618, 10178368558488980289, 5326701750299677540, 11475332140491226913, 1, 0, 0, 0, 1, 0, 11645643459830071782, 17452639128133136408, 12995847406362179797, 15487398038599823036, 18233967745224015541, 5489587686936736744, 1762085221214582981, 1237735850038716981, 3872785008711037698, 11553681770295205503, 15428345773987404117, 14534130756197581682, 366424541133389116, 18331867594591263096, 17384989371947212455, 1, 0, 0, 0, 1, 0, 4487072367900477878, 7171904450118919866, 17827188519504780939, 6523151203286366650, 2722387933855210372, 17923261380734419001, 2426086071573235308, 3706649958322292721, 12504162360551599075, 10160118687758838044, 12211833414579612038, 6158355997654729039, 14736248158977353058, 13272144351666153699, 14780080241553087954, 1, 0, 0, 0, 1, 0, 13422884527210045309, 14780013685457338092, 5091415823979132990, 12559670426893619349, 16245041381764943451, 498420322150313505, 191858132690363422, 12922970210395916603, 11182299479692082524, 13892332176168710533, 4859169418838628114, 7966664559987380274, 1788553586845505120, 2612761535881667398, 895339354972846288, 1, 0, 0, 0, 1, 0, 945499751187771083, 17506834482620543131, 17636928664480131737, 14464825374273596237, 13217946414061638961, 16563220449590599184, 3113047032182286095, 4991814670781152799, 13011220300525187244, 13191859809007430670, 3341988471057096642, 10117630725268935850, 3267515885574430559, 12242667433588409287, 16616980036078363960, 1, 0, 0, 0, 1, 0, 7009760878916999172, 14463989071067232357, 6299414349120672984, 5926060660140296438, 560525447297576809, 2602239721821758274, 10297192864125327962, 17317480533129930885, 4912758288798487759, 3655472932705407889, 9040916820504033241, 3415891051222089939, 1067905233090125355, 13352179165506178583, 1340602429246747412, 1, 0, 0, 0, 1, 0, 4766670773273829174, 6721482847518652360, 12310728229379388686, 6745543631073250405, 6921572661546485589, 4750941303537176677, 49291998290789182, 1478747224857255407, 1188141313951948960, 477055463074084789, 6388325427377182963, 3083939397091390513, 2351734901108666112, 13899921222016942193, 10715486062907500431, 1, 0, 0, 0, 1, 0, 16138236286182850912, 18300827445906265048, 6811282905011593847, 8175629301673337378, 7478653578860599304, 6713440703831969386, 11401680143523240515, 13559769323964866828, 3688955093092273987, 11132173538218883660, 6157532873490141938, 1038453745979635965, 12823977733512090066, 18285262020229949627, 9293572206177681748, 1, 0, 0, 0, 1, 0, 2600985046105704136, 0, 0, 3983555747063229007, 18436093682323240213, 4371677581775699941, 1597537279118331686, 8391144048742825188, 18379600813280833240, 13624820787911837119, 16304509166225849524, 1857640599304385129, 9807406399356825925, 17698213099167806270, 15812468027446779083, 1, 0, 0, 0, 1, 0, 0, 0, 0, 726265693390881232, 14896924519547367367, 15268715163867613574, 3135755890995221672, 3043860411079700945, 7370638446447886746, 10407697142160461181, 935982989392333515, 10006390466474490543, 7718195260684522704, 16672746771430202203, 4527163876177139455, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14561475405601408308, 5700869957895642798, 18046680204045439410, 15097801996593502346, 3316394317418127534, 2915034789487291427, 14258174989754257767, 1210836981232166821, 14803299263866517418, 12447607757449687684, 17570877581179860050, 1244842376420464745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12499075216226282978, 1468047895374295633, 4916517868000584486, 4266164594774171363, 7755478137750309004, 17553720084081617212, 11934701342627358954, 15698638297176561506, 15066726409373257878, 2284861843754100216, 2661602147392096981, 7071163393872573565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 4294967292, 0, 1, 5, 0, 0, 2147483648, 0, 1, 0, 1, 1, 65535, 16383, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2188, 4375, 6562, 8749, 10936, 13123, 15310, 16039, 16282, 16363, 16372, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 45, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 1, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_12.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_12.snap index c46e18199d..a246ce02de 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_12.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_12.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 0, 0, 0, 1, 1, 1, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9449073279161460587, 1121487758252150877, 8941582041334934334, 11595861135030037790, 7760605592330700907, 3718367898484243235, 6502498117283132750, 12950881678740459660, 11422404183367723688, 1030231790864474253, 17340772818369048990, 15511565770182079598, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12931192181764701571, 11145191037714825824, 8312329417918475026, 15790255405818319154, 8360793687611805321, 9018263790739496394, 10381882708453841125, 6646706469455563416, 4734813192583045175, 8493304069558799424, 4710612857210121909, 17588127306488605836, 1, 0, 0, 0, 1, 0, 0, 0, 0, 984010488942368543, 1213485180702191508, 1987590179830007973, 1788244094476607025, 738095676972904954, 11183632545038441118, 13452669420839074331, 5900873935105415470, 16795465921267519808, 3813500112725093016, 6383904020814938565, 12156963648059548539, 1, 0, 0, 0, 1, 0, 17823833418367433838, 10163261575005260622, 16867152799881751267, 9685532581221734183, 7846971226962020365, 2110379688364488268, 3713346340151405890, 15564477193367915463, 11084602196898449287, 4680755747100261382, 17072140113884084441, 12362009349652409415, 1584024639278012914, 2185295286363661452, 9855001437726729603, 1, 0, 0, 0, 1, 0, 16263253970534166960, 18299548522351097591, 2763752469532803404, 6753674160453463758, 13494897806355030713, 17635305137043271645, 12211195930325373909, 11411212736325006200, 4459785951807836148, 9239864853466318604, 3133914205806983551, 18428726703177922018, 8312414042457270416, 2708167856204711091, 12076679785316333126, 1, 0, 0, 0, 1, 0, 9250560550349672379, 4111731623463033163, 12435642223369362064, 17888529253300920997, 8659258489615358612, 12170067272088757680, 7340196426348852368, 17351081171119935003, 1149237165662367781, 17257251339549225733, 14489298897463599319, 11539035678955040518, 4503780104272324718, 6648082856126081802, 13665676832765504604, 1, 0, 0, 0, 1, 0, 15411388868694405084, 8403298620076719772, 9672760334604751932, 6933428701043454429, 13991061905462032659, 7657051830321493279, 16984288007453782663, 5362234606277969799, 15566979183400849953, 10517783806308559735, 17366018125192157291, 15356197472622263350, 7323566571197968291, 14424400955124662023, 650038937356756422, 1, 0, 0, 0, 1, 0, 1186775770822648218, 3847522256362703115, 803671992030916978, 11116051071552283912, 3035711690563019728, 11645316320468991699, 11051615708535243788, 18410067321498813805, 15872210457308658069, 10472918269298152403, 2294268388330909452, 2881507314714938985, 15910943131140158025, 5903620650725668621, 10259188468824740395, 1, 0, 0, 0, 1, 0, 4455783957351365745, 4244879931623960089, 5077946946054782793, 6599410081338642359, 14938409169697365298, 11077840439234171924, 11427117893432527856, 10053996112039279419, 6002088535876283975, 15057664949131650205, 11534526793163396841, 4068525996563916658, 17378127155945101975, 8510983625183148698, 17653496644410780843, 1, 0, 0, 0, 1, 0, 15773002892562336276, 10082181176672218839, 7305364504534574394, 10240544379350652389, 12203611326855107051, 9890840092123213718, 2986843800380659541, 269445170964238763, 2384048206878222613, 13990442832618678273, 2268817966601289631, 18249110448117027038, 4533560749542240026, 6611487504966808602, 5971369750353050420, 1, 0, 0, 0, 1, 0, 11384058812288717888, 0, 0, 1760171480459315772, 8285118005586313889, 7336759030812521166, 14589941254121359798, 8094627026199116369, 63498412877849097, 15524863835262422966, 18373940558834700052, 16281776889210602562, 1530061232442071378, 13092360131462553695, 16004411386897649153, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6781621337133548780, 4956581778649408453, 14718016860648898221, 12606215244329868526, 9140718271797260749, 15648250834702978300, 7664866084994005813, 2364324903714729084, 5046527547997136739, 7908366039873426748, 15931672450436655146, 18030233803416436591, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6905620312272855934, 2207149270543631094, 10620364686165750780, 16670383938906392554, 16931156974940547986, 8529394818161928928, 6402603575808426205, 11224300914395639224, 15389940485215503504, 17285432733773675712, 1240279786436372570, 18259374036374690916, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11742310966982885025, 14846185326871759573, 13091258350263300328, 9639583597360292920, 14990750302990274425, 12738537911867917740, 15478402516028642985, 6723817418214557043, 8078314735919109828, 7133857220640768475, 14570949492747980696, 15125936605156360851, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18361620591822500183, 1059957073285149997, 10238372411792495411, 7295075507077524016, 7749914311668337250, 10868075426920088717, 5620556269036690141, 9972703476491052945, 13420837528738763520, 4475574334214635511, 9773381208787513234, 15751718828876603764, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16289398515402274208, 7414794499417747342, 5045095827015758924, 1708983071443589586, 2490550827364591193, 14626639685450047092, 14491113445439742990, 7474968551123382164, 8496521368864059734, 15844375305567102825, 2185606873808106597, 11509908635527699125, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12841425204405288471, 8707706418338537128, 712045908447132336, 5101441454781013927, 4834428694324052171, 15824191413144451094, 3583407126333665201, 7181997692355145187, 2484674105691110618, 10178368558488980289, 5326701750299677540, 11475332140491226913, 1, 0, 0, 0, 1, 0, 11645643459830071782, 17452639128133136408, 12995847406362179797, 15487398038599823036, 18233967745224015541, 5489587686936736744, 1762085221214582981, 1237735850038716981, 3872785008711037698, 11553681770295205503, 15428345773987404117, 14534130756197581682, 366424541133389116, 18331867594591263096, 17384989371947212455, 1, 0, 0, 0, 1, 0, 4487072367900477878, 7171904450118919866, 17827188519504780939, 6523151203286366650, 2722387933855210372, 17923261380734419001, 2426086071573235308, 3706649958322292721, 12504162360551599075, 10160118687758838044, 12211833414579612038, 6158355997654729039, 14736248158977353058, 13272144351666153699, 14780080241553087954, 1, 0, 0, 0, 1, 0, 13422884527210045309, 14780013685457338092, 5091415823979132990, 12559670426893619349, 16245041381764943451, 498420322150313505, 191858132690363422, 12922970210395916603, 11182299479692082524, 13892332176168710533, 4859169418838628114, 7966664559987380274, 1788553586845505120, 2612761535881667398, 895339354972846288, 1, 0, 0, 0, 1, 0, 945499751187771083, 17506834482620543131, 17636928664480131737, 14464825374273596237, 13217946414061638961, 16563220449590599184, 3113047032182286095, 4991814670781152799, 13011220300525187244, 13191859809007430670, 3341988471057096642, 10117630725268935850, 3267515885574430559, 12242667433588409287, 16616980036078363960, 1, 0, 0, 0, 1, 0, 7009760878916999172, 14463989071067232357, 6299414349120672984, 5926060660140296438, 560525447297576809, 2602239721821758274, 10297192864125327962, 17317480533129930885, 4912758288798487759, 3655472932705407889, 9040916820504033241, 3415891051222089939, 1067905233090125355, 13352179165506178583, 1340602429246747412, 1, 0, 0, 0, 1, 0, 4766670773273829174, 6721482847518652360, 12310728229379388686, 6745543631073250405, 6921572661546485589, 4750941303537176677, 49291998290789182, 1478747224857255407, 1188141313951948960, 477055463074084789, 6388325427377182963, 3083939397091390513, 2351734901108666112, 13899921222016942193, 10715486062907500431, 1, 0, 0, 0, 1, 0, 16138236286182850912, 18300827445906265048, 6811282905011593847, 8175629301673337378, 7478653578860599304, 6713440703831969386, 11401680143523240515, 13559769323964866828, 3688955093092273987, 11132173538218883660, 6157532873490141938, 1038453745979635965, 12823977733512090066, 18285262020229949627, 9293572206177681748, 1, 0, 0, 0, 1, 0, 2600985046105704136, 0, 0, 3983555747063229007, 18436093682323240213, 4371677581775699941, 1597537279118331686, 8391144048742825188, 18379600813280833240, 13624820787911837119, 16304509166225849524, 1857640599304385129, 9807406399356825925, 17698213099167806270, 15812468027446779083, 1, 0, 0, 0, 1, 0, 0, 0, 0, 726265693390881232, 14896924519547367367, 15268715163867613574, 3135755890995221672, 3043860411079700945, 7370638446447886746, 10407697142160461181, 935982989392333515, 10006390466474490543, 7718195260684522704, 16672746771430202203, 4527163876177139455, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14561475405601408308, 5700869957895642798, 18046680204045439410, 15097801996593502346, 3316394317418127534, 2915034789487291427, 14258174989754257767, 1210836981232166821, 14803299263866517418, 12447607757449687684, 17570877581179860050, 1244842376420464745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12499075216226282978, 1468047895374295633, 4916517868000584486, 4266164594774171363, 7755478137750309004, 17553720084081617212, 11934701342627358954, 15698638297176561506, 15066726409373257878, 2284861843754100216, 2661602147392096981, 7071163393872573565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 6, 4294967292, 0, 1, 5, 0, 0, 2147483648, 0, 1, 0, 1, 1, 65535, 16383, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2188, 4375, 6562, 8749, 10936, 13123, 15310, 16039, 16282, 16363, 16372, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 45, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 1, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 6, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 5, 0, 0, 0, 0, 1, 1, 1, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 108, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9449073279161460587, 1121487758252150877, 8941582041334934334, 11595861135030037790, 7760605592330700907, 3718367898484243235, 6502498117283132750, 12950881678740459660, 11422404183367723688, 1030231790864474253, 17340772818369048990, 15511565770182079598, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12931192181764701571, 11145191037714825824, 8312329417918475026, 15790255405818319154, 8360793687611805321, 9018263790739496394, 10381882708453841125, 6646706469455563416, 4734813192583045175, 8493304069558799424, 4710612857210121909, 17588127306488605836, 1, 0, 0, 0, 1, 0, 0, 0, 0, 984010488942368543, 1213485180702191508, 1987590179830007973, 1788244094476607025, 738095676972904954, 11183632545038441118, 13452669420839074331, 5900873935105415470, 16795465921267519808, 3813500112725093016, 6383904020814938565, 12156963648059548539, 1, 0, 0, 0, 1, 0, 17823833418367433838, 10163261575005260622, 16867152799881751267, 9685532581221734183, 7846971226962020365, 2110379688364488268, 3713346340151405890, 15564477193367915463, 11084602196898449287, 4680755747100261382, 17072140113884084441, 12362009349652409415, 1584024639278012914, 2185295286363661452, 9855001437726729603, 1, 0, 0, 0, 1, 0, 16263253970534166960, 18299548522351097591, 2763752469532803404, 6753674160453463758, 13494897806355030713, 17635305137043271645, 12211195930325373909, 11411212736325006200, 4459785951807836148, 9239864853466318604, 3133914205806983551, 18428726703177922018, 8312414042457270416, 2708167856204711091, 12076679785316333126, 1, 0, 0, 0, 1, 0, 9250560550349672379, 4111731623463033163, 12435642223369362064, 17888529253300920997, 8659258489615358612, 12170067272088757680, 7340196426348852368, 17351081171119935003, 1149237165662367781, 17257251339549225733, 14489298897463599319, 11539035678955040518, 4503780104272324718, 6648082856126081802, 13665676832765504604, 1, 0, 0, 0, 1, 0, 15411388868694405084, 8403298620076719772, 9672760334604751932, 6933428701043454429, 13991061905462032659, 7657051830321493279, 16984288007453782663, 5362234606277969799, 15566979183400849953, 10517783806308559735, 17366018125192157291, 15356197472622263350, 7323566571197968291, 14424400955124662023, 650038937356756422, 1, 0, 0, 0, 1, 0, 1186775770822648218, 3847522256362703115, 803671992030916978, 11116051071552283912, 3035711690563019728, 11645316320468991699, 11051615708535243788, 18410067321498813805, 15872210457308658069, 10472918269298152403, 2294268388330909452, 2881507314714938985, 15910943131140158025, 5903620650725668621, 10259188468824740395, 1, 0, 0, 0, 1, 0, 4455783957351365745, 4244879931623960089, 5077946946054782793, 6599410081338642359, 14938409169697365298, 11077840439234171924, 11427117893432527856, 10053996112039279419, 6002088535876283975, 15057664949131650205, 11534526793163396841, 4068525996563916658, 17378127155945101975, 8510983625183148698, 17653496644410780843, 1, 0, 0, 0, 1, 0, 15773002892562336276, 10082181176672218839, 7305364504534574394, 10240544379350652389, 12203611326855107051, 9890840092123213718, 2986843800380659541, 269445170964238763, 2384048206878222613, 13990442832618678273, 2268817966601289631, 18249110448117027038, 4533560749542240026, 6611487504966808602, 5971369750353050420, 1, 0, 0, 0, 1, 0, 11384058812288717888, 0, 0, 1760171480459315772, 8285118005586313889, 7336759030812521166, 14589941254121359798, 8094627026199116369, 63498412877849097, 15524863835262422966, 18373940558834700052, 16281776889210602562, 1530061232442071378, 13092360131462553695, 16004411386897649153, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6781621337133548780, 4956581778649408453, 14718016860648898221, 12606215244329868526, 9140718271797260749, 15648250834702978300, 7664866084994005813, 2364324903714729084, 5046527547997136739, 7908366039873426748, 15931672450436655146, 18030233803416436591, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6905620312272855934, 2207149270543631094, 10620364686165750780, 16670383938906392554, 16931156974940547986, 8529394818161928928, 6402603575808426205, 11224300914395639224, 15389940485215503504, 17285432733773675712, 1240279786436372570, 18259374036374690916, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11742310966982885025, 14846185326871759573, 13091258350263300328, 9639583597360292920, 14990750302990274425, 12738537911867917740, 15478402516028642985, 6723817418214557043, 8078314735919109828, 7133857220640768475, 14570949492747980696, 15125936605156360851, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 2224156252998910395, 15275140426936934232, 9020969347685648365, 2429828201690573781, 5959378659908477764, 4076807723615210075, 1405895934075613917, 1558963802307733462, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 8038422000946611307, 14346009158187546482, 2190566822905267077, 2591468219526413421, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18361620591822500183, 1059957073285149997, 10238372411792495411, 7295075507077524016, 7749914311668337250, 10868075426920088717, 5620556269036690141, 9972703476491052945, 13420837528738763520, 4475574334214635511, 9773381208787513234, 15751718828876603764, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16289398515402274208, 7414794499417747342, 5045095827015758924, 1708983071443589586, 2490550827364591193, 14626639685450047092, 14491113445439742990, 7474968551123382164, 8496521368864059734, 15844375305567102825, 2185606873808106597, 11509908635527699125, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12841425204405288471, 8707706418338537128, 712045908447132336, 5101441454781013927, 4834428694324052171, 15824191413144451094, 3583407126333665201, 7181997692355145187, 2484674105691110618, 10178368558488980289, 5326701750299677540, 11475332140491226913, 1, 0, 0, 0, 1, 0, 11645643459830071782, 17452639128133136408, 12995847406362179797, 15487398038599823036, 18233967745224015541, 5489587686936736744, 1762085221214582981, 1237735850038716981, 3872785008711037698, 11553681770295205503, 15428345773987404117, 14534130756197581682, 366424541133389116, 18331867594591263096, 17384989371947212455, 1, 0, 0, 0, 1, 0, 4487072367900477878, 7171904450118919866, 17827188519504780939, 6523151203286366650, 2722387933855210372, 17923261380734419001, 2426086071573235308, 3706649958322292721, 12504162360551599075, 10160118687758838044, 12211833414579612038, 6158355997654729039, 14736248158977353058, 13272144351666153699, 14780080241553087954, 1, 0, 0, 0, 1, 0, 13422884527210045309, 14780013685457338092, 5091415823979132990, 12559670426893619349, 16245041381764943451, 498420322150313505, 191858132690363422, 12922970210395916603, 11182299479692082524, 13892332176168710533, 4859169418838628114, 7966664559987380274, 1788553586845505120, 2612761535881667398, 895339354972846288, 1, 0, 0, 0, 1, 0, 945499751187771083, 17506834482620543131, 17636928664480131737, 14464825374273596237, 13217946414061638961, 16563220449590599184, 3113047032182286095, 4991814670781152799, 13011220300525187244, 13191859809007430670, 3341988471057096642, 10117630725268935850, 3267515885574430559, 12242667433588409287, 16616980036078363960, 1, 0, 0, 0, 1, 0, 7009760878916999172, 14463989071067232357, 6299414349120672984, 5926060660140296438, 560525447297576809, 2602239721821758274, 10297192864125327962, 17317480533129930885, 4912758288798487759, 3655472932705407889, 9040916820504033241, 3415891051222089939, 1067905233090125355, 13352179165506178583, 1340602429246747412, 1, 0, 0, 0, 1, 0, 4766670773273829174, 6721482847518652360, 12310728229379388686, 6745543631073250405, 6921572661546485589, 4750941303537176677, 49291998290789182, 1478747224857255407, 1188141313951948960, 477055463074084789, 6388325427377182963, 3083939397091390513, 2351734901108666112, 13899921222016942193, 10715486062907500431, 1, 0, 0, 0, 1, 0, 16138236286182850912, 18300827445906265048, 6811282905011593847, 8175629301673337378, 7478653578860599304, 6713440703831969386, 11401680143523240515, 13559769323964866828, 3688955093092273987, 11132173538218883660, 6157532873490141938, 1038453745979635965, 12823977733512090066, 18285262020229949627, 9293572206177681748, 1, 0, 0, 0, 1, 0, 2600985046105704136, 0, 0, 3983555747063229007, 18436093682323240213, 4371677581775699941, 1597537279118331686, 8391144048742825188, 18379600813280833240, 13624820787911837119, 16304509166225849524, 1857640599304385129, 9807406399356825925, 17698213099167806270, 15812468027446779083, 1, 0, 0, 0, 1, 0, 0, 0, 0, 726265693390881232, 14896924519547367367, 15268715163867613574, 3135755890995221672, 3043860411079700945, 7370638446447886746, 10407697142160461181, 935982989392333515, 10006390466474490543, 7718195260684522704, 16672746771430202203, 4527163876177139455, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14561475405601408308, 5700869957895642798, 18046680204045439410, 15097801996593502346, 3316394317418127534, 2915034789487291427, 14258174989754257767, 1210836981232166821, 14803299263866517418, 12447607757449687684, 17570877581179860050, 1244842376420464745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12499075216226282978, 1468047895374295633, 4916517868000584486, 4266164594774171363, 7755478137750309004, 17553720084081617212, 11934701342627358954, 15698638297176561506, 15066726409373257878, 2284861843754100216, 2661602147392096981, 7071163393872573565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704, 15345115023987982060, 15041334301981527295, 17583525004205959015, 17830733542807512157, 5538305542985598681, 16982814561187843115, 17592358249594079251, 10505779527452689750, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 4294967292, 0, 1, 5, 0, 0, 2147483648, 0, 1, 0, 1, 1, 65535, 16383, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2188, 4375, 6562, 8749, 10936, 13123, 15310, 16039, 16282, 16363, 16372, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([385638883771950111, 14533042520471865290, 12416920551073560045, 6947485957721124704]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 45, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 1, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_13.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_13.snap index 4c09e959b6..587d090fb9 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_13.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_13.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7375572182970693729, 11930265205656561266, 4114673899889075534, 357898588148103340, 7285583783616369700, 17607190493438925163, 2980560268975659509, 9840729387235286710, 4295968767249300726, 1277989312750492883, 750403697714635224, 3036215591853057143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14515360628218652783, 10224097019891343377, 9176940842530023940, 5295486817886607656, 2341840897571774669, 11648589526377348791, 16677115946292689576, 5900691155193699968, 5119947407811220060, 17882043915102295645, 15867156494024459966, 16090863638087042910, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7553352677317462240, 748994844361267888, 7547336479279255184, 12813840270094930087, 7986574489568710564, 6243809814482637102, 6374023427586874052, 4972370306575754106, 9698255539411717765, 8402260971363137004, 7866397620702682136, 3963133567703228598, 1, 0, 0, 0, 1, 0, 15510098368304846681, 10644465099124152288, 2271893550708134116, 10955938084877387415, 16702335214860257337, 11656391078860305642, 14997912950175773344, 12566560672680462445, 16161225923217405001, 13803600456482333144, 9622663477343810731, 12731464969523549591, 11464571068891742851, 5793298599059911546, 17908349476423851244, 1, 0, 0, 0, 1, 0, 12704676709042589133, 8367245878409879047, 17481658025575124860, 15206938952668638091, 16916810907472200588, 13682452505450251602, 6913190410219799142, 1043080754823121706, 16921347809582866242, 6438571068779754291, 407029562402079548, 7491881549557152759, 12299499890598148513, 4650635265747757214, 14119937534703630749, 1, 0, 0, 0, 1, 0, 11149845077031369245, 2828390198417285325, 1437182573471948930, 3770800016172304546, 14165119338755346303, 8421050872483387862, 12618454603290221396, 6862941658795962417, 2726731287352881882, 2730762088957911453, 13787761240489595746, 3440400661109297059, 16309893991999277564, 13247727332705294758, 3255777517629291140, 1, 0, 0, 0, 1, 0, 2963531580527002330, 18404342494026067789, 8946460796590193361, 1538549641630821923, 15650881762132647945, 18242297745273113718, 6261505341338998374, 2770593420692286823, 16410861698623401699, 8355576936208207930, 10283190965555694067, 16259498994873975520, 17614551442000447874, 1289802346192453208, 4899661652548582019, 1, 0, 0, 0, 1, 0, 13795959527436426530, 6394716821350311316, 2551462825531745932, 3662649950675088442, 10090924967376195547, 2254013451933557848, 11176916463285615298, 16164469939521445727, 8472956584581079805, 10089145279525513149, 15816981584402185692, 3041300342890742581, 2732075625107327721, 3056884801892714758, 4565191284080628584, 1, 0, 0, 0, 1, 0, 2429876679052810374, 14279937437711708270, 9838079327257734045, 12413466243433342378, 15555070991869858832, 3526382752987906743, 16699599314531576118, 6746861716770001362, 14985797666948203666, 4067749319688593665, 11090271778037546558, 18280219261996495240, 11564905194821649437, 16919717526667459899, 1539793980828004113, 1, 0, 0, 0, 1, 0, 1990799780330028812, 4458925970043167095, 6416024086417711900, 3131690541743081493, 14339877087618729700, 11538983127386740908, 13015893667273525423, 10458069463001905889, 7707331357694852335, 15760522752058781932, 1680786918385336269, 9524461836107268283, 10540913652282428134, 5321954010838991352, 16001910338161660328, 1, 0, 0, 0, 1, 0, 11742883737114426823, 0, 0, 14617639341020367486, 6888313430102783827, 14221268644167684727, 15390057062148905453, 12864763495673156246, 2531361488896305650, 6057235671332894001, 1138114433189805556, 11146341134166142886, 8273371701363724667, 18416629007910574933, 16130747048670899171, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6350121359078755518, 16919207520546831674, 2619120800729679292, 9966134226732180184, 11069840221589825139, 16198584180859672852, 8520182244182315667, 17403245364016302552, 8776837767210836349, 9631977100618497396, 3920191287070292962, 8501241071240823019, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1074154985721744973, 859159578513939084, 841980681719838180, 5538826350883883796, 2743129109919723025, 2331298026793641183, 11739746407539790532, 4250865385724499409, 7842835560601620329, 18413271307798397411, 1103793272511562248, 9778047403489538902, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8576960520729553430, 3809060186754369406, 13388339383354858226, 9989685048829963204, 8185888587159810481, 10607839477677695183, 15346229459908117188, 2341302228431136742, 9613994929417659617, 1499758295592994876, 4364510604874202960, 4539108168956164212, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1604139919365911138, 9157878094690374909, 2656177146482477345, 9595010673478717796, 18292910592958568240, 14240818815081743895, 12629006099543903781, 17577226387288678131, 13517781640136319575, 3554228101202979253, 473829894064878094, 16239155032122797832, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5113851726573374470, 6425669842054368493, 1057347249925241992, 2952696768975672640, 12237721921963192287, 9867313438556302162, 11629549595353476530, 13716375462026905857, 1661113771033030694, 9306806947978771582, 13789183496966727565, 14849238236368251159, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13536996102937200288, 2701132623000331756, 12877193726173516655, 8134038032300527981, 8943209618246977520, 15795460020964061272, 12391817649960371746, 14482978747921062164, 16589784235244657737, 4401882774217375917, 1955350239938339874, 9108419460474808576, 1, 0, 0, 0, 1, 0, 13741625400428142458, 6805797720165266820, 7573379462002338985, 5144547684530650448, 17379641915532686294, 12251509207411105210, 11332133599874182390, 17924245204927493750, 4746638863317237450, 18215572691662216416, 17754397088096536098, 17095733862217014640, 15315969540976862758, 7201082322234349663, 1033211373414661409, 1, 0, 0, 0, 1, 0, 5385253294000484754, 11621535865369202745, 13691845344148475921, 16371583576737997647, 16999709768989875265, 13886895990537049692, 12013033971053205979, 7340771781180054840, 8335480078758159858, 15252935280552519544, 12360261201437984812, 14837478738765105779, 5957397384759471696, 17689702079462878790, 1460799694261663366, 1, 0, 0, 0, 1, 0, 14229824574460883104, 5588198437801824133, 5994642830237759289, 12027296227437859344, 17323420959416556496, 13216497717183331409, 8883202514107224654, 16875123239233429747, 9236720663990755838, 14381423242728406980, 7810652382804679854, 17270138094532924819, 11070522019866408102, 12178683397221723524, 14959440030310041613, 1, 0, 0, 0, 1, 0, 15796969868683012980, 1642423218726500300, 3179106321758018022, 5035998873325494463, 9146724945876234312, 4275189229324905850, 7594752061560203213, 12754036126848799562, 141238439626841910, 9467399003606204480, 16177446039571837537, 14620454815482057063, 11669769547992992357, 1407059625629950522, 17501633393315606025, 1, 0, 0, 0, 1, 0, 390779239285142343, 5422605986428300552, 649897912096622127, 1047959670635367230, 12872469591277262776, 17065492216843752601, 1236915402111178740, 9424981723294470612, 1766672227767985245, 5901287082041632906, 1165019439709787271, 7292827283948466879, 698204761262232508, 10961895042020971306, 6965916889756314709, 1, 0, 0, 0, 1, 0, 6428661020051792515, 12499036857819316123, 9939962836196470535, 4361064659696575038, 2830433105177125840, 17390634589199639220, 8013578318153954341, 16986576216468074674, 11119902426374535999, 3864284104719206717, 176242085391797703, 4684102489113893021, 14008259259755136035, 6297730490781618091, 9681943962122261504, 1, 0, 0, 0, 1, 0, 14984052988656032524, 8105747836402174106, 9110117087846343256, 75544510591201674, 8044553197656770543, 2934098723242191367, 15355585492520345027, 13224479227546334120, 8741809910406193485, 13866368315332604201, 2699428799277364714, 6887380873242738838, 3932176613876828948, 8986628150783184058, 15782779420328542209, 1, 0, 0, 0, 1, 0, 12952470821017167846, 0, 0, 2978522689205632800, 10790124910810980155, 3272945528020851774, 10508624984882018667, 4675637374086440016, 4725453465222465298, 2875474760261200724, 6186708066785434963, 10086890380770548477, 8849830318071758779, 2733211805524420436, 12020699456941818376, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3061960129452262767, 13726494118104201951, 2313436297690393057, 2862574062899872918, 3556539463682311357, 3114326789966402908, 10421862999996593301, 14062022826502957095, 1645321375146597351, 5876504027679413408, 16716871354996632672, 4735042970479906379, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5601779727658274094, 15750438276851199178, 9701508002112089263, 292885921741812279, 15865424937925414652, 14795199298580283463, 1295265690517985261, 761626268401747468, 16239201862143352504, 17878067193823269498, 2773281916155934536, 3151070592229922496, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17491526265780712239, 7407323102906641682, 1542465249691690504, 12978790960819480190, 3385987959754514103, 1803230571695746105, 16925389328505591881, 4218839459301981158, 15053642145439578838, 15447825779474026874, 9099902973067746305, 3062023609160919321, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968]), kernel: Kernel([Word([7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568])]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 2 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7375572182970693729, 11930265205656561266, 4114673899889075534, 357898588148103340, 7285583783616369700, 17607190493438925163, 2980560268975659509, 9840729387235286710, 4295968767249300726, 1277989312750492883, 750403697714635224, 3036215591853057143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14515360628218652783, 10224097019891343377, 9176940842530023940, 5295486817886607656, 2341840897571774669, 11648589526377348791, 16677115946292689576, 5900691155193699968, 5119947407811220060, 17882043915102295645, 15867156494024459966, 16090863638087042910, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7553352677317462240, 748994844361267888, 7547336479279255184, 12813840270094930087, 7986574489568710564, 6243809814482637102, 6374023427586874052, 4972370306575754106, 9698255539411717765, 8402260971363137004, 7866397620702682136, 3963133567703228598, 1, 0, 0, 0, 1, 0, 15510098368304846681, 10644465099124152288, 2271893550708134116, 10955938084877387415, 16702335214860257337, 11656391078860305642, 14997912950175773344, 12566560672680462445, 16161225923217405001, 13803600456482333144, 9622663477343810731, 12731464969523549591, 11464571068891742851, 5793298599059911546, 17908349476423851244, 1, 0, 0, 0, 1, 0, 12704676709042589133, 8367245878409879047, 17481658025575124860, 15206938952668638091, 16916810907472200588, 13682452505450251602, 6913190410219799142, 1043080754823121706, 16921347809582866242, 6438571068779754291, 407029562402079548, 7491881549557152759, 12299499890598148513, 4650635265747757214, 14119937534703630749, 1, 0, 0, 0, 1, 0, 11149845077031369245, 2828390198417285325, 1437182573471948930, 3770800016172304546, 14165119338755346303, 8421050872483387862, 12618454603290221396, 6862941658795962417, 2726731287352881882, 2730762088957911453, 13787761240489595746, 3440400661109297059, 16309893991999277564, 13247727332705294758, 3255777517629291140, 1, 0, 0, 0, 1, 0, 2963531580527002330, 18404342494026067789, 8946460796590193361, 1538549641630821923, 15650881762132647945, 18242297745273113718, 6261505341338998374, 2770593420692286823, 16410861698623401699, 8355576936208207930, 10283190965555694067, 16259498994873975520, 17614551442000447874, 1289802346192453208, 4899661652548582019, 1, 0, 0, 0, 1, 0, 13795959527436426530, 6394716821350311316, 2551462825531745932, 3662649950675088442, 10090924967376195547, 2254013451933557848, 11176916463285615298, 16164469939521445727, 8472956584581079805, 10089145279525513149, 15816981584402185692, 3041300342890742581, 2732075625107327721, 3056884801892714758, 4565191284080628584, 1, 0, 0, 0, 1, 0, 2429876679052810374, 14279937437711708270, 9838079327257734045, 12413466243433342378, 15555070991869858832, 3526382752987906743, 16699599314531576118, 6746861716770001362, 14985797666948203666, 4067749319688593665, 11090271778037546558, 18280219261996495240, 11564905194821649437, 16919717526667459899, 1539793980828004113, 1, 0, 0, 0, 1, 0, 1990799780330028812, 4458925970043167095, 6416024086417711900, 3131690541743081493, 14339877087618729700, 11538983127386740908, 13015893667273525423, 10458069463001905889, 7707331357694852335, 15760522752058781932, 1680786918385336269, 9524461836107268283, 10540913652282428134, 5321954010838991352, 16001910338161660328, 1, 0, 0, 0, 1, 0, 11742883737114426823, 0, 0, 14617639341020367486, 6888313430102783827, 14221268644167684727, 15390057062148905453, 12864763495673156246, 2531361488896305650, 6057235671332894001, 1138114433189805556, 11146341134166142886, 8273371701363724667, 18416629007910574933, 16130747048670899171, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6350121359078755518, 16919207520546831674, 2619120800729679292, 9966134226732180184, 11069840221589825139, 16198584180859672852, 8520182244182315667, 17403245364016302552, 8776837767210836349, 9631977100618497396, 3920191287070292962, 8501241071240823019, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1074154985721744973, 859159578513939084, 841980681719838180, 5538826350883883796, 2743129109919723025, 2331298026793641183, 11739746407539790532, 4250865385724499409, 7842835560601620329, 18413271307798397411, 1103793272511562248, 9778047403489538902, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8576960520729553430, 3809060186754369406, 13388339383354858226, 9989685048829963204, 8185888587159810481, 10607839477677695183, 15346229459908117188, 2341302228431136742, 9613994929417659617, 1499758295592994876, 4364510604874202960, 4539108168956164212, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1604139919365911138, 9157878094690374909, 2656177146482477345, 9595010673478717796, 18292910592958568240, 14240818815081743895, 12629006099543903781, 17577226387288678131, 13517781640136319575, 3554228101202979253, 473829894064878094, 16239155032122797832, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5113851726573374470, 6425669842054368493, 1057347249925241992, 2952696768975672640, 12237721921963192287, 9867313438556302162, 11629549595353476530, 13716375462026905857, 1661113771033030694, 9306806947978771582, 13789183496966727565, 14849238236368251159, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13536996102937200288, 2701132623000331756, 12877193726173516655, 8134038032300527981, 8943209618246977520, 15795460020964061272, 12391817649960371746, 14482978747921062164, 16589784235244657737, 4401882774217375917, 1955350239938339874, 9108419460474808576, 1, 0, 0, 0, 1, 0, 13741625400428142458, 6805797720165266820, 7573379462002338985, 5144547684530650448, 17379641915532686294, 12251509207411105210, 11332133599874182390, 17924245204927493750, 4746638863317237450, 18215572691662216416, 17754397088096536098, 17095733862217014640, 15315969540976862758, 7201082322234349663, 1033211373414661409, 1, 0, 0, 0, 1, 0, 5385253294000484754, 11621535865369202745, 13691845344148475921, 16371583576737997647, 16999709768989875265, 13886895990537049692, 12013033971053205979, 7340771781180054840, 8335480078758159858, 15252935280552519544, 12360261201437984812, 14837478738765105779, 5957397384759471696, 17689702079462878790, 1460799694261663366, 1, 0, 0, 0, 1, 0, 14229824574460883104, 5588198437801824133, 5994642830237759289, 12027296227437859344, 17323420959416556496, 13216497717183331409, 8883202514107224654, 16875123239233429747, 9236720663990755838, 14381423242728406980, 7810652382804679854, 17270138094532924819, 11070522019866408102, 12178683397221723524, 14959440030310041613, 1, 0, 0, 0, 1, 0, 15796969868683012980, 1642423218726500300, 3179106321758018022, 5035998873325494463, 9146724945876234312, 4275189229324905850, 7594752061560203213, 12754036126848799562, 141238439626841910, 9467399003606204480, 16177446039571837537, 14620454815482057063, 11669769547992992357, 1407059625629950522, 17501633393315606025, 1, 0, 0, 0, 1, 0, 390779239285142343, 5422605986428300552, 649897912096622127, 1047959670635367230, 12872469591277262776, 17065492216843752601, 1236915402111178740, 9424981723294470612, 1766672227767985245, 5901287082041632906, 1165019439709787271, 7292827283948466879, 698204761262232508, 10961895042020971306, 6965916889756314709, 1, 0, 0, 0, 1, 0, 6428661020051792515, 12499036857819316123, 9939962836196470535, 4361064659696575038, 2830433105177125840, 17390634589199639220, 8013578318153954341, 16986576216468074674, 11119902426374535999, 3864284104719206717, 176242085391797703, 4684102489113893021, 14008259259755136035, 6297730490781618091, 9681943962122261504, 1, 0, 0, 0, 1, 0, 14984052988656032524, 8105747836402174106, 9110117087846343256, 75544510591201674, 8044553197656770543, 2934098723242191367, 15355585492520345027, 13224479227546334120, 8741809910406193485, 13866368315332604201, 2699428799277364714, 6887380873242738838, 3932176613876828948, 8986628150783184058, 15782779420328542209, 1, 0, 0, 0, 1, 0, 12952470821017167846, 0, 0, 2978522689205632800, 10790124910810980155, 3272945528020851774, 10508624984882018667, 4675637374086440016, 4725453465222465298, 2875474760261200724, 6186708066785434963, 10086890380770548477, 8849830318071758779, 2733211805524420436, 12020699456941818376, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3061960129452262767, 13726494118104201951, 2313436297690393057, 2862574062899872918, 3556539463682311357, 3114326789966402908, 10421862999996593301, 14062022826502957095, 1645321375146597351, 5876504027679413408, 16716871354996632672, 4735042970479906379, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5601779727658274094, 15750438276851199178, 9701508002112089263, 292885921741812279, 15865424937925414652, 14795199298580283463, 1295265690517985261, 761626268401747468, 16239201862143352504, 17878067193823269498, 2773281916155934536, 3151070592229922496, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17491526265780712239, 7407323102906641682, 1542465249691690504, 12978790960819480190, 3385987959754514103, 1803230571695746105, 16925389328505591881, 4218839459301981158, 15053642145439578838, 15447825779474026874, 9099902973067746305, 3062023609160919321, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968]), kernel: Kernel([Word([7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568])]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 2 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_14.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_14.snap index 4c09e959b6..587d090fb9 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_14.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_14.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7375572182970693729, 11930265205656561266, 4114673899889075534, 357898588148103340, 7285583783616369700, 17607190493438925163, 2980560268975659509, 9840729387235286710, 4295968767249300726, 1277989312750492883, 750403697714635224, 3036215591853057143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14515360628218652783, 10224097019891343377, 9176940842530023940, 5295486817886607656, 2341840897571774669, 11648589526377348791, 16677115946292689576, 5900691155193699968, 5119947407811220060, 17882043915102295645, 15867156494024459966, 16090863638087042910, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7553352677317462240, 748994844361267888, 7547336479279255184, 12813840270094930087, 7986574489568710564, 6243809814482637102, 6374023427586874052, 4972370306575754106, 9698255539411717765, 8402260971363137004, 7866397620702682136, 3963133567703228598, 1, 0, 0, 0, 1, 0, 15510098368304846681, 10644465099124152288, 2271893550708134116, 10955938084877387415, 16702335214860257337, 11656391078860305642, 14997912950175773344, 12566560672680462445, 16161225923217405001, 13803600456482333144, 9622663477343810731, 12731464969523549591, 11464571068891742851, 5793298599059911546, 17908349476423851244, 1, 0, 0, 0, 1, 0, 12704676709042589133, 8367245878409879047, 17481658025575124860, 15206938952668638091, 16916810907472200588, 13682452505450251602, 6913190410219799142, 1043080754823121706, 16921347809582866242, 6438571068779754291, 407029562402079548, 7491881549557152759, 12299499890598148513, 4650635265747757214, 14119937534703630749, 1, 0, 0, 0, 1, 0, 11149845077031369245, 2828390198417285325, 1437182573471948930, 3770800016172304546, 14165119338755346303, 8421050872483387862, 12618454603290221396, 6862941658795962417, 2726731287352881882, 2730762088957911453, 13787761240489595746, 3440400661109297059, 16309893991999277564, 13247727332705294758, 3255777517629291140, 1, 0, 0, 0, 1, 0, 2963531580527002330, 18404342494026067789, 8946460796590193361, 1538549641630821923, 15650881762132647945, 18242297745273113718, 6261505341338998374, 2770593420692286823, 16410861698623401699, 8355576936208207930, 10283190965555694067, 16259498994873975520, 17614551442000447874, 1289802346192453208, 4899661652548582019, 1, 0, 0, 0, 1, 0, 13795959527436426530, 6394716821350311316, 2551462825531745932, 3662649950675088442, 10090924967376195547, 2254013451933557848, 11176916463285615298, 16164469939521445727, 8472956584581079805, 10089145279525513149, 15816981584402185692, 3041300342890742581, 2732075625107327721, 3056884801892714758, 4565191284080628584, 1, 0, 0, 0, 1, 0, 2429876679052810374, 14279937437711708270, 9838079327257734045, 12413466243433342378, 15555070991869858832, 3526382752987906743, 16699599314531576118, 6746861716770001362, 14985797666948203666, 4067749319688593665, 11090271778037546558, 18280219261996495240, 11564905194821649437, 16919717526667459899, 1539793980828004113, 1, 0, 0, 0, 1, 0, 1990799780330028812, 4458925970043167095, 6416024086417711900, 3131690541743081493, 14339877087618729700, 11538983127386740908, 13015893667273525423, 10458069463001905889, 7707331357694852335, 15760522752058781932, 1680786918385336269, 9524461836107268283, 10540913652282428134, 5321954010838991352, 16001910338161660328, 1, 0, 0, 0, 1, 0, 11742883737114426823, 0, 0, 14617639341020367486, 6888313430102783827, 14221268644167684727, 15390057062148905453, 12864763495673156246, 2531361488896305650, 6057235671332894001, 1138114433189805556, 11146341134166142886, 8273371701363724667, 18416629007910574933, 16130747048670899171, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6350121359078755518, 16919207520546831674, 2619120800729679292, 9966134226732180184, 11069840221589825139, 16198584180859672852, 8520182244182315667, 17403245364016302552, 8776837767210836349, 9631977100618497396, 3920191287070292962, 8501241071240823019, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1074154985721744973, 859159578513939084, 841980681719838180, 5538826350883883796, 2743129109919723025, 2331298026793641183, 11739746407539790532, 4250865385724499409, 7842835560601620329, 18413271307798397411, 1103793272511562248, 9778047403489538902, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8576960520729553430, 3809060186754369406, 13388339383354858226, 9989685048829963204, 8185888587159810481, 10607839477677695183, 15346229459908117188, 2341302228431136742, 9613994929417659617, 1499758295592994876, 4364510604874202960, 4539108168956164212, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1604139919365911138, 9157878094690374909, 2656177146482477345, 9595010673478717796, 18292910592958568240, 14240818815081743895, 12629006099543903781, 17577226387288678131, 13517781640136319575, 3554228101202979253, 473829894064878094, 16239155032122797832, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5113851726573374470, 6425669842054368493, 1057347249925241992, 2952696768975672640, 12237721921963192287, 9867313438556302162, 11629549595353476530, 13716375462026905857, 1661113771033030694, 9306806947978771582, 13789183496966727565, 14849238236368251159, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13536996102937200288, 2701132623000331756, 12877193726173516655, 8134038032300527981, 8943209618246977520, 15795460020964061272, 12391817649960371746, 14482978747921062164, 16589784235244657737, 4401882774217375917, 1955350239938339874, 9108419460474808576, 1, 0, 0, 0, 1, 0, 13741625400428142458, 6805797720165266820, 7573379462002338985, 5144547684530650448, 17379641915532686294, 12251509207411105210, 11332133599874182390, 17924245204927493750, 4746638863317237450, 18215572691662216416, 17754397088096536098, 17095733862217014640, 15315969540976862758, 7201082322234349663, 1033211373414661409, 1, 0, 0, 0, 1, 0, 5385253294000484754, 11621535865369202745, 13691845344148475921, 16371583576737997647, 16999709768989875265, 13886895990537049692, 12013033971053205979, 7340771781180054840, 8335480078758159858, 15252935280552519544, 12360261201437984812, 14837478738765105779, 5957397384759471696, 17689702079462878790, 1460799694261663366, 1, 0, 0, 0, 1, 0, 14229824574460883104, 5588198437801824133, 5994642830237759289, 12027296227437859344, 17323420959416556496, 13216497717183331409, 8883202514107224654, 16875123239233429747, 9236720663990755838, 14381423242728406980, 7810652382804679854, 17270138094532924819, 11070522019866408102, 12178683397221723524, 14959440030310041613, 1, 0, 0, 0, 1, 0, 15796969868683012980, 1642423218726500300, 3179106321758018022, 5035998873325494463, 9146724945876234312, 4275189229324905850, 7594752061560203213, 12754036126848799562, 141238439626841910, 9467399003606204480, 16177446039571837537, 14620454815482057063, 11669769547992992357, 1407059625629950522, 17501633393315606025, 1, 0, 0, 0, 1, 0, 390779239285142343, 5422605986428300552, 649897912096622127, 1047959670635367230, 12872469591277262776, 17065492216843752601, 1236915402111178740, 9424981723294470612, 1766672227767985245, 5901287082041632906, 1165019439709787271, 7292827283948466879, 698204761262232508, 10961895042020971306, 6965916889756314709, 1, 0, 0, 0, 1, 0, 6428661020051792515, 12499036857819316123, 9939962836196470535, 4361064659696575038, 2830433105177125840, 17390634589199639220, 8013578318153954341, 16986576216468074674, 11119902426374535999, 3864284104719206717, 176242085391797703, 4684102489113893021, 14008259259755136035, 6297730490781618091, 9681943962122261504, 1, 0, 0, 0, 1, 0, 14984052988656032524, 8105747836402174106, 9110117087846343256, 75544510591201674, 8044553197656770543, 2934098723242191367, 15355585492520345027, 13224479227546334120, 8741809910406193485, 13866368315332604201, 2699428799277364714, 6887380873242738838, 3932176613876828948, 8986628150783184058, 15782779420328542209, 1, 0, 0, 0, 1, 0, 12952470821017167846, 0, 0, 2978522689205632800, 10790124910810980155, 3272945528020851774, 10508624984882018667, 4675637374086440016, 4725453465222465298, 2875474760261200724, 6186708066785434963, 10086890380770548477, 8849830318071758779, 2733211805524420436, 12020699456941818376, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3061960129452262767, 13726494118104201951, 2313436297690393057, 2862574062899872918, 3556539463682311357, 3114326789966402908, 10421862999996593301, 14062022826502957095, 1645321375146597351, 5876504027679413408, 16716871354996632672, 4735042970479906379, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5601779727658274094, 15750438276851199178, 9701508002112089263, 292885921741812279, 15865424937925414652, 14795199298580283463, 1295265690517985261, 761626268401747468, 16239201862143352504, 17878067193823269498, 2773281916155934536, 3151070592229922496, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17491526265780712239, 7407323102906641682, 1542465249691690504, 12978790960819480190, 3385987959754514103, 1803230571695746105, 16925389328505591881, 4218839459301981158, 15053642145439578838, 15447825779474026874, 9099902973067746305, 3062023609160919321, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968]), kernel: Kernel([Word([7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568])]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 2 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 2, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 2, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 2, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 2, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 2, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 2, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 2, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 2, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 2, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 2, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 2, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 2, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 2, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 104, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7375572182970693729, 11930265205656561266, 4114673899889075534, 357898588148103340, 7285583783616369700, 17607190493438925163, 2980560268975659509, 9840729387235286710, 4295968767249300726, 1277989312750492883, 750403697714635224, 3036215591853057143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14515360628218652783, 10224097019891343377, 9176940842530023940, 5295486817886607656, 2341840897571774669, 11648589526377348791, 16677115946292689576, 5900691155193699968, 5119947407811220060, 17882043915102295645, 15867156494024459966, 16090863638087042910, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7553352677317462240, 748994844361267888, 7547336479279255184, 12813840270094930087, 7986574489568710564, 6243809814482637102, 6374023427586874052, 4972370306575754106, 9698255539411717765, 8402260971363137004, 7866397620702682136, 3963133567703228598, 1, 0, 0, 0, 1, 0, 15510098368304846681, 10644465099124152288, 2271893550708134116, 10955938084877387415, 16702335214860257337, 11656391078860305642, 14997912950175773344, 12566560672680462445, 16161225923217405001, 13803600456482333144, 9622663477343810731, 12731464969523549591, 11464571068891742851, 5793298599059911546, 17908349476423851244, 1, 0, 0, 0, 1, 0, 12704676709042589133, 8367245878409879047, 17481658025575124860, 15206938952668638091, 16916810907472200588, 13682452505450251602, 6913190410219799142, 1043080754823121706, 16921347809582866242, 6438571068779754291, 407029562402079548, 7491881549557152759, 12299499890598148513, 4650635265747757214, 14119937534703630749, 1, 0, 0, 0, 1, 0, 11149845077031369245, 2828390198417285325, 1437182573471948930, 3770800016172304546, 14165119338755346303, 8421050872483387862, 12618454603290221396, 6862941658795962417, 2726731287352881882, 2730762088957911453, 13787761240489595746, 3440400661109297059, 16309893991999277564, 13247727332705294758, 3255777517629291140, 1, 0, 0, 0, 1, 0, 2963531580527002330, 18404342494026067789, 8946460796590193361, 1538549641630821923, 15650881762132647945, 18242297745273113718, 6261505341338998374, 2770593420692286823, 16410861698623401699, 8355576936208207930, 10283190965555694067, 16259498994873975520, 17614551442000447874, 1289802346192453208, 4899661652548582019, 1, 0, 0, 0, 1, 0, 13795959527436426530, 6394716821350311316, 2551462825531745932, 3662649950675088442, 10090924967376195547, 2254013451933557848, 11176916463285615298, 16164469939521445727, 8472956584581079805, 10089145279525513149, 15816981584402185692, 3041300342890742581, 2732075625107327721, 3056884801892714758, 4565191284080628584, 1, 0, 0, 0, 1, 0, 2429876679052810374, 14279937437711708270, 9838079327257734045, 12413466243433342378, 15555070991869858832, 3526382752987906743, 16699599314531576118, 6746861716770001362, 14985797666948203666, 4067749319688593665, 11090271778037546558, 18280219261996495240, 11564905194821649437, 16919717526667459899, 1539793980828004113, 1, 0, 0, 0, 1, 0, 1990799780330028812, 4458925970043167095, 6416024086417711900, 3131690541743081493, 14339877087618729700, 11538983127386740908, 13015893667273525423, 10458069463001905889, 7707331357694852335, 15760522752058781932, 1680786918385336269, 9524461836107268283, 10540913652282428134, 5321954010838991352, 16001910338161660328, 1, 0, 0, 0, 1, 0, 11742883737114426823, 0, 0, 14617639341020367486, 6888313430102783827, 14221268644167684727, 15390057062148905453, 12864763495673156246, 2531361488896305650, 6057235671332894001, 1138114433189805556, 11146341134166142886, 8273371701363724667, 18416629007910574933, 16130747048670899171, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6350121359078755518, 16919207520546831674, 2619120800729679292, 9966134226732180184, 11069840221589825139, 16198584180859672852, 8520182244182315667, 17403245364016302552, 8776837767210836349, 9631977100618497396, 3920191287070292962, 8501241071240823019, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1074154985721744973, 859159578513939084, 841980681719838180, 5538826350883883796, 2743129109919723025, 2331298026793641183, 11739746407539790532, 4250865385724499409, 7842835560601620329, 18413271307798397411, 1103793272511562248, 9778047403489538902, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8576960520729553430, 3809060186754369406, 13388339383354858226, 9989685048829963204, 8185888587159810481, 10607839477677695183, 15346229459908117188, 2341302228431136742, 9613994929417659617, 1499758295592994876, 4364510604874202960, 4539108168956164212, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 9760033137073938718, 18135156828501150556, 12074025836888921857, 12052022490343773172, 12679002698944454251, 14053004056904301616, 18207465128223513961, 12867780329443177182, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 10762639943655126491, 8123069549705052795, 10333571018226702209, 3763553361837852375, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1604139919365911138, 9157878094690374909, 2656177146482477345, 9595010673478717796, 18292910592958568240, 14240818815081743895, 12629006099543903781, 17577226387288678131, 13517781640136319575, 3554228101202979253, 473829894064878094, 16239155032122797832, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5113851726573374470, 6425669842054368493, 1057347249925241992, 2952696768975672640, 12237721921963192287, 9867313438556302162, 11629549595353476530, 13716375462026905857, 1661113771033030694, 9306806947978771582, 13789183496966727565, 14849238236368251159, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13536996102937200288, 2701132623000331756, 12877193726173516655, 8134038032300527981, 8943209618246977520, 15795460020964061272, 12391817649960371746, 14482978747921062164, 16589784235244657737, 4401882774217375917, 1955350239938339874, 9108419460474808576, 1, 0, 0, 0, 1, 0, 13741625400428142458, 6805797720165266820, 7573379462002338985, 5144547684530650448, 17379641915532686294, 12251509207411105210, 11332133599874182390, 17924245204927493750, 4746638863317237450, 18215572691662216416, 17754397088096536098, 17095733862217014640, 15315969540976862758, 7201082322234349663, 1033211373414661409, 1, 0, 0, 0, 1, 0, 5385253294000484754, 11621535865369202745, 13691845344148475921, 16371583576737997647, 16999709768989875265, 13886895990537049692, 12013033971053205979, 7340771781180054840, 8335480078758159858, 15252935280552519544, 12360261201437984812, 14837478738765105779, 5957397384759471696, 17689702079462878790, 1460799694261663366, 1, 0, 0, 0, 1, 0, 14229824574460883104, 5588198437801824133, 5994642830237759289, 12027296227437859344, 17323420959416556496, 13216497717183331409, 8883202514107224654, 16875123239233429747, 9236720663990755838, 14381423242728406980, 7810652382804679854, 17270138094532924819, 11070522019866408102, 12178683397221723524, 14959440030310041613, 1, 0, 0, 0, 1, 0, 15796969868683012980, 1642423218726500300, 3179106321758018022, 5035998873325494463, 9146724945876234312, 4275189229324905850, 7594752061560203213, 12754036126848799562, 141238439626841910, 9467399003606204480, 16177446039571837537, 14620454815482057063, 11669769547992992357, 1407059625629950522, 17501633393315606025, 1, 0, 0, 0, 1, 0, 390779239285142343, 5422605986428300552, 649897912096622127, 1047959670635367230, 12872469591277262776, 17065492216843752601, 1236915402111178740, 9424981723294470612, 1766672227767985245, 5901287082041632906, 1165019439709787271, 7292827283948466879, 698204761262232508, 10961895042020971306, 6965916889756314709, 1, 0, 0, 0, 1, 0, 6428661020051792515, 12499036857819316123, 9939962836196470535, 4361064659696575038, 2830433105177125840, 17390634589199639220, 8013578318153954341, 16986576216468074674, 11119902426374535999, 3864284104719206717, 176242085391797703, 4684102489113893021, 14008259259755136035, 6297730490781618091, 9681943962122261504, 1, 0, 0, 0, 1, 0, 14984052988656032524, 8105747836402174106, 9110117087846343256, 75544510591201674, 8044553197656770543, 2934098723242191367, 15355585492520345027, 13224479227546334120, 8741809910406193485, 13866368315332604201, 2699428799277364714, 6887380873242738838, 3932176613876828948, 8986628150783184058, 15782779420328542209, 1, 0, 0, 0, 1, 0, 12952470821017167846, 0, 0, 2978522689205632800, 10790124910810980155, 3272945528020851774, 10508624984882018667, 4675637374086440016, 4725453465222465298, 2875474760261200724, 6186708066785434963, 10086890380770548477, 8849830318071758779, 2733211805524420436, 12020699456941818376, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3061960129452262767, 13726494118104201951, 2313436297690393057, 2862574062899872918, 3556539463682311357, 3114326789966402908, 10421862999996593301, 14062022826502957095, 1645321375146597351, 5876504027679413408, 16716871354996632672, 4735042970479906379, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5601779727658274094, 15750438276851199178, 9701508002112089263, 292885921741812279, 15865424937925414652, 14795199298580283463, 1295265690517985261, 761626268401747468, 16239201862143352504, 17878067193823269498, 2773281916155934536, 3151070592229922496, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17491526265780712239, 7407323102906641682, 1542465249691690504, 12978790960819480190, 3385987959754514103, 1803230571695746105, 16925389328505591881, 4218839459301981158, 15053642145439578838, 15447825779474026874, 9099902973067746305, 3062023609160919321, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968, 8819338964313765439, 6301331656216941589, 10498339818362385984, 16913863751850228813, 2190556552135086015, 5053260159826664462, 12285155954580341409, 9514569903823065872, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(12) }, program_info: ProgramInfo { program_hash: Word([15233389079858696706, 4869430190272581571, 15500832090051527072, 15232111199771387968]), kernel: Kernel([Word([7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568])]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 13, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 2 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_15.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_15.snap index cecdd6bba1..75867bc4db 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_15.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_15.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 0, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 1, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 1, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_16.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_16.snap index cecdd6bba1..75867bc4db 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_16.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_16.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 0, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 1, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 1, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_17.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_17.snap index cecdd6bba1..75867bc4db 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_17.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_17.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 0, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 1, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 1, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_18.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_18.snap index cecdd6bba1..75867bc4db 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_18.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_18.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 0, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 1, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 1, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_19.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_19.snap index cecdd6bba1..75867bc4db 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_19.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_19.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 0, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 6, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 7, 0, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 42, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 1, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 0, 0, 1, 0, 0, 1, 1, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 0, 0, 1, 0, 0, 1, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11656, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6714198787893475936, 18084035356118526352, 4199576522683349447, 7560057297276955988, 18280076181055982575, 15125170292333450443, 6055246182589913733, 8146055133796963630, 12761879591277148733, 4789346784708035796, 6351111885067026894, 2084118884093035279, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5262284953624879131, 8386870944408484201, 16513391592299529611, 7451013195867945919, 3965010120048981150, 7072657932567702059, 15015595405278911690, 4724864404296433607, 3794756304714494565, 9438751512570250357, 14086295994708840477, 16979859941949546961, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6828048997998717653, 18056918720989013854, 11415640949254272304, 7468487593070852196, 1623299660155787797, 10475291980250876467, 2209046468675768902, 10453305271538430204, 10919382803049057886, 447952077691938652, 3142920623105062021, 1454299506056429821, 1, 0, 0, 0, 1, 0, 11959032640791191427, 13666984456735322931, 12430950944235583873, 14647846255598321281, 11520229540186073721, 16138036929710694921, 5578183109591783882, 11930292174601709627, 14632109792663117375, 16429197663637467330, 17141108237620938331, 13927811434585922718, 6351356675900770483, 4317195510637014184, 9658643065222637557, 1, 0, 0, 0, 1, 0, 3078434273127823899, 5753377056128261292, 7043657405344780329, 9916068016290756984, 12303762929371991135, 15625472986208536177, 17025371161980089605, 17841510847136093686, 11537033439839832588, 18370261572729563296, 16936235645680974811, 41153506376499461, 11511034416225137032, 12977978004680762325, 16650374201325163722, 1, 0, 0, 0, 1, 0, 16093488747192154823, 9136889811217566327, 15238340014812686010, 6061515485015027193, 16455507557982986163, 13332197512776217968, 6710066216774366729, 2022739540363098314, 16116176887352657770, 15223121510830934757, 10618808740372936561, 18362204307013225363, 12230522212327928379, 211962335804367550, 17176177262691414244, 1, 0, 0, 0, 1, 0, 17584045558346364245, 8021141784340784171, 17538920393594018726, 9245574117575493602, 9198509167958908347, 706573335075180235, 4986060230214018536, 4092740078069974091, 7669544778380245671, 3912605942422700262, 17652411276563186968, 9538491437159792328, 15728916292645010880, 5244269534978718672, 442435874165139119, 1, 0, 0, 0, 1, 0, 3172838986399921646, 14996615673828945713, 2968596499138535119, 13553995817865937844, 1544674922431042375, 5341110475237803180, 6457499153671182820, 1597700055042697404, 4105927596877687309, 7112424425452913463, 12442058685904907795, 13797917351588149895, 8280685582260709248, 14654598206063183317, 4141759445261917472, 1, 0, 0, 0, 1, 0, 18432037966602915394, 11157278412179636212, 3333037102311562019, 8806896510487478352, 6533551228799195237, 13389502447794973829, 15065279868519608165, 10536769335197150641, 1322695487397776109, 15112974401160243995, 14778499304685795812, 2655893075036451977, 15172713941042952680, 13178742765486355260, 10387565380055278256, 1, 0, 0, 0, 1, 0, 18181589522906879612, 16462817036687190629, 13897413906888730423, 2444726075814550534, 13039263708530965818, 9767862146044075473, 16994104539161729445, 3295906456874767760, 16338446684875281086, 5238070817263862176, 11933451322373121057, 18163310674975357977, 3914062371738178895, 2639949635019592417, 3691450672437772660, 1, 0, 0, 0, 1, 0, 9441086471966058156, 0, 0, 3069389264726801426, 17714998603219848343, 3285997397792070136, 2327203233976270205, 4976836170739997781, 12287193162084105824, 4267926381848052110, 873880226830208445, 5002589281792664271, 8614894336467293783, 13436383826829479040, 12256855995572753726, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3979217445866956620, 14102459334756352921, 14473951691792990803, 8253253226048886083, 12319687016213027555, 13089916287630526229, 17044511642202081265, 6896812394605202475, 9256382872640968643, 14221135810103683560, 12080155723705641895, 7569214225554358494, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6693606464693965975, 13661835471193379756, 8827937223658185560, 11671578295265948239, 13490282225851742651, 1568845385281768860, 17370313250110904770, 2024842447089060639, 6570002101874463971, 11406071542091908609, 6767987840126452263, 1017686422583121037, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9525288177353527302, 3038016940647586670, 9698676695870635420, 14297456315487806992, 3371801902832234206, 982340402770608276, 13397257034080852565, 16625734836325714912, 3849537215181896567, 571586377235018247, 14392317091133450653, 10327407591150878848, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 3795543859124105201, 12910581729787565904, 17596568325206204932, 12512094004962322130, 5735281858523620986, 3013510715159483905, 7390177608867021213, 15025446886891081073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11182969138190702361, 1109628455053940361, 13928676565061410159, 297470094449022674, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15045917672181612303, 8184561966951183876, 1314981229280595867, 10051713503687926694, 10772660272533654046, 10088766553729725414, 8691876854061179148, 5989289390391757114, 3407397722647202213, 7941852203687681180, 4199208231896291776, 15233230393479930649, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3672327111134984977, 12431805880114311043, 1393532256400242982, 5258910437097366761, 3331697170176629084, 12574093635772317570, 2952350747126730564, 15670015339098587014, 13644814392425193274, 2987825311454433607, 6349271639347163621, 15702789941308523576, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11902001817992340801, 2986356007899077631, 13433705342207763738, 14031537229609682064, 602109730184155310, 5470069473511751658, 7968203687716298290, 12708827926449341197, 9689174787852538317, 185071303888742221, 5568595648257864309, 8819781861782654629, 1, 0, 0, 0, 1, 0, 9433051896879704986, 3790096704121066977, 7848157813885660720, 97480563262877602, 2836244341662188919, 12880831435259048250, 18190284629542346231, 16230148280330706633, 9645793732101008923, 6747517476428823928, 10159927950043513901, 15759480978611340324, 16140725249773135932, 10224931331962954075, 7112644758334533508, 1, 0, 0, 0, 1, 0, 12268806337265941227, 8766527133291152460, 4573212491205067738, 1451330498122947575, 13878284404078727054, 13732313223959877570, 4019409425675168575, 14888577262766439787, 7118521641278947238, 5699380547329532508, 9229756563573051371, 1502926046713635634, 11073859438158044651, 3706462809677116963, 10242380937000070843, 1, 0, 0, 0, 1, 0, 12264599910826326487, 4401672593088936956, 3287770912268324671, 8550984974115591347, 11905155073870025459, 15581584642080412492, 16642022229570326204, 4740702640077452126, 8228232126921631746, 6257583805205658612, 10107168241231917326, 4186763142475177793, 16536071023746429034, 4953509182438845792, 17015988684670402201, 1, 0, 0, 0, 1, 0, 10482044717877897468, 11338035720719303533, 15111143544560920122, 5779906183691085674, 5883496260565631343, 17424758021352066268, 6872649224968331273, 18294822284401514132, 14018593041447406970, 3295089823193122164, 12619661555644649350, 13163397875087894329, 12116759677655250999, 12872180446847298231, 10753966634497852319, 1, 0, 0, 0, 1, 0, 2142659226510195682, 8250976014423777012, 11550997137187900197, 7239115491427587826, 6214639496702145664, 13747770174448213841, 8363779881416372286, 18258193129875665644, 3929539690735302143, 7640632346113799527, 10501448523390229441, 575959985319833606, 8057038266027202789, 5675564903335979949, 17845322355197915738, 1, 0, 0, 0, 1, 0, 1980663272019683980, 16254047807534945359, 12731791925462422257, 8817470180767843173, 1035954869286151888, 10799815877710934765, 12949568200151355456, 17581484848263912285, 12655249523595546680, 5805413556949044653, 9960833320626690499, 8665485641724560922, 11146351406925299070, 13879671978791253311, 9689802115657313068, 1, 0, 0, 0, 1, 0, 2823715339336108463, 15599274894951921542, 4792471773839294427, 1023167627240586914, 12555736327846716176, 1619117325320043308, 18184433440084438609, 10658559677463134471, 9638171237357393134, 13312272456227001370, 2557094292829749679, 6384512333148749163, 13509558775822115028, 6737505022417937354, 7845909286502989649, 1, 0, 0, 0, 1, 0, 15590779242968047633, 0, 0, 12615841091071546269, 14389918991418187594, 6190024525131486611, 1586181560816232196, 1052908464763109826, 8064604530099592479, 11252467974344770686, 11951277814213817673, 7414754653220847914, 4751058192101309365, 10017226585432634212, 1196237303718990885, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15373572920503822367, 5150637797762075635, 17671950935398765622, 8020025137186066841, 4274762298296320367, 544627542347870852, 2629112354487966090, 13884819925875295975, 8368586536930615942, 15345629614104209519, 11893931769684808775, 5064625229425039166, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11769995123877236600, 11237118474907085960, 15303512720733905693, 13419225700498867773, 7383511416371792464, 11879905738846635842, 10128035487146424848, 1926379571595510347, 10138228048917253579, 1689963602473071179, 16471875099240353401, 12661189034561966549, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3762647969008011219, 11752652705714102353, 10727837149375754730, 13671651770198504476, 17305170235876004791, 5683487714952213815, 18233951381382816412, 5918588896905128530, 344980745193352015, 12869561156624962469, 9975926385796085953, 11511655067934063768, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694, 2200823396264285425, 8088984326603898052, 1751709948898726303, 3405979658670756574, 5644431973654019812, 12554030503530361323, 11231727832144176264, 11479359825177848513, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([8269653645296248010, 997682303299740331, 12907160815575155319, 18024383338294781694]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_20.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_20.snap index 2c8f6441bb..dd57e330fb 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_20.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_20.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 9, 0, 1, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 8, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 8, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 8, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 8, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 8, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 8, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 8, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 7, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 7, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 7, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 7, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 7, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 7, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 7, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 7, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 6, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 6, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 6, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 6, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 6, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 6, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 5, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 5, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 5, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 5, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 5, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 5, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 4, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 4, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 4, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 4, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 3, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 3, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 3, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 3, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 2, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 0, 0, 1, 0, 0, 0, 1, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 0, 0, 1, 0, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3330424775026476592, 13633250484821623215, 16565837043221829196, 12610063329678779487, 1406583001570465792, 16768526919827857497, 4292185681439734302, 10299881888812700030, 5070319740822484234, 11830947885319956418, 15125640082304919550, 2368214261414429154, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7732229819737520946, 15098993065726469111, 52948362219275850, 9599099202048490781, 12562663752152469569, 17573593815267411876, 7698449017624504359, 13506878991346097494, 11549475095918428048, 7737209888784159602, 6110574402514906801, 15583218305860063073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12659763553976530720, 1564281538360678972, 8677964002070154388, 7298046952032101196, 16633851142346839330, 10818335527229137478, 4120049919115121735, 14759589214631061464, 9819109219817742568, 13533379427213586747, 4404297180800676786, 12342565443853005153, 1, 0, 0, 0, 1, 0, 6508846668869650000, 17336912220865242963, 2268843052628052976, 13820936547498519501, 7168328730833322865, 7428484016288157022, 16026473122383984320, 17021480690231868718, 11942460420815768259, 12642019494772420219, 7301829639095749904, 5677600078177657746, 12969897466948219293, 4728227612288081644, 7791191498940082574, 1, 0, 0, 0, 1, 0, 15837335187878938475, 5466507011147170445, 11650170051303322910, 5030538143349324000, 13591172423217881213, 7596566350181367049, 5410472981661512575, 12021280163646879782, 11378469682479349365, 840282323232377843, 2494235991830255255, 6870174020804907583, 18099434164004083138, 10405162090868595527, 6247074573395806345, 1, 0, 0, 0, 1, 0, 14897033870199487714, 13140683236260271155, 14159644452561526580, 5695604368834329320, 1007570544942142144, 5033691822950904881, 5904063656561684665, 944699227762067814, 12631760754265391769, 14684696359318715547, 5549456538037663492, 14117325213115724257, 8196759787025064775, 13512312828114051231, 12501576801121215107, 1, 0, 0, 0, 1, 0, 7883221524574062887, 13183696492710529508, 6213114786013009576, 8078757315035365696, 9498329046798837348, 6115393411247877634, 2891811661249932042, 14704623317114553828, 17873088011118479782, 12960248188949622509, 17727271824480331481, 16537587825367420675, 18177523421240333385, 11454603613487247488, 14277720092332100080, 1, 0, 0, 0, 1, 0, 3351410150454291730, 16279278462051668121, 10035562370865624816, 9729162786960114112, 5981274731275683258, 17197119244649549383, 16735389142514185239, 17342022136955130751, 11599468651034345541, 856522523927216338, 15210444525259934523, 1665145345483041546, 1860837626615492164, 15725343254588574135, 12090932747658876990, 1, 0, 0, 0, 1, 0, 15032980823283040232, 2668283458286770416, 12407409512729445019, 3179630577014811908, 15292824893734897630, 3136236054167912163, 13251084164183215555, 9877562264475108305, 764975448091728428, 12450766651322475975, 7423511914796799812, 9500338696261382317, 2703103454418315711, 13843504867107001118, 3675188622214856303, 1, 0, 0, 0, 1, 0, 6987334820542205177, 436417979830380839, 13177538606264077422, 14999066466406693845, 15059493462076997690, 11340220366618064719, 6580507474643651363, 8487705884637814572, 15179557481995246257, 11193936901615452288, 2890705529596562428, 14430869544081691912, 9827923975568229619, 3736249992832820982, 3180536826353817667, 1, 0, 0, 0, 1, 0, 7020168012590274751, 0, 0, 17453232571701437290, 5021883210577128063, 5496590912397587492, 6693558341526111425, 8847518126511086492, 11690776235517962509, 5392781400556584604, 4682383242810761218, 9343508596961576512, 16549791451828015234, 8795331189349109030, 15037300764129498232, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7539745443808178835, 9884045457320590091, 8382695108894398131, 5283201688561864115, 11767201095350394052, 11166959267981414839, 15703610354425254697, 12064640095342720771, 11936680880561889502, 15606093107492977367, 10434554919272483089, 12722152077589496357, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14554316550668318802, 5367026278670357791, 9643181922175718153, 5334752974852163097, 11260389542763349256, 12815587692045090980, 12391508132885235615, 16112425486122001154, 3422498555177881379, 40421079456104423, 15053297738150165437, 5754948178406885282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15063345752223211733, 8499294198486805672, 16042312733989464482, 451731299183430202, 4551861726624713720, 7859047597365690811, 8620148927055889210, 9666454503914171857, 17255066275290727039, 33594342817809819, 12279517140635782046, 9383881360936187956, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14568136944800275082, 5693535723676280393, 9230767544379437105, 1921340627054025915, 4826001026438697181, 9026977856739391370, 10597412231254617917, 8653818256660346722, 2401047653221911346, 3038244952392737403, 8386361303932939763, 13893715067188783613, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12559996978644727669, 9307941706856421244, 18310630857442586767, 11168366585808691894, 13927464871572189232, 4386750069800107475, 11056066896847582412, 821691781470963977, 4346621156346694740, 2166498267314208258, 13068211219747943554, 3737686312150097138, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16006034000059690936, 17583976365434994224, 6798288544665969845, 16344827155364741241, 8487031467837880959, 10598485069506239844, 926831815845570768, 17943701130779573558, 15690230013100567693, 16766052460675760559, 10741543262911175860, 6408571846489205195, 1, 0, 0, 0, 1, 0, 9144131815937747872, 3342878222920529613, 4791714562823606942, 15808130082429351686, 11956256213068276591, 12649659004750065655, 13917605778022436041, 7953084218463226909, 13751116549494668150, 15146036891941496142, 3491480252041350267, 12052213250462948496, 17479836829311383480, 16819603317278983686, 5309320507954343198, 1, 0, 0, 0, 1, 0, 1038103851795962350, 4430605040022927656, 16365904851233496502, 894576452673648096, 1340502547894095473, 12601220862983867223, 16222497246401579549, 16644535012971742472, 6869486424216496389, 13266683287137316598, 12162679553338055516, 3160744395414731040, 16470951341042419630, 17717239843479976187, 6474302970739201787, 1, 0, 0, 0, 1, 0, 16229564526704673406, 10174200792466558210, 5132793225392427293, 9980680059887464609, 12726130892030271688, 312583470408719867, 758472841121971562, 14563339716269964045, 18010894049048312095, 16931617059033676533, 15435832236802784694, 10720145895975203640, 8361105415211156204, 2779769903465702190, 12429535237881910980, 1, 0, 0, 0, 1, 0, 6215541400981523569, 1953204460931882521, 12589335010609790225, 15843714178786416863, 3287199712077657921, 1991947075903969606, 3767440642589974121, 3375764636979625919, 17649433461619154043, 15150382077316258576, 10610490743746459257, 12381787083236736442, 16788006368298087947, 11287199716539837261, 15563175998310034114, 1, 0, 0, 0, 1, 0, 14427469169104333761, 6340093208524402435, 12262828500061219108, 3395211782606276051, 14508720026418909433, 11172295513373146926, 3431797671267201506, 11592395684445633353, 855825648432312573, 3749972803617457769, 10969265948996096203, 16441368248785967826, 6962236012055562966, 17793881754348373966, 4507428390885076546, 1, 0, 0, 0, 1, 0, 14592383679640689303, 1910163776289539337, 13338365197478444082, 3112263678112869121, 9793349915183632648, 166719433298183890, 5274326486456948617, 15838446667082529291, 3952939840611939921, 17343623425168465586, 5018759638511748755, 8935168685033341816, 5951881526364525804, 5205786761888799519, 12658208632913334575, 1, 0, 0, 0, 1, 0, 16738660098177737227, 9829750214121427853, 12484115052089468332, 15237271270752782119, 16244276080775719304, 18103925836791549846, 15867602839234938544, 12094773271668234643, 11384225568855102440, 5020084506774034519, 3608565717871609608, 5752598619104470273, 6560905318933416747, 3768506969286097604, 6038828855361889649, 1, 0, 0, 0, 1, 0, 75223512047035789, 0, 0, 6870828195219142669, 2520783628599955940, 7353009946795117330, 17045986882743664444, 14360904859585829753, 2924959973998026295, 2455930810486398184, 7973159619665332708, 12628972628903398239, 5462523753418276656, 9367766578866915876, 15990457456638139626, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12714099020863010695, 12314456283572504356, 469635739213563567, 4147903628926627533, 13470963638813042195, 429476535988054822, 10543436976244887593, 14670346996245963865, 3139557918845001204, 5461299377107545721, 4805225664863956509, 8292027417405396428, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5224376302272959154, 6535409800777915487, 7901122908367659010, 4079954944710007123, 13830904396796715875, 17383573277674600677, 13682516968888804929, 6184594554218323809, 1597138777695243925, 10515379984412735135, 7450238737884914862, 12456535987381445341, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14781572642473112572, 11268362592956912536, 5766087612434108876, 10588667258124334541, 9960013932953480218, 1883220378389933149, 11574410555278975115, 17786267665435354569, 15852581941664405912, 1357729935919477555, 7510284002737324288, 4686309106959500238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2990417547231451768, 11606517949721719272, 17598947928349150032, 14580412695609233024, 13599348264422318050, 69556848653847272, 3813457227114323323, 2886498774908945457, 7439600795053578285, 17809381881860746878, 4014163844046372573, 3176173060019065635, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8200055882763834902, 8595871163399933719, 4957589343064393818, 12971821499548943886, 9048627971498202333, 2279577280749402753, 6994299592571856765, 15711135636713186135, 17764699242312753117, 14185813834021479236, 1979187468149850032, 18309940476973301558, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15107023413552199376, 7763683116636157069, 6242447045300438422, 12942151567717980516, 4616644171576346372, 6239043535079259963, 5702578803007136341, 17215236981565434804, 72379023848321437, 2902380466328372776, 7068929233685234045, 6936565830330512698, 1, 0, 0, 0, 1, 0, 528576776446583989, 10409606060068835052, 5784423647953917837, 8385687432658166895, 838997349906846708, 4795761656943466364, 293990104348951469, 13446530094027973481, 7823300322844699129, 15311994542782308321, 908232164244690453, 3840146011074602084, 10999219428618119040, 6627279045165985143, 6894736762296179522, 1, 0, 0, 0, 1, 0, 12380241214066733373, 6763481784501978893, 3664971892418121107, 11139320331324068031, 8111388737755370581, 11627377236417283134, 11966816476348176754, 3589365582169471582, 12959563699934572877, 16837525512190061999, 12254673123217560222, 771969030954554421, 12696786409220765700, 1740402123045436483, 6840278566006653320, 1, 0, 0, 0, 1, 0, 8758598539355441563, 14327797909354101607, 3238487269456306309, 1252671640222326947, 3118134149246226434, 15205984627333468001, 11534859557249128228, 264848703107953315, 5613634717561556402, 1237772870699038471, 18319684398448937806, 777766613761440792, 16717684302941853782, 65503834883425781, 3431188141752586880, 1, 0, 0, 0, 1, 0, 17573171947292431650, 6692160042088053455, 9889382861130386235, 4014227156326565798, 2305040771202529034, 4569674865772026702, 980116766328138766, 891801733175697187, 10453514483181846641, 18097642912412713810, 3602725314699933855, 14586568436552896239, 17206474997006265051, 11998108441263059891, 2302137229552580420, 1, 0, 0, 0, 1, 0, 11214541640256768195, 1456276470065412101, 3012063381053750362, 17477853997594743235, 4667652151526467516, 14709859391037291514, 15576478276301900443, 5288871968538360514, 12559634219275278239, 16952069533520764759, 13774466749383009485, 7613061892596625462, 5580437753203777486, 5204010590575197441, 11845451884839552921, 1, 0, 0, 0, 1, 0, 10349408106071310053, 10035088333115331288, 14142664761481779532, 15706959181585180523, 15750389702075093135, 876174554396868075, 4889082965904642440, 14848674461360674975, 15407253393194772940, 14445929105909601636, 14321220139057541288, 17693711337466712468, 15051763954056533599, 12628586848138973198, 12278794746552983052, 1, 0, 0, 0, 1, 0, 951615792977801264, 1211405113549675186, 17985020091891048998, 15445358949429791952, 2099687338970431013, 14303982336399641814, 12393266145043202429, 14151277613136798520, 1998109451585880901, 9606769581569578625, 1379169538700861503, 7353230019346707888, 844824200045222171, 6720472488718189255, 14310782857892986700, 1, 0, 0, 0, 1, 0, 7643984727775434844, 0, 0, 14286495051698513565, 6791090761664616374, 12627603787832494922, 853764681371061454, 6760124904423015973, 1333400193073781990, 18063649775432527150, 14882639257257424707, 14567186806364265088, 5672989858483365109, 15061013104031335890, 9662888408142346895, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4315117985825319308, 17954920195441939375, 2358074803509054857, 12566827890799503780, 11226925817970638094, 1361027555808818653, 3204687512694590580, 4464924001417791506, 8265106158072298997, 14154439558213594386, 4676228375886937826, 16236416741726566504, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13180871958580017059, 6438200026603866080, 16405101789199201340, 12734261918077566887, 323561318445804460, 5346936254995238101, 523131765818647386, 4566463403740325912, 6616889263695345418, 15349070088087119300, 17477781110059685856, 1941798973941376537, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9324640818690322529, 1507262460208602102, 1581131786309040293, 13460201712649497096, 11770041052112546722, 8929045628408978585, 13905210272577125578, 1351933157961486422, 11403119304603636779, 17443416980221933050, 9362502897182671987, 5283201687609097620, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(88) }, program_info: ProgramInfo { program_hash: Word([6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 89, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 9, 0, 1, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 8, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 8, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 8, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 8, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 8, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 8, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 8, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 7, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 7, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 7, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 7, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 7, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 7, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 7, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 7, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 6, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 6, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 6, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 6, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 6, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 6, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 5, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 5, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 5, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 5, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 5, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 5, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 4, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 4, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 4, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 4, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 3, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 3, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 3, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 3, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 2, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 0, 0, 1, 0, 0, 1, 1, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 1, 1, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 1, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 0, 0, 1, 0, 0, 1, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3330424775026476592, 13633250484821623215, 16565837043221829196, 12610063329678779487, 1406583001570465792, 16768526919827857497, 4292185681439734302, 10299881888812700030, 5070319740822484234, 11830947885319956418, 15125640082304919550, 2368214261414429154, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7732229819737520946, 15098993065726469111, 52948362219275850, 9599099202048490781, 12562663752152469569, 17573593815267411876, 7698449017624504359, 13506878991346097494, 11549475095918428048, 7737209888784159602, 6110574402514906801, 15583218305860063073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12659763553976530720, 1564281538360678972, 8677964002070154388, 7298046952032101196, 16633851142346839330, 10818335527229137478, 4120049919115121735, 14759589214631061464, 9819109219817742568, 13533379427213586747, 4404297180800676786, 12342565443853005153, 1, 0, 0, 0, 1, 0, 6508846668869650000, 17336912220865242963, 2268843052628052976, 13820936547498519501, 7168328730833322865, 7428484016288157022, 16026473122383984320, 17021480690231868718, 11942460420815768259, 12642019494772420219, 7301829639095749904, 5677600078177657746, 12969897466948219293, 4728227612288081644, 7791191498940082574, 1, 0, 0, 0, 1, 0, 15837335187878938475, 5466507011147170445, 11650170051303322910, 5030538143349324000, 13591172423217881213, 7596566350181367049, 5410472981661512575, 12021280163646879782, 11378469682479349365, 840282323232377843, 2494235991830255255, 6870174020804907583, 18099434164004083138, 10405162090868595527, 6247074573395806345, 1, 0, 0, 0, 1, 0, 14897033870199487714, 13140683236260271155, 14159644452561526580, 5695604368834329320, 1007570544942142144, 5033691822950904881, 5904063656561684665, 944699227762067814, 12631760754265391769, 14684696359318715547, 5549456538037663492, 14117325213115724257, 8196759787025064775, 13512312828114051231, 12501576801121215107, 1, 0, 0, 0, 1, 0, 7883221524574062887, 13183696492710529508, 6213114786013009576, 8078757315035365696, 9498329046798837348, 6115393411247877634, 2891811661249932042, 14704623317114553828, 17873088011118479782, 12960248188949622509, 17727271824480331481, 16537587825367420675, 18177523421240333385, 11454603613487247488, 14277720092332100080, 1, 0, 0, 0, 1, 0, 3351410150454291730, 16279278462051668121, 10035562370865624816, 9729162786960114112, 5981274731275683258, 17197119244649549383, 16735389142514185239, 17342022136955130751, 11599468651034345541, 856522523927216338, 15210444525259934523, 1665145345483041546, 1860837626615492164, 15725343254588574135, 12090932747658876990, 1, 0, 0, 0, 1, 0, 15032980823283040232, 2668283458286770416, 12407409512729445019, 3179630577014811908, 15292824893734897630, 3136236054167912163, 13251084164183215555, 9877562264475108305, 764975448091728428, 12450766651322475975, 7423511914796799812, 9500338696261382317, 2703103454418315711, 13843504867107001118, 3675188622214856303, 1, 0, 0, 0, 1, 0, 6987334820542205177, 436417979830380839, 13177538606264077422, 14999066466406693845, 15059493462076997690, 11340220366618064719, 6580507474643651363, 8487705884637814572, 15179557481995246257, 11193936901615452288, 2890705529596562428, 14430869544081691912, 9827923975568229619, 3736249992832820982, 3180536826353817667, 1, 0, 0, 0, 1, 0, 7020168012590274751, 0, 0, 17453232571701437290, 5021883210577128063, 5496590912397587492, 6693558341526111425, 8847518126511086492, 11690776235517962509, 5392781400556584604, 4682383242810761218, 9343508596961576512, 16549791451828015234, 8795331189349109030, 15037300764129498232, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7539745443808178835, 9884045457320590091, 8382695108894398131, 5283201688561864115, 11767201095350394052, 11166959267981414839, 15703610354425254697, 12064640095342720771, 11936680880561889502, 15606093107492977367, 10434554919272483089, 12722152077589496357, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14554316550668318802, 5367026278670357791, 9643181922175718153, 5334752974852163097, 11260389542763349256, 12815587692045090980, 12391508132885235615, 16112425486122001154, 3422498555177881379, 40421079456104423, 15053297738150165437, 5754948178406885282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15063345752223211733, 8499294198486805672, 16042312733989464482, 451731299183430202, 4551861726624713720, 7859047597365690811, 8620148927055889210, 9666454503914171857, 17255066275290727039, 33594342817809819, 12279517140635782046, 9383881360936187956, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14568136944800275082, 5693535723676280393, 9230767544379437105, 1921340627054025915, 4826001026438697181, 9026977856739391370, 10597412231254617917, 8653818256660346722, 2401047653221911346, 3038244952392737403, 8386361303932939763, 13893715067188783613, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12559996978644727669, 9307941706856421244, 18310630857442586767, 11168366585808691894, 13927464871572189232, 4386750069800107475, 11056066896847582412, 821691781470963977, 4346621156346694740, 2166498267314208258, 13068211219747943554, 3737686312150097138, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16006034000059690936, 17583976365434994224, 6798288544665969845, 16344827155364741241, 8487031467837880959, 10598485069506239844, 926831815845570768, 17943701130779573558, 15690230013100567693, 16766052460675760559, 10741543262911175860, 6408571846489205195, 1, 0, 0, 0, 1, 0, 9144131815937747872, 3342878222920529613, 4791714562823606942, 15808130082429351686, 11956256213068276591, 12649659004750065655, 13917605778022436041, 7953084218463226909, 13751116549494668150, 15146036891941496142, 3491480252041350267, 12052213250462948496, 17479836829311383480, 16819603317278983686, 5309320507954343198, 1, 0, 0, 0, 1, 0, 1038103851795962350, 4430605040022927656, 16365904851233496502, 894576452673648096, 1340502547894095473, 12601220862983867223, 16222497246401579549, 16644535012971742472, 6869486424216496389, 13266683287137316598, 12162679553338055516, 3160744395414731040, 16470951341042419630, 17717239843479976187, 6474302970739201787, 1, 0, 0, 0, 1, 0, 16229564526704673406, 10174200792466558210, 5132793225392427293, 9980680059887464609, 12726130892030271688, 312583470408719867, 758472841121971562, 14563339716269964045, 18010894049048312095, 16931617059033676533, 15435832236802784694, 10720145895975203640, 8361105415211156204, 2779769903465702190, 12429535237881910980, 1, 0, 0, 0, 1, 0, 6215541400981523569, 1953204460931882521, 12589335010609790225, 15843714178786416863, 3287199712077657921, 1991947075903969606, 3767440642589974121, 3375764636979625919, 17649433461619154043, 15150382077316258576, 10610490743746459257, 12381787083236736442, 16788006368298087947, 11287199716539837261, 15563175998310034114, 1, 0, 0, 0, 1, 0, 14427469169104333761, 6340093208524402435, 12262828500061219108, 3395211782606276051, 14508720026418909433, 11172295513373146926, 3431797671267201506, 11592395684445633353, 855825648432312573, 3749972803617457769, 10969265948996096203, 16441368248785967826, 6962236012055562966, 17793881754348373966, 4507428390885076546, 1, 0, 0, 0, 1, 0, 14592383679640689303, 1910163776289539337, 13338365197478444082, 3112263678112869121, 9793349915183632648, 166719433298183890, 5274326486456948617, 15838446667082529291, 3952939840611939921, 17343623425168465586, 5018759638511748755, 8935168685033341816, 5951881526364525804, 5205786761888799519, 12658208632913334575, 1, 0, 0, 0, 1, 0, 16738660098177737227, 9829750214121427853, 12484115052089468332, 15237271270752782119, 16244276080775719304, 18103925836791549846, 15867602839234938544, 12094773271668234643, 11384225568855102440, 5020084506774034519, 3608565717871609608, 5752598619104470273, 6560905318933416747, 3768506969286097604, 6038828855361889649, 1, 0, 0, 0, 1, 0, 75223512047035789, 0, 0, 6870828195219142669, 2520783628599955940, 7353009946795117330, 17045986882743664444, 14360904859585829753, 2924959973998026295, 2455930810486398184, 7973159619665332708, 12628972628903398239, 5462523753418276656, 9367766578866915876, 15990457456638139626, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12714099020863010695, 12314456283572504356, 469635739213563567, 4147903628926627533, 13470963638813042195, 429476535988054822, 10543436976244887593, 14670346996245963865, 3139557918845001204, 5461299377107545721, 4805225664863956509, 8292027417405396428, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5224376302272959154, 6535409800777915487, 7901122908367659010, 4079954944710007123, 13830904396796715875, 17383573277674600677, 13682516968888804929, 6184594554218323809, 1597138777695243925, 10515379984412735135, 7450238737884914862, 12456535987381445341, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14781572642473112572, 11268362592956912536, 5766087612434108876, 10588667258124334541, 9960013932953480218, 1883220378389933149, 11574410555278975115, 17786267665435354569, 15852581941664405912, 1357729935919477555, 7510284002737324288, 4686309106959500238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2990417547231451768, 11606517949721719272, 17598947928349150032, 14580412695609233024, 13599348264422318050, 69556848653847272, 3813457227114323323, 2886498774908945457, 7439600795053578285, 17809381881860746878, 4014163844046372573, 3176173060019065635, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8200055882763834902, 8595871163399933719, 4957589343064393818, 12971821499548943886, 9048627971498202333, 2279577280749402753, 6994299592571856765, 15711135636713186135, 17764699242312753117, 14185813834021479236, 1979187468149850032, 18309940476973301558, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15107023413552199376, 7763683116636157069, 6242447045300438422, 12942151567717980516, 4616644171576346372, 6239043535079259963, 5702578803007136341, 17215236981565434804, 72379023848321437, 2902380466328372776, 7068929233685234045, 6936565830330512698, 1, 0, 0, 0, 1, 0, 528576776446583989, 10409606060068835052, 5784423647953917837, 8385687432658166895, 838997349906846708, 4795761656943466364, 293990104348951469, 13446530094027973481, 7823300322844699129, 15311994542782308321, 908232164244690453, 3840146011074602084, 10999219428618119040, 6627279045165985143, 6894736762296179522, 1, 0, 0, 0, 1, 0, 12380241214066733373, 6763481784501978893, 3664971892418121107, 11139320331324068031, 8111388737755370581, 11627377236417283134, 11966816476348176754, 3589365582169471582, 12959563699934572877, 16837525512190061999, 12254673123217560222, 771969030954554421, 12696786409220765700, 1740402123045436483, 6840278566006653320, 1, 0, 0, 0, 1, 0, 8758598539355441563, 14327797909354101607, 3238487269456306309, 1252671640222326947, 3118134149246226434, 15205984627333468001, 11534859557249128228, 264848703107953315, 5613634717561556402, 1237772870699038471, 18319684398448937806, 777766613761440792, 16717684302941853782, 65503834883425781, 3431188141752586880, 1, 0, 0, 0, 1, 0, 17573171947292431650, 6692160042088053455, 9889382861130386235, 4014227156326565798, 2305040771202529034, 4569674865772026702, 980116766328138766, 891801733175697187, 10453514483181846641, 18097642912412713810, 3602725314699933855, 14586568436552896239, 17206474997006265051, 11998108441263059891, 2302137229552580420, 1, 0, 0, 0, 1, 0, 11214541640256768195, 1456276470065412101, 3012063381053750362, 17477853997594743235, 4667652151526467516, 14709859391037291514, 15576478276301900443, 5288871968538360514, 12559634219275278239, 16952069533520764759, 13774466749383009485, 7613061892596625462, 5580437753203777486, 5204010590575197441, 11845451884839552921, 1, 0, 0, 0, 1, 0, 10349408106071310053, 10035088333115331288, 14142664761481779532, 15706959181585180523, 15750389702075093135, 876174554396868075, 4889082965904642440, 14848674461360674975, 15407253393194772940, 14445929105909601636, 14321220139057541288, 17693711337466712468, 15051763954056533599, 12628586848138973198, 12278794746552983052, 1, 0, 0, 0, 1, 0, 951615792977801264, 1211405113549675186, 17985020091891048998, 15445358949429791952, 2099687338970431013, 14303982336399641814, 12393266145043202429, 14151277613136798520, 1998109451585880901, 9606769581569578625, 1379169538700861503, 7353230019346707888, 844824200045222171, 6720472488718189255, 14310782857892986700, 1, 0, 0, 0, 1, 0, 7643984727775434844, 0, 0, 14286495051698513565, 6791090761664616374, 12627603787832494922, 853764681371061454, 6760124904423015973, 1333400193073781990, 18063649775432527150, 14882639257257424707, 14567186806364265088, 5672989858483365109, 15061013104031335890, 9662888408142346895, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4315117985825319308, 17954920195441939375, 2358074803509054857, 12566827890799503780, 11226925817970638094, 1361027555808818653, 3204687512694590580, 4464924001417791506, 8265106158072298997, 14154439558213594386, 4676228375886937826, 16236416741726566504, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13180871958580017059, 6438200026603866080, 16405101789199201340, 12734261918077566887, 323561318445804460, 5346936254995238101, 523131765818647386, 4566463403740325912, 6616889263695345418, 15349070088087119300, 17477781110059685856, 1941798973941376537, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9324640818690322529, 1507262460208602102, 1581131786309040293, 13460201712649497096, 11770041052112546722, 8929045628408978585, 13905210272577125578, 1351933157961486422, 11403119304603636779, 17443416980221933050, 9362502897182671987, 5283201687609097620, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(88) }, program_info: ProgramInfo { program_hash: Word([6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 89, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_21.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_21.snap index 2c8f6441bb..dd57e330fb 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_21.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_21.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 9, 0, 1, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 8, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 8, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 8, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 8, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 8, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 8, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 8, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 7, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 7, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 7, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 7, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 7, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 7, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 7, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 7, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 6, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 6, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 6, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 6, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 6, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 6, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 5, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 5, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 5, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 5, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 5, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 5, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 4, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 4, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 4, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 4, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 3, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 3, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 3, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 3, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 2, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 0, 0, 1, 0, 0, 0, 1, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 0, 0, 1, 0, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3330424775026476592, 13633250484821623215, 16565837043221829196, 12610063329678779487, 1406583001570465792, 16768526919827857497, 4292185681439734302, 10299881888812700030, 5070319740822484234, 11830947885319956418, 15125640082304919550, 2368214261414429154, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7732229819737520946, 15098993065726469111, 52948362219275850, 9599099202048490781, 12562663752152469569, 17573593815267411876, 7698449017624504359, 13506878991346097494, 11549475095918428048, 7737209888784159602, 6110574402514906801, 15583218305860063073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12659763553976530720, 1564281538360678972, 8677964002070154388, 7298046952032101196, 16633851142346839330, 10818335527229137478, 4120049919115121735, 14759589214631061464, 9819109219817742568, 13533379427213586747, 4404297180800676786, 12342565443853005153, 1, 0, 0, 0, 1, 0, 6508846668869650000, 17336912220865242963, 2268843052628052976, 13820936547498519501, 7168328730833322865, 7428484016288157022, 16026473122383984320, 17021480690231868718, 11942460420815768259, 12642019494772420219, 7301829639095749904, 5677600078177657746, 12969897466948219293, 4728227612288081644, 7791191498940082574, 1, 0, 0, 0, 1, 0, 15837335187878938475, 5466507011147170445, 11650170051303322910, 5030538143349324000, 13591172423217881213, 7596566350181367049, 5410472981661512575, 12021280163646879782, 11378469682479349365, 840282323232377843, 2494235991830255255, 6870174020804907583, 18099434164004083138, 10405162090868595527, 6247074573395806345, 1, 0, 0, 0, 1, 0, 14897033870199487714, 13140683236260271155, 14159644452561526580, 5695604368834329320, 1007570544942142144, 5033691822950904881, 5904063656561684665, 944699227762067814, 12631760754265391769, 14684696359318715547, 5549456538037663492, 14117325213115724257, 8196759787025064775, 13512312828114051231, 12501576801121215107, 1, 0, 0, 0, 1, 0, 7883221524574062887, 13183696492710529508, 6213114786013009576, 8078757315035365696, 9498329046798837348, 6115393411247877634, 2891811661249932042, 14704623317114553828, 17873088011118479782, 12960248188949622509, 17727271824480331481, 16537587825367420675, 18177523421240333385, 11454603613487247488, 14277720092332100080, 1, 0, 0, 0, 1, 0, 3351410150454291730, 16279278462051668121, 10035562370865624816, 9729162786960114112, 5981274731275683258, 17197119244649549383, 16735389142514185239, 17342022136955130751, 11599468651034345541, 856522523927216338, 15210444525259934523, 1665145345483041546, 1860837626615492164, 15725343254588574135, 12090932747658876990, 1, 0, 0, 0, 1, 0, 15032980823283040232, 2668283458286770416, 12407409512729445019, 3179630577014811908, 15292824893734897630, 3136236054167912163, 13251084164183215555, 9877562264475108305, 764975448091728428, 12450766651322475975, 7423511914796799812, 9500338696261382317, 2703103454418315711, 13843504867107001118, 3675188622214856303, 1, 0, 0, 0, 1, 0, 6987334820542205177, 436417979830380839, 13177538606264077422, 14999066466406693845, 15059493462076997690, 11340220366618064719, 6580507474643651363, 8487705884637814572, 15179557481995246257, 11193936901615452288, 2890705529596562428, 14430869544081691912, 9827923975568229619, 3736249992832820982, 3180536826353817667, 1, 0, 0, 0, 1, 0, 7020168012590274751, 0, 0, 17453232571701437290, 5021883210577128063, 5496590912397587492, 6693558341526111425, 8847518126511086492, 11690776235517962509, 5392781400556584604, 4682383242810761218, 9343508596961576512, 16549791451828015234, 8795331189349109030, 15037300764129498232, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7539745443808178835, 9884045457320590091, 8382695108894398131, 5283201688561864115, 11767201095350394052, 11166959267981414839, 15703610354425254697, 12064640095342720771, 11936680880561889502, 15606093107492977367, 10434554919272483089, 12722152077589496357, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14554316550668318802, 5367026278670357791, 9643181922175718153, 5334752974852163097, 11260389542763349256, 12815587692045090980, 12391508132885235615, 16112425486122001154, 3422498555177881379, 40421079456104423, 15053297738150165437, 5754948178406885282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15063345752223211733, 8499294198486805672, 16042312733989464482, 451731299183430202, 4551861726624713720, 7859047597365690811, 8620148927055889210, 9666454503914171857, 17255066275290727039, 33594342817809819, 12279517140635782046, 9383881360936187956, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14568136944800275082, 5693535723676280393, 9230767544379437105, 1921340627054025915, 4826001026438697181, 9026977856739391370, 10597412231254617917, 8653818256660346722, 2401047653221911346, 3038244952392737403, 8386361303932939763, 13893715067188783613, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12559996978644727669, 9307941706856421244, 18310630857442586767, 11168366585808691894, 13927464871572189232, 4386750069800107475, 11056066896847582412, 821691781470963977, 4346621156346694740, 2166498267314208258, 13068211219747943554, 3737686312150097138, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16006034000059690936, 17583976365434994224, 6798288544665969845, 16344827155364741241, 8487031467837880959, 10598485069506239844, 926831815845570768, 17943701130779573558, 15690230013100567693, 16766052460675760559, 10741543262911175860, 6408571846489205195, 1, 0, 0, 0, 1, 0, 9144131815937747872, 3342878222920529613, 4791714562823606942, 15808130082429351686, 11956256213068276591, 12649659004750065655, 13917605778022436041, 7953084218463226909, 13751116549494668150, 15146036891941496142, 3491480252041350267, 12052213250462948496, 17479836829311383480, 16819603317278983686, 5309320507954343198, 1, 0, 0, 0, 1, 0, 1038103851795962350, 4430605040022927656, 16365904851233496502, 894576452673648096, 1340502547894095473, 12601220862983867223, 16222497246401579549, 16644535012971742472, 6869486424216496389, 13266683287137316598, 12162679553338055516, 3160744395414731040, 16470951341042419630, 17717239843479976187, 6474302970739201787, 1, 0, 0, 0, 1, 0, 16229564526704673406, 10174200792466558210, 5132793225392427293, 9980680059887464609, 12726130892030271688, 312583470408719867, 758472841121971562, 14563339716269964045, 18010894049048312095, 16931617059033676533, 15435832236802784694, 10720145895975203640, 8361105415211156204, 2779769903465702190, 12429535237881910980, 1, 0, 0, 0, 1, 0, 6215541400981523569, 1953204460931882521, 12589335010609790225, 15843714178786416863, 3287199712077657921, 1991947075903969606, 3767440642589974121, 3375764636979625919, 17649433461619154043, 15150382077316258576, 10610490743746459257, 12381787083236736442, 16788006368298087947, 11287199716539837261, 15563175998310034114, 1, 0, 0, 0, 1, 0, 14427469169104333761, 6340093208524402435, 12262828500061219108, 3395211782606276051, 14508720026418909433, 11172295513373146926, 3431797671267201506, 11592395684445633353, 855825648432312573, 3749972803617457769, 10969265948996096203, 16441368248785967826, 6962236012055562966, 17793881754348373966, 4507428390885076546, 1, 0, 0, 0, 1, 0, 14592383679640689303, 1910163776289539337, 13338365197478444082, 3112263678112869121, 9793349915183632648, 166719433298183890, 5274326486456948617, 15838446667082529291, 3952939840611939921, 17343623425168465586, 5018759638511748755, 8935168685033341816, 5951881526364525804, 5205786761888799519, 12658208632913334575, 1, 0, 0, 0, 1, 0, 16738660098177737227, 9829750214121427853, 12484115052089468332, 15237271270752782119, 16244276080775719304, 18103925836791549846, 15867602839234938544, 12094773271668234643, 11384225568855102440, 5020084506774034519, 3608565717871609608, 5752598619104470273, 6560905318933416747, 3768506969286097604, 6038828855361889649, 1, 0, 0, 0, 1, 0, 75223512047035789, 0, 0, 6870828195219142669, 2520783628599955940, 7353009946795117330, 17045986882743664444, 14360904859585829753, 2924959973998026295, 2455930810486398184, 7973159619665332708, 12628972628903398239, 5462523753418276656, 9367766578866915876, 15990457456638139626, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12714099020863010695, 12314456283572504356, 469635739213563567, 4147903628926627533, 13470963638813042195, 429476535988054822, 10543436976244887593, 14670346996245963865, 3139557918845001204, 5461299377107545721, 4805225664863956509, 8292027417405396428, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5224376302272959154, 6535409800777915487, 7901122908367659010, 4079954944710007123, 13830904396796715875, 17383573277674600677, 13682516968888804929, 6184594554218323809, 1597138777695243925, 10515379984412735135, 7450238737884914862, 12456535987381445341, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14781572642473112572, 11268362592956912536, 5766087612434108876, 10588667258124334541, 9960013932953480218, 1883220378389933149, 11574410555278975115, 17786267665435354569, 15852581941664405912, 1357729935919477555, 7510284002737324288, 4686309106959500238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2990417547231451768, 11606517949721719272, 17598947928349150032, 14580412695609233024, 13599348264422318050, 69556848653847272, 3813457227114323323, 2886498774908945457, 7439600795053578285, 17809381881860746878, 4014163844046372573, 3176173060019065635, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8200055882763834902, 8595871163399933719, 4957589343064393818, 12971821499548943886, 9048627971498202333, 2279577280749402753, 6994299592571856765, 15711135636713186135, 17764699242312753117, 14185813834021479236, 1979187468149850032, 18309940476973301558, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15107023413552199376, 7763683116636157069, 6242447045300438422, 12942151567717980516, 4616644171576346372, 6239043535079259963, 5702578803007136341, 17215236981565434804, 72379023848321437, 2902380466328372776, 7068929233685234045, 6936565830330512698, 1, 0, 0, 0, 1, 0, 528576776446583989, 10409606060068835052, 5784423647953917837, 8385687432658166895, 838997349906846708, 4795761656943466364, 293990104348951469, 13446530094027973481, 7823300322844699129, 15311994542782308321, 908232164244690453, 3840146011074602084, 10999219428618119040, 6627279045165985143, 6894736762296179522, 1, 0, 0, 0, 1, 0, 12380241214066733373, 6763481784501978893, 3664971892418121107, 11139320331324068031, 8111388737755370581, 11627377236417283134, 11966816476348176754, 3589365582169471582, 12959563699934572877, 16837525512190061999, 12254673123217560222, 771969030954554421, 12696786409220765700, 1740402123045436483, 6840278566006653320, 1, 0, 0, 0, 1, 0, 8758598539355441563, 14327797909354101607, 3238487269456306309, 1252671640222326947, 3118134149246226434, 15205984627333468001, 11534859557249128228, 264848703107953315, 5613634717561556402, 1237772870699038471, 18319684398448937806, 777766613761440792, 16717684302941853782, 65503834883425781, 3431188141752586880, 1, 0, 0, 0, 1, 0, 17573171947292431650, 6692160042088053455, 9889382861130386235, 4014227156326565798, 2305040771202529034, 4569674865772026702, 980116766328138766, 891801733175697187, 10453514483181846641, 18097642912412713810, 3602725314699933855, 14586568436552896239, 17206474997006265051, 11998108441263059891, 2302137229552580420, 1, 0, 0, 0, 1, 0, 11214541640256768195, 1456276470065412101, 3012063381053750362, 17477853997594743235, 4667652151526467516, 14709859391037291514, 15576478276301900443, 5288871968538360514, 12559634219275278239, 16952069533520764759, 13774466749383009485, 7613061892596625462, 5580437753203777486, 5204010590575197441, 11845451884839552921, 1, 0, 0, 0, 1, 0, 10349408106071310053, 10035088333115331288, 14142664761481779532, 15706959181585180523, 15750389702075093135, 876174554396868075, 4889082965904642440, 14848674461360674975, 15407253393194772940, 14445929105909601636, 14321220139057541288, 17693711337466712468, 15051763954056533599, 12628586848138973198, 12278794746552983052, 1, 0, 0, 0, 1, 0, 951615792977801264, 1211405113549675186, 17985020091891048998, 15445358949429791952, 2099687338970431013, 14303982336399641814, 12393266145043202429, 14151277613136798520, 1998109451585880901, 9606769581569578625, 1379169538700861503, 7353230019346707888, 844824200045222171, 6720472488718189255, 14310782857892986700, 1, 0, 0, 0, 1, 0, 7643984727775434844, 0, 0, 14286495051698513565, 6791090761664616374, 12627603787832494922, 853764681371061454, 6760124904423015973, 1333400193073781990, 18063649775432527150, 14882639257257424707, 14567186806364265088, 5672989858483365109, 15061013104031335890, 9662888408142346895, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4315117985825319308, 17954920195441939375, 2358074803509054857, 12566827890799503780, 11226925817970638094, 1361027555808818653, 3204687512694590580, 4464924001417791506, 8265106158072298997, 14154439558213594386, 4676228375886937826, 16236416741726566504, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13180871958580017059, 6438200026603866080, 16405101789199201340, 12734261918077566887, 323561318445804460, 5346936254995238101, 523131765818647386, 4566463403740325912, 6616889263695345418, 15349070088087119300, 17477781110059685856, 1941798973941376537, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9324640818690322529, 1507262460208602102, 1581131786309040293, 13460201712649497096, 11770041052112546722, 8929045628408978585, 13905210272577125578, 1351933157961486422, 11403119304603636779, 17443416980221933050, 9362502897182671987, 5283201687609097620, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(88) }, program_info: ProgramInfo { program_hash: Word([6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 89, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 9, 0, 1, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 8, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 8, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 8, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 8, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 8, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 8, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 8, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 8, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 7, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 7, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 7, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 7, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 7, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 7, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 7, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 7, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 6, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 6, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 6, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 6, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 6, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 6, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 6, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 6, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 5, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 5, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 5, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 5, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 5, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 5, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 5, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 4, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 4, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 4, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 4, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 4, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 4, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 3, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 3, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 3, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 3, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 2, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 8, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4539061041759240, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 1, 6, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 8, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 35461414388744, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 277042299912, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2164392968, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 16909320, 1, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 132104, 1, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 1032, 1, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 7, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 0, 0, 1, 0, 0, 1, 1, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 1, 1, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 0, 0, 0, 0, 0, 1, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 0, 0, 1, 0, 0, 1, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8488924048752676071, 7132218559010351790, 18152833202936203138, 302695496926486902, 13622702382434675698, 6093021124582015914, 9617260353707541367, 12529483521877137515, 7876112718273244024, 14482187202392982684, 3800418813655617572, 13092032916490151270, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5473488137200086909, 2687466917280430353, 10305147718805144715, 16415403596737407938, 8941567408770445183, 375332441348258328, 9187825164453421957, 4671467226762388980, 1276143811675585923, 17682350329754313417, 14503408479575576010, 2856458557507854671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16124688533662466636, 14170238607512888511, 13246631902503555591, 12969246825596557956, 2168342371250989865, 16597900739273350797, 17649953659489375797, 13873740979092621907, 9993912342918529935, 66214439016909251, 10553169970007645345, 14059661153766146178, 1, 0, 0, 0, 1, 0, 15754956633454945151, 6055713190940499638, 11077250730155763388, 4527044298581192722, 5453168895411602323, 18142351346900318359, 15965643470182086386, 17553704974699598306, 16788616498952461620, 6396310504287885774, 12847173262736205772, 16999254614849428545, 7504629639084879386, 4946745422622378051, 1724041303048776424, 1, 0, 0, 0, 1, 0, 5043375237696906583, 4379507338442738151, 10191347065326962634, 15470787238396171217, 7649138216344653830, 3098698980745497723, 7317402970608805914, 10652219805906948351, 17377183878976452334, 17213560015461715510, 7630996533587302384, 8208119826419095432, 10242982970375452289, 16630221959750548176, 8338994289155538949, 1, 0, 0, 0, 1, 0, 27564165777955823, 2554423200420703486, 17579160449292996896, 11147561538212402733, 7271583017513514692, 11194864417357882388, 5717939852331496040, 1428764500637505382, 421533440407219618, 2958950328581697287, 5856098383496092000, 12651683228606533001, 9239012175869487665, 9831397389014117600, 15262849800927670044, 1, 0, 0, 0, 1, 0, 12554774560852918121, 7558057668449617622, 8341229243444900158, 11546140485006286209, 5702916883024911354, 10059737158050223658, 15942512744234440774, 2751093334206085539, 13224617406323308041, 12078599565132475515, 13785560116650003734, 18102951610480561318, 17448534469581521177, 17663607747965229138, 12928938600331453669, 1, 0, 0, 0, 1, 0, 6754601476785640702, 7736060991620510625, 1449884785010881379, 6135983205453599776, 9277341930384005575, 17852936504841763737, 15508051727969296111, 11875658036026604145, 14497665384991648640, 5591521890390007231, 7840142081125036731, 10575290756167155008, 6963375374275021656, 16616426694032134438, 6747622983845354522, 1, 0, 0, 0, 1, 0, 7929723072429044254, 16334448815751507577, 4434638168235316685, 17199894398730562705, 13653108884642243926, 18423338781077887809, 810875278274469351, 5684565403642367050, 13312171511942754529, 17728945623551220217, 2133036585496843963, 12373753045781314057, 4604616361036784646, 12451218545182255865, 4275250202523893223, 1, 0, 0, 0, 1, 0, 8602814005182217200, 9971451726661298505, 15671763834046105438, 7369439734883755459, 15167316901472929028, 9594540064387516595, 598273005722510655, 5216498913603536417, 5334026694118161468, 10671987699715228843, 5837806564591410604, 10199402949196411787, 17782855612978839775, 5745169166190656073, 2490003355474156145, 1, 0, 0, 0, 1, 0, 1420030357616461150, 0, 0, 14515762120928230173, 8611475648437961511, 7809934763889573038, 12653867244112536729, 5258230180909223265, 1299716947845207044, 11653871972148380806, 8985195681813998404, 15945306792731206141, 12753204151452870283, 7870235520772452232, 10334063888823214988, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13610167819530098127, 10900065459953722709, 18341122838405415754, 3153753366153954420, 1124366766375746940, 14709808073905360012, 8531928004921347162, 12041110943945791333, 5505106000120813030, 12896535568794110034, 5432056100901092307, 18314119367638727156, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11215445033353754262, 9162692523043045302, 11967784234256998242, 12197142511433562971, 9116801986360376826, 11742139955633481423, 98858158429688394, 11648250496545232642, 14774803975376978777, 7402084190222773115, 8994645443800925562, 15311716904301189063, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8081237365032914784, 17462008412377898139, 10761804868734649587, 13557680898519201450, 6650575029061305823, 13522070698443062110, 6167334615107562354, 7830634726555216225, 14575654492591748955, 598469278842686486, 5908996313982662075, 894706229073498557, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 4025036448660092914, 12847434483856017691, 1234843923022284190, 5266777994490151623, 8207377881872409730, 5912604878679295331, 1494658977663487041, 1570146104298050273, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4539061041759240, 0, 0, 0, 0, 0, 0, 0, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3330424775026476592, 13633250484821623215, 16565837043221829196, 12610063329678779487, 1406583001570465792, 16768526919827857497, 4292185681439734302, 10299881888812700030, 5070319740822484234, 11830947885319956418, 15125640082304919550, 2368214261414429154, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7732229819737520946, 15098993065726469111, 52948362219275850, 9599099202048490781, 12562663752152469569, 17573593815267411876, 7698449017624504359, 13506878991346097494, 11549475095918428048, 7737209888784159602, 6110574402514906801, 15583218305860063073, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12659763553976530720, 1564281538360678972, 8677964002070154388, 7298046952032101196, 16633851142346839330, 10818335527229137478, 4120049919115121735, 14759589214631061464, 9819109219817742568, 13533379427213586747, 4404297180800676786, 12342565443853005153, 1, 0, 0, 0, 1, 0, 6508846668869650000, 17336912220865242963, 2268843052628052976, 13820936547498519501, 7168328730833322865, 7428484016288157022, 16026473122383984320, 17021480690231868718, 11942460420815768259, 12642019494772420219, 7301829639095749904, 5677600078177657746, 12969897466948219293, 4728227612288081644, 7791191498940082574, 1, 0, 0, 0, 1, 0, 15837335187878938475, 5466507011147170445, 11650170051303322910, 5030538143349324000, 13591172423217881213, 7596566350181367049, 5410472981661512575, 12021280163646879782, 11378469682479349365, 840282323232377843, 2494235991830255255, 6870174020804907583, 18099434164004083138, 10405162090868595527, 6247074573395806345, 1, 0, 0, 0, 1, 0, 14897033870199487714, 13140683236260271155, 14159644452561526580, 5695604368834329320, 1007570544942142144, 5033691822950904881, 5904063656561684665, 944699227762067814, 12631760754265391769, 14684696359318715547, 5549456538037663492, 14117325213115724257, 8196759787025064775, 13512312828114051231, 12501576801121215107, 1, 0, 0, 0, 1, 0, 7883221524574062887, 13183696492710529508, 6213114786013009576, 8078757315035365696, 9498329046798837348, 6115393411247877634, 2891811661249932042, 14704623317114553828, 17873088011118479782, 12960248188949622509, 17727271824480331481, 16537587825367420675, 18177523421240333385, 11454603613487247488, 14277720092332100080, 1, 0, 0, 0, 1, 0, 3351410150454291730, 16279278462051668121, 10035562370865624816, 9729162786960114112, 5981274731275683258, 17197119244649549383, 16735389142514185239, 17342022136955130751, 11599468651034345541, 856522523927216338, 15210444525259934523, 1665145345483041546, 1860837626615492164, 15725343254588574135, 12090932747658876990, 1, 0, 0, 0, 1, 0, 15032980823283040232, 2668283458286770416, 12407409512729445019, 3179630577014811908, 15292824893734897630, 3136236054167912163, 13251084164183215555, 9877562264475108305, 764975448091728428, 12450766651322475975, 7423511914796799812, 9500338696261382317, 2703103454418315711, 13843504867107001118, 3675188622214856303, 1, 0, 0, 0, 1, 0, 6987334820542205177, 436417979830380839, 13177538606264077422, 14999066466406693845, 15059493462076997690, 11340220366618064719, 6580507474643651363, 8487705884637814572, 15179557481995246257, 11193936901615452288, 2890705529596562428, 14430869544081691912, 9827923975568229619, 3736249992832820982, 3180536826353817667, 1, 0, 0, 0, 1, 0, 7020168012590274751, 0, 0, 17453232571701437290, 5021883210577128063, 5496590912397587492, 6693558341526111425, 8847518126511086492, 11690776235517962509, 5392781400556584604, 4682383242810761218, 9343508596961576512, 16549791451828015234, 8795331189349109030, 15037300764129498232, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7539745443808178835, 9884045457320590091, 8382695108894398131, 5283201688561864115, 11767201095350394052, 11166959267981414839, 15703610354425254697, 12064640095342720771, 11936680880561889502, 15606093107492977367, 10434554919272483089, 12722152077589496357, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14554316550668318802, 5367026278670357791, 9643181922175718153, 5334752974852163097, 11260389542763349256, 12815587692045090980, 12391508132885235615, 16112425486122001154, 3422498555177881379, 40421079456104423, 15053297738150165437, 5754948178406885282, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15063345752223211733, 8499294198486805672, 16042312733989464482, 451731299183430202, 4551861726624713720, 7859047597365690811, 8620148927055889210, 9666454503914171857, 17255066275290727039, 33594342817809819, 12279517140635782046, 9383881360936187956, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 1413881954865567393, 8496939594631729748, 18000133586140028187, 10680190414005925338, 2339032462720454103, 16993857945986913175, 8264942609101286638, 10120172904062862410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 580999813345182728, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14568136944800275082, 5693535723676280393, 9230767544379437105, 1921340627054025915, 4826001026438697181, 9026977856739391370, 10597412231254617917, 8653818256660346722, 2401047653221911346, 3038244952392737403, 8386361303932939763, 13893715067188783613, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12559996978644727669, 9307941706856421244, 18310630857442586767, 11168366585808691894, 13927464871572189232, 4386750069800107475, 11056066896847582412, 821691781470963977, 4346621156346694740, 2166498267314208258, 13068211219747943554, 3737686312150097138, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16006034000059690936, 17583976365434994224, 6798288544665969845, 16344827155364741241, 8487031467837880959, 10598485069506239844, 926831815845570768, 17943701130779573558, 15690230013100567693, 16766052460675760559, 10741543262911175860, 6408571846489205195, 1, 0, 0, 0, 1, 0, 9144131815937747872, 3342878222920529613, 4791714562823606942, 15808130082429351686, 11956256213068276591, 12649659004750065655, 13917605778022436041, 7953084218463226909, 13751116549494668150, 15146036891941496142, 3491480252041350267, 12052213250462948496, 17479836829311383480, 16819603317278983686, 5309320507954343198, 1, 0, 0, 0, 1, 0, 1038103851795962350, 4430605040022927656, 16365904851233496502, 894576452673648096, 1340502547894095473, 12601220862983867223, 16222497246401579549, 16644535012971742472, 6869486424216496389, 13266683287137316598, 12162679553338055516, 3160744395414731040, 16470951341042419630, 17717239843479976187, 6474302970739201787, 1, 0, 0, 0, 1, 0, 16229564526704673406, 10174200792466558210, 5132793225392427293, 9980680059887464609, 12726130892030271688, 312583470408719867, 758472841121971562, 14563339716269964045, 18010894049048312095, 16931617059033676533, 15435832236802784694, 10720145895975203640, 8361105415211156204, 2779769903465702190, 12429535237881910980, 1, 0, 0, 0, 1, 0, 6215541400981523569, 1953204460931882521, 12589335010609790225, 15843714178786416863, 3287199712077657921, 1991947075903969606, 3767440642589974121, 3375764636979625919, 17649433461619154043, 15150382077316258576, 10610490743746459257, 12381787083236736442, 16788006368298087947, 11287199716539837261, 15563175998310034114, 1, 0, 0, 0, 1, 0, 14427469169104333761, 6340093208524402435, 12262828500061219108, 3395211782606276051, 14508720026418909433, 11172295513373146926, 3431797671267201506, 11592395684445633353, 855825648432312573, 3749972803617457769, 10969265948996096203, 16441368248785967826, 6962236012055562966, 17793881754348373966, 4507428390885076546, 1, 0, 0, 0, 1, 0, 14592383679640689303, 1910163776289539337, 13338365197478444082, 3112263678112869121, 9793349915183632648, 166719433298183890, 5274326486456948617, 15838446667082529291, 3952939840611939921, 17343623425168465586, 5018759638511748755, 8935168685033341816, 5951881526364525804, 5205786761888799519, 12658208632913334575, 1, 0, 0, 0, 1, 0, 16738660098177737227, 9829750214121427853, 12484115052089468332, 15237271270752782119, 16244276080775719304, 18103925836791549846, 15867602839234938544, 12094773271668234643, 11384225568855102440, 5020084506774034519, 3608565717871609608, 5752598619104470273, 6560905318933416747, 3768506969286097604, 6038828855361889649, 1, 0, 0, 0, 1, 0, 75223512047035789, 0, 0, 6870828195219142669, 2520783628599955940, 7353009946795117330, 17045986882743664444, 14360904859585829753, 2924959973998026295, 2455930810486398184, 7973159619665332708, 12628972628903398239, 5462523753418276656, 9367766578866915876, 15990457456638139626, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12714099020863010695, 12314456283572504356, 469635739213563567, 4147903628926627533, 13470963638813042195, 429476535988054822, 10543436976244887593, 14670346996245963865, 3139557918845001204, 5461299377107545721, 4805225664863956509, 8292027417405396428, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5224376302272959154, 6535409800777915487, 7901122908367659010, 4079954944710007123, 13830904396796715875, 17383573277674600677, 13682516968888804929, 6184594554218323809, 1597138777695243925, 10515379984412735135, 7450238737884914862, 12456535987381445341, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14781572642473112572, 11268362592956912536, 5766087612434108876, 10588667258124334541, 9960013932953480218, 1883220378389933149, 11574410555278975115, 17786267665435354569, 15852581941664405912, 1357729935919477555, 7510284002737324288, 4686309106959500238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14537741408767373410, 15771729313541940903, 16254963956836991015, 2046774012797929459, 9448749568492005186, 8503069890613114305, 9471994857288690980, 16948092911786303144, 12566536223313831832, 4049192570105751375, 9029012768772075486, 9680729728072440816, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16336503519826769294, 9197671798777409481, 13035020452047724944, 17733790707118953345, 11006573531383828351, 10983413158656624898, 4869282124135316831, 5899798166361732461, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2990417547231451768, 11606517949721719272, 17598947928349150032, 14580412695609233024, 13599348264422318050, 69556848653847272, 3813457227114323323, 2886498774908945457, 7439600795053578285, 17809381881860746878, 4014163844046372573, 3176173060019065635, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8200055882763834902, 8595871163399933719, 4957589343064393818, 12971821499548943886, 9048627971498202333, 2279577280749402753, 6994299592571856765, 15711135636713186135, 17764699242312753117, 14185813834021479236, 1979187468149850032, 18309940476973301558, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15107023413552199376, 7763683116636157069, 6242447045300438422, 12942151567717980516, 4616644171576346372, 6239043535079259963, 5702578803007136341, 17215236981565434804, 72379023848321437, 2902380466328372776, 7068929233685234045, 6936565830330512698, 1, 0, 0, 0, 1, 0, 528576776446583989, 10409606060068835052, 5784423647953917837, 8385687432658166895, 838997349906846708, 4795761656943466364, 293990104348951469, 13446530094027973481, 7823300322844699129, 15311994542782308321, 908232164244690453, 3840146011074602084, 10999219428618119040, 6627279045165985143, 6894736762296179522, 1, 0, 0, 0, 1, 0, 12380241214066733373, 6763481784501978893, 3664971892418121107, 11139320331324068031, 8111388737755370581, 11627377236417283134, 11966816476348176754, 3589365582169471582, 12959563699934572877, 16837525512190061999, 12254673123217560222, 771969030954554421, 12696786409220765700, 1740402123045436483, 6840278566006653320, 1, 0, 0, 0, 1, 0, 8758598539355441563, 14327797909354101607, 3238487269456306309, 1252671640222326947, 3118134149246226434, 15205984627333468001, 11534859557249128228, 264848703107953315, 5613634717561556402, 1237772870699038471, 18319684398448937806, 777766613761440792, 16717684302941853782, 65503834883425781, 3431188141752586880, 1, 0, 0, 0, 1, 0, 17573171947292431650, 6692160042088053455, 9889382861130386235, 4014227156326565798, 2305040771202529034, 4569674865772026702, 980116766328138766, 891801733175697187, 10453514483181846641, 18097642912412713810, 3602725314699933855, 14586568436552896239, 17206474997006265051, 11998108441263059891, 2302137229552580420, 1, 0, 0, 0, 1, 0, 11214541640256768195, 1456276470065412101, 3012063381053750362, 17477853997594743235, 4667652151526467516, 14709859391037291514, 15576478276301900443, 5288871968538360514, 12559634219275278239, 16952069533520764759, 13774466749383009485, 7613061892596625462, 5580437753203777486, 5204010590575197441, 11845451884839552921, 1, 0, 0, 0, 1, 0, 10349408106071310053, 10035088333115331288, 14142664761481779532, 15706959181585180523, 15750389702075093135, 876174554396868075, 4889082965904642440, 14848674461360674975, 15407253393194772940, 14445929105909601636, 14321220139057541288, 17693711337466712468, 15051763954056533599, 12628586848138973198, 12278794746552983052, 1, 0, 0, 0, 1, 0, 951615792977801264, 1211405113549675186, 17985020091891048998, 15445358949429791952, 2099687338970431013, 14303982336399641814, 12393266145043202429, 14151277613136798520, 1998109451585880901, 9606769581569578625, 1379169538700861503, 7353230019346707888, 844824200045222171, 6720472488718189255, 14310782857892986700, 1, 0, 0, 0, 1, 0, 7643984727775434844, 0, 0, 14286495051698513565, 6791090761664616374, 12627603787832494922, 853764681371061454, 6760124904423015973, 1333400193073781990, 18063649775432527150, 14882639257257424707, 14567186806364265088, 5672989858483365109, 15061013104031335890, 9662888408142346895, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4315117985825319308, 17954920195441939375, 2358074803509054857, 12566827890799503780, 11226925817970638094, 1361027555808818653, 3204687512694590580, 4464924001417791506, 8265106158072298997, 14154439558213594386, 4676228375886937826, 16236416741726566504, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13180871958580017059, 6438200026603866080, 16405101789199201340, 12734261918077566887, 323561318445804460, 5346936254995238101, 523131765818647386, 4566463403740325912, 6616889263695345418, 15349070088087119300, 17477781110059685856, 1941798973941376537, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9324640818690322529, 1507262460208602102, 1581131786309040293, 13460201712649497096, 11770041052112546722, 8929045628408978585, 13905210272577125578, 1351933157961486422, 11403119304603636779, 17443416980221933050, 9362502897182671987, 5283201687609097620, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096, 8087083728976074902, 14294118012339765875, 1524835811237900732, 6763063898149860947, 2145158521494695437, 10234632751699861532, 11254953448960768625, 677503724821015517, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(88) }, program_info: ProgramInfo { program_hash: Word([6965138066206642862, 12596233587871940770, 8197358252954291811, 10673667133036073096]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 89, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_22.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_22.snap index 79b5a3bbd5..0f9c32d88a 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_22.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_22.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 0, 0, 1, 0, 0, 0, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13342492399873323769, 4511615971967153504, 9085863547783897978, 13728083094831419091, 4968648927826019469, 12828040835569540857, 14858685484860085108, 11332670461359993442, 6031863247325663438, 10194964851803169917, 3020492374890726247, 14015299246960655077, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1439796670523758837, 11189511375577512439, 4029278259426396811, 5555139373262852832, 17195207199910519646, 15946070950510533025, 16638144790071955925, 14431967032738938661, 674016650738724202, 2476887483552371976, 15867024276402164724, 18240053740881435667, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2591609871503882494, 14523290705070057408, 16053154709446024998, 2905384006316447019, 6734621562241387182, 6868712626693654693, 14803289513390493682, 10393518078208184991, 9655491867310024790, 9610004573075108621, 2691485309401819348, 9264051620447261114, 1, 0, 0, 0, 1, 0, 16310674867943291767, 6055575173485499620, 12415403453461233454, 5919456033500076693, 11602649596278030541, 15730095788089532534, 12155959663009124293, 9715952180361858627, 16719465941571322506, 7947368985060100292, 2462224494429193628, 4753798685424869288, 4964236593939309395, 10383311521670833729, 3770835013589498382, 1, 0, 0, 0, 1, 0, 18087077157995694324, 16330777485816030986, 10063042555031126160, 5687909194194711965, 7973996941547777109, 7908104163460391198, 5239197399579256268, 15224252119305799711, 8574904634803746916, 2182109332887118586, 13071332837477200404, 1540176383869885892, 7961669463441676499, 6863497050423701439, 9055361938666247589, 1, 0, 0, 0, 1, 0, 16967670111924614213, 17486841943826861107, 18307481886056309438, 7941686916236651549, 3672880019205947738, 2236539493336923746, 5670979983981263850, 8194394828646838882, 15431555872184246136, 1087022739668739893, 7204946769828595498, 7978597004657283049, 15117861700401653408, 11135759119963236724, 14147095007921770778, 1, 0, 0, 0, 1, 0, 15248998622285712496, 1816831098907864072, 1977941839824239836, 10471520652203868473, 12969815742735761919, 12829755263022627333, 7984319522957739004, 12444330148186854115, 1895854814022398925, 7979854057356878352, 12651590612371699683, 10693788391520380705, 2168204218347522931, 10792639723427933554, 2008826339817234435, 1, 0, 0, 0, 1, 0, 1949341260302477275, 10525442150725175322, 10268663784703415650, 4586059525590481046, 10757916804785969985, 2326984138263422166, 5769086287272836702, 8680261223649739505, 9584551737159741567, 14209807647112141969, 10782010546727900871, 12476380710530844150, 264326996749206681, 9175748808845810742, 5723824967382588797, 1, 0, 0, 0, 1, 0, 13440535156983805468, 12080935995323460100, 9067005830434678477, 14314758709191331837, 1326425913004665964, 18320766430359725566, 13803823311240773956, 3919235389861209780, 4987801895818641338, 9475211165936098151, 6745878472543166577, 13055692992345669402, 16600930886850462534, 4020408003683484830, 2099106023167119258, 1, 0, 0, 0, 1, 0, 5892436324803940896, 7017064751240904271, 10317850206740106337, 16403500445172050158, 8998725782446855275, 15603212774947060210, 14994098977964244257, 12657319342943489784, 12145542090324719848, 17338503932931685384, 9012900451066906030, 7985393687855976209, 10163945784944658272, 14681340973312169871, 5885105447661412229, 1, 0, 0, 0, 1, 0, 13935905759807022949, 0, 0, 6981555831806437627, 3320646806195653797, 2577750295211676178, 15041604777168753281, 15743276195226846510, 18068871666013902057, 280994234174845985, 15850020848376370982, 17844212763579117389, 18181508983255172512, 418056849863168392, 13912537796384226859, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13711912288503888270, 502156843765695809, 360850050916534143, 10958079103202840999, 2778123425092199841, 13664544216029702565, 10293012497513243194, 2953143545478827927, 2456530167870834703, 10292737970295456228, 2666974936005298869, 2936046437280927758, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7425430573821419685, 13147348360138928114, 7183698983616787617, 17793074612839242130, 2613774562373586415, 1391392205806749871, 12632074680840502609, 9172592184988170325, 7343890316269580191, 632012914013142222, 14966813495153624489, 7163672760378086559, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16752277069679715408, 11903841834984596874, 9070535322622906244, 3601655880141993647, 1448060333031158668, 3418909895274525076, 12384471116364520725, 3259030218090439002, 6483315548845037473, 9098012027422757538, 13584072213050301608, 12965649133168865250, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4383606322674378669, 13264028927506398677, 4766776471757604196, 14660905060901389201, 12446750015896088802, 12927954860087459534, 14751589151467562513, 18208410790236506017, 8060897427763484267, 10391043349415287037, 7848268271641614303, 13621084556403650323, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11282929110176162954, 5896249534368220847, 12230245468863423579, 17357985657180629743, 10353774239160274935, 3759003303159369746, 3091073535594807983, 3398985649909830369, 15694315280551902473, 17044036436784806527, 1670964981039714496, 17078772340992927473, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17215248529293365853, 11382862066285680273, 18104224094677170296, 10490790376815116141, 11424271721157330669, 1148549753827007441, 17274728363719186424, 11870335859895317550, 15462035367190511759, 13171139175044072684, 12506995107569119516, 862170971660204027, 1, 0, 0, 0, 1, 0, 18208784611061899534, 11090107870009134382, 15816468029966600756, 13193227772306657556, 5436084715181539253, 15873409126341319274, 8856174280738574418, 15057005486179715954, 7129001791528740265, 6785780051417756764, 1782594595734670280, 16783127636073026773, 2094744771380247596, 16020980424362300069, 5676881743340217488, 1, 0, 0, 0, 1, 0, 3995660239591967986, 13991065272063476564, 4842320139602494012, 5492874275384737590, 9049442861863566881, 9007898958502691821, 9423711593310475409, 6387235594535598756, 7039074043166063940, 11491856728648046938, 5559192297727634984, 586150029444692874, 9272483157421678641, 11430895388638705560, 6521284656283570782, 1, 0, 0, 0, 1, 0, 10265417819422388610, 3230613796530740211, 8204482557338271208, 5965860733558915216, 3732227441816681926, 4972858056675247397, 15435624740876731287, 610949617653761740, 16413792935045431209, 11964718430105317483, 8697421447132597636, 7685703760533694936, 9520544349855559315, 16369319727902045750, 10481218501610762636, 1, 0, 0, 0, 1, 0, 4200148723083586126, 8898019494692638676, 9361391436000884061, 6906630570311142812, 10416842793286403595, 15154449156086880838, 17187582840477322187, 1667764180674112574, 11868526707386259660, 7310308994414837120, 37096681180297292, 1254987403839644538, 7281147841738764349, 16804807948024450931, 14191613402325013881, 1, 0, 0, 0, 1, 0, 6921512846940257894, 8083147322870350598, 7402338099048749868, 11028121748345672612, 9182929970775715030, 642245012387336876, 9940061963065628902, 677543792580138430, 5887036391937389613, 4972018469228063343, 9603988472267868801, 6207690803740787708, 1390751769269680465, 14779846517676698965, 4400313738036540825, 1, 0, 0, 0, 1, 0, 15720913686265040726, 11620345195770806393, 392865519522630483, 10866688391213961683, 4078956937078417294, 8169860993617536308, 13903556343063122489, 7226453148331774623, 12303475117195379639, 12980119595156137175, 2954837086209820968, 686805010274260483, 12922697597526240324, 2239891938742671995, 9798699259742823392, 1, 0, 0, 0, 1, 0, 1576291082626878936, 6836143998208741199, 5718769156293156294, 501346961392724628, 12301747922262729865, 7909458165142256993, 17643816943101201258, 739842910379542056, 14479451218433079532, 6627357084936364627, 6596157637386353039, 8706567413279745902, 4975249353684987436, 9576130314342554279, 8323169935435436763, 1, 0, 0, 0, 1, 0, 13015036049004182291, 0, 0, 3820689183586493894, 8535816953133153286, 12781603895645888322, 4895491920411997249, 6893839572721182305, 17259376159632543425, 7788172704304532836, 17444739644589522901, 15979424445015031332, 6966167031354634355, 5956660324772534609, 14233099751914870044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2862138511955678409, 2554244438665697829, 9129723360543316479, 16513197729164811328, 10619536471246139015, 11289943669462175698, 7818804555865981505, 4673396992430997118, 18261872069356847559, 8010670397007670803, 14891365206755013222, 17356025534910089368, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7758258992155315690, 6695383891040002341, 2424787611628537668, 4815287357290896051, 4063396021928247911, 10804772324353478999, 11573391963135759227, 5652365973964779246, 7568935938034555881, 871847630272290682, 833106187556617464, 2031310896521954322, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17115115516972321026, 9265251570417433175, 16343713044075599831, 3003012580421078075, 1116280449848444285, 17288383771256214060, 18390005084876364234, 14148401294484512817, 3939988349760901151, 18441078654886601219, 14690990432528119604, 16067965450256037769, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 1, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 2197, 4384, 6571, 8758, 10945, 13132, 15319, 17506, 19693, 21880, 24067, 26254, 28441, 30628, 32815, 35002, 37189, 39376, 41563, 43750, 45937, 48124, 50311, 52498, 54685, 56872, 59059, 61246, 63433, 64162, 64891, 65134, 65377, 65458, 65485, 65512, 65521, 65530, 65533, 65534, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 49, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 2, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 0, 0, 1, 0, 0, 1, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13342492399873323769, 4511615971967153504, 9085863547783897978, 13728083094831419091, 4968648927826019469, 12828040835569540857, 14858685484860085108, 11332670461359993442, 6031863247325663438, 10194964851803169917, 3020492374890726247, 14015299246960655077, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1439796670523758837, 11189511375577512439, 4029278259426396811, 5555139373262852832, 17195207199910519646, 15946070950510533025, 16638144790071955925, 14431967032738938661, 674016650738724202, 2476887483552371976, 15867024276402164724, 18240053740881435667, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2591609871503882494, 14523290705070057408, 16053154709446024998, 2905384006316447019, 6734621562241387182, 6868712626693654693, 14803289513390493682, 10393518078208184991, 9655491867310024790, 9610004573075108621, 2691485309401819348, 9264051620447261114, 1, 0, 0, 0, 1, 0, 16310674867943291767, 6055575173485499620, 12415403453461233454, 5919456033500076693, 11602649596278030541, 15730095788089532534, 12155959663009124293, 9715952180361858627, 16719465941571322506, 7947368985060100292, 2462224494429193628, 4753798685424869288, 4964236593939309395, 10383311521670833729, 3770835013589498382, 1, 0, 0, 0, 1, 0, 18087077157995694324, 16330777485816030986, 10063042555031126160, 5687909194194711965, 7973996941547777109, 7908104163460391198, 5239197399579256268, 15224252119305799711, 8574904634803746916, 2182109332887118586, 13071332837477200404, 1540176383869885892, 7961669463441676499, 6863497050423701439, 9055361938666247589, 1, 0, 0, 0, 1, 0, 16967670111924614213, 17486841943826861107, 18307481886056309438, 7941686916236651549, 3672880019205947738, 2236539493336923746, 5670979983981263850, 8194394828646838882, 15431555872184246136, 1087022739668739893, 7204946769828595498, 7978597004657283049, 15117861700401653408, 11135759119963236724, 14147095007921770778, 1, 0, 0, 0, 1, 0, 15248998622285712496, 1816831098907864072, 1977941839824239836, 10471520652203868473, 12969815742735761919, 12829755263022627333, 7984319522957739004, 12444330148186854115, 1895854814022398925, 7979854057356878352, 12651590612371699683, 10693788391520380705, 2168204218347522931, 10792639723427933554, 2008826339817234435, 1, 0, 0, 0, 1, 0, 1949341260302477275, 10525442150725175322, 10268663784703415650, 4586059525590481046, 10757916804785969985, 2326984138263422166, 5769086287272836702, 8680261223649739505, 9584551737159741567, 14209807647112141969, 10782010546727900871, 12476380710530844150, 264326996749206681, 9175748808845810742, 5723824967382588797, 1, 0, 0, 0, 1, 0, 13440535156983805468, 12080935995323460100, 9067005830434678477, 14314758709191331837, 1326425913004665964, 18320766430359725566, 13803823311240773956, 3919235389861209780, 4987801895818641338, 9475211165936098151, 6745878472543166577, 13055692992345669402, 16600930886850462534, 4020408003683484830, 2099106023167119258, 1, 0, 0, 0, 1, 0, 5892436324803940896, 7017064751240904271, 10317850206740106337, 16403500445172050158, 8998725782446855275, 15603212774947060210, 14994098977964244257, 12657319342943489784, 12145542090324719848, 17338503932931685384, 9012900451066906030, 7985393687855976209, 10163945784944658272, 14681340973312169871, 5885105447661412229, 1, 0, 0, 0, 1, 0, 13935905759807022949, 0, 0, 6981555831806437627, 3320646806195653797, 2577750295211676178, 15041604777168753281, 15743276195226846510, 18068871666013902057, 280994234174845985, 15850020848376370982, 17844212763579117389, 18181508983255172512, 418056849863168392, 13912537796384226859, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13711912288503888270, 502156843765695809, 360850050916534143, 10958079103202840999, 2778123425092199841, 13664544216029702565, 10293012497513243194, 2953143545478827927, 2456530167870834703, 10292737970295456228, 2666974936005298869, 2936046437280927758, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7425430573821419685, 13147348360138928114, 7183698983616787617, 17793074612839242130, 2613774562373586415, 1391392205806749871, 12632074680840502609, 9172592184988170325, 7343890316269580191, 632012914013142222, 14966813495153624489, 7163672760378086559, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16752277069679715408, 11903841834984596874, 9070535322622906244, 3601655880141993647, 1448060333031158668, 3418909895274525076, 12384471116364520725, 3259030218090439002, 6483315548845037473, 9098012027422757538, 13584072213050301608, 12965649133168865250, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4383606322674378669, 13264028927506398677, 4766776471757604196, 14660905060901389201, 12446750015896088802, 12927954860087459534, 14751589151467562513, 18208410790236506017, 8060897427763484267, 10391043349415287037, 7848268271641614303, 13621084556403650323, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11282929110176162954, 5896249534368220847, 12230245468863423579, 17357985657180629743, 10353774239160274935, 3759003303159369746, 3091073535594807983, 3398985649909830369, 15694315280551902473, 17044036436784806527, 1670964981039714496, 17078772340992927473, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17215248529293365853, 11382862066285680273, 18104224094677170296, 10490790376815116141, 11424271721157330669, 1148549753827007441, 17274728363719186424, 11870335859895317550, 15462035367190511759, 13171139175044072684, 12506995107569119516, 862170971660204027, 1, 0, 0, 0, 1, 0, 18208784611061899534, 11090107870009134382, 15816468029966600756, 13193227772306657556, 5436084715181539253, 15873409126341319274, 8856174280738574418, 15057005486179715954, 7129001791528740265, 6785780051417756764, 1782594595734670280, 16783127636073026773, 2094744771380247596, 16020980424362300069, 5676881743340217488, 1, 0, 0, 0, 1, 0, 3995660239591967986, 13991065272063476564, 4842320139602494012, 5492874275384737590, 9049442861863566881, 9007898958502691821, 9423711593310475409, 6387235594535598756, 7039074043166063940, 11491856728648046938, 5559192297727634984, 586150029444692874, 9272483157421678641, 11430895388638705560, 6521284656283570782, 1, 0, 0, 0, 1, 0, 10265417819422388610, 3230613796530740211, 8204482557338271208, 5965860733558915216, 3732227441816681926, 4972858056675247397, 15435624740876731287, 610949617653761740, 16413792935045431209, 11964718430105317483, 8697421447132597636, 7685703760533694936, 9520544349855559315, 16369319727902045750, 10481218501610762636, 1, 0, 0, 0, 1, 0, 4200148723083586126, 8898019494692638676, 9361391436000884061, 6906630570311142812, 10416842793286403595, 15154449156086880838, 17187582840477322187, 1667764180674112574, 11868526707386259660, 7310308994414837120, 37096681180297292, 1254987403839644538, 7281147841738764349, 16804807948024450931, 14191613402325013881, 1, 0, 0, 0, 1, 0, 6921512846940257894, 8083147322870350598, 7402338099048749868, 11028121748345672612, 9182929970775715030, 642245012387336876, 9940061963065628902, 677543792580138430, 5887036391937389613, 4972018469228063343, 9603988472267868801, 6207690803740787708, 1390751769269680465, 14779846517676698965, 4400313738036540825, 1, 0, 0, 0, 1, 0, 15720913686265040726, 11620345195770806393, 392865519522630483, 10866688391213961683, 4078956937078417294, 8169860993617536308, 13903556343063122489, 7226453148331774623, 12303475117195379639, 12980119595156137175, 2954837086209820968, 686805010274260483, 12922697597526240324, 2239891938742671995, 9798699259742823392, 1, 0, 0, 0, 1, 0, 1576291082626878936, 6836143998208741199, 5718769156293156294, 501346961392724628, 12301747922262729865, 7909458165142256993, 17643816943101201258, 739842910379542056, 14479451218433079532, 6627357084936364627, 6596157637386353039, 8706567413279745902, 4975249353684987436, 9576130314342554279, 8323169935435436763, 1, 0, 0, 0, 1, 0, 13015036049004182291, 0, 0, 3820689183586493894, 8535816953133153286, 12781603895645888322, 4895491920411997249, 6893839572721182305, 17259376159632543425, 7788172704304532836, 17444739644589522901, 15979424445015031332, 6966167031354634355, 5956660324772534609, 14233099751914870044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2862138511955678409, 2554244438665697829, 9129723360543316479, 16513197729164811328, 10619536471246139015, 11289943669462175698, 7818804555865981505, 4673396992430997118, 18261872069356847559, 8010670397007670803, 14891365206755013222, 17356025534910089368, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7758258992155315690, 6695383891040002341, 2424787611628537668, 4815287357290896051, 4063396021928247911, 10804772324353478999, 11573391963135759227, 5652365973964779246, 7568935938034555881, 871847630272290682, 833106187556617464, 2031310896521954322, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17115115516972321026, 9265251570417433175, 16343713044075599831, 3003012580421078075, 1116280449848444285, 17288383771256214060, 18390005084876364234, 14148401294484512817, 3939988349760901151, 18441078654886601219, 14690990432528119604, 16067965450256037769, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 0, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 2197, 4384, 6571, 8758, 10945, 13132, 15319, 17506, 19693, 21880, 24067, 26254, 28441, 30628, 32815, 35002, 37189, 39376, 41563, 43750, 45937, 48124, 50311, 52498, 54685, 56872, 59059, 61246, 63433, 64162, 64891, 65134, 65377, 65458, 65485, 65512, 65521, 65530, 65533, 65534, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 49, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 2, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_23.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_23.snap index 79b5a3bbd5..0f9c32d88a 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_23.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_23.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 0, 0, 1, 0, 0, 0, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13342492399873323769, 4511615971967153504, 9085863547783897978, 13728083094831419091, 4968648927826019469, 12828040835569540857, 14858685484860085108, 11332670461359993442, 6031863247325663438, 10194964851803169917, 3020492374890726247, 14015299246960655077, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1439796670523758837, 11189511375577512439, 4029278259426396811, 5555139373262852832, 17195207199910519646, 15946070950510533025, 16638144790071955925, 14431967032738938661, 674016650738724202, 2476887483552371976, 15867024276402164724, 18240053740881435667, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2591609871503882494, 14523290705070057408, 16053154709446024998, 2905384006316447019, 6734621562241387182, 6868712626693654693, 14803289513390493682, 10393518078208184991, 9655491867310024790, 9610004573075108621, 2691485309401819348, 9264051620447261114, 1, 0, 0, 0, 1, 0, 16310674867943291767, 6055575173485499620, 12415403453461233454, 5919456033500076693, 11602649596278030541, 15730095788089532534, 12155959663009124293, 9715952180361858627, 16719465941571322506, 7947368985060100292, 2462224494429193628, 4753798685424869288, 4964236593939309395, 10383311521670833729, 3770835013589498382, 1, 0, 0, 0, 1, 0, 18087077157995694324, 16330777485816030986, 10063042555031126160, 5687909194194711965, 7973996941547777109, 7908104163460391198, 5239197399579256268, 15224252119305799711, 8574904634803746916, 2182109332887118586, 13071332837477200404, 1540176383869885892, 7961669463441676499, 6863497050423701439, 9055361938666247589, 1, 0, 0, 0, 1, 0, 16967670111924614213, 17486841943826861107, 18307481886056309438, 7941686916236651549, 3672880019205947738, 2236539493336923746, 5670979983981263850, 8194394828646838882, 15431555872184246136, 1087022739668739893, 7204946769828595498, 7978597004657283049, 15117861700401653408, 11135759119963236724, 14147095007921770778, 1, 0, 0, 0, 1, 0, 15248998622285712496, 1816831098907864072, 1977941839824239836, 10471520652203868473, 12969815742735761919, 12829755263022627333, 7984319522957739004, 12444330148186854115, 1895854814022398925, 7979854057356878352, 12651590612371699683, 10693788391520380705, 2168204218347522931, 10792639723427933554, 2008826339817234435, 1, 0, 0, 0, 1, 0, 1949341260302477275, 10525442150725175322, 10268663784703415650, 4586059525590481046, 10757916804785969985, 2326984138263422166, 5769086287272836702, 8680261223649739505, 9584551737159741567, 14209807647112141969, 10782010546727900871, 12476380710530844150, 264326996749206681, 9175748808845810742, 5723824967382588797, 1, 0, 0, 0, 1, 0, 13440535156983805468, 12080935995323460100, 9067005830434678477, 14314758709191331837, 1326425913004665964, 18320766430359725566, 13803823311240773956, 3919235389861209780, 4987801895818641338, 9475211165936098151, 6745878472543166577, 13055692992345669402, 16600930886850462534, 4020408003683484830, 2099106023167119258, 1, 0, 0, 0, 1, 0, 5892436324803940896, 7017064751240904271, 10317850206740106337, 16403500445172050158, 8998725782446855275, 15603212774947060210, 14994098977964244257, 12657319342943489784, 12145542090324719848, 17338503932931685384, 9012900451066906030, 7985393687855976209, 10163945784944658272, 14681340973312169871, 5885105447661412229, 1, 0, 0, 0, 1, 0, 13935905759807022949, 0, 0, 6981555831806437627, 3320646806195653797, 2577750295211676178, 15041604777168753281, 15743276195226846510, 18068871666013902057, 280994234174845985, 15850020848376370982, 17844212763579117389, 18181508983255172512, 418056849863168392, 13912537796384226859, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13711912288503888270, 502156843765695809, 360850050916534143, 10958079103202840999, 2778123425092199841, 13664544216029702565, 10293012497513243194, 2953143545478827927, 2456530167870834703, 10292737970295456228, 2666974936005298869, 2936046437280927758, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7425430573821419685, 13147348360138928114, 7183698983616787617, 17793074612839242130, 2613774562373586415, 1391392205806749871, 12632074680840502609, 9172592184988170325, 7343890316269580191, 632012914013142222, 14966813495153624489, 7163672760378086559, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16752277069679715408, 11903841834984596874, 9070535322622906244, 3601655880141993647, 1448060333031158668, 3418909895274525076, 12384471116364520725, 3259030218090439002, 6483315548845037473, 9098012027422757538, 13584072213050301608, 12965649133168865250, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4383606322674378669, 13264028927506398677, 4766776471757604196, 14660905060901389201, 12446750015896088802, 12927954860087459534, 14751589151467562513, 18208410790236506017, 8060897427763484267, 10391043349415287037, 7848268271641614303, 13621084556403650323, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11282929110176162954, 5896249534368220847, 12230245468863423579, 17357985657180629743, 10353774239160274935, 3759003303159369746, 3091073535594807983, 3398985649909830369, 15694315280551902473, 17044036436784806527, 1670964981039714496, 17078772340992927473, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17215248529293365853, 11382862066285680273, 18104224094677170296, 10490790376815116141, 11424271721157330669, 1148549753827007441, 17274728363719186424, 11870335859895317550, 15462035367190511759, 13171139175044072684, 12506995107569119516, 862170971660204027, 1, 0, 0, 0, 1, 0, 18208784611061899534, 11090107870009134382, 15816468029966600756, 13193227772306657556, 5436084715181539253, 15873409126341319274, 8856174280738574418, 15057005486179715954, 7129001791528740265, 6785780051417756764, 1782594595734670280, 16783127636073026773, 2094744771380247596, 16020980424362300069, 5676881743340217488, 1, 0, 0, 0, 1, 0, 3995660239591967986, 13991065272063476564, 4842320139602494012, 5492874275384737590, 9049442861863566881, 9007898958502691821, 9423711593310475409, 6387235594535598756, 7039074043166063940, 11491856728648046938, 5559192297727634984, 586150029444692874, 9272483157421678641, 11430895388638705560, 6521284656283570782, 1, 0, 0, 0, 1, 0, 10265417819422388610, 3230613796530740211, 8204482557338271208, 5965860733558915216, 3732227441816681926, 4972858056675247397, 15435624740876731287, 610949617653761740, 16413792935045431209, 11964718430105317483, 8697421447132597636, 7685703760533694936, 9520544349855559315, 16369319727902045750, 10481218501610762636, 1, 0, 0, 0, 1, 0, 4200148723083586126, 8898019494692638676, 9361391436000884061, 6906630570311142812, 10416842793286403595, 15154449156086880838, 17187582840477322187, 1667764180674112574, 11868526707386259660, 7310308994414837120, 37096681180297292, 1254987403839644538, 7281147841738764349, 16804807948024450931, 14191613402325013881, 1, 0, 0, 0, 1, 0, 6921512846940257894, 8083147322870350598, 7402338099048749868, 11028121748345672612, 9182929970775715030, 642245012387336876, 9940061963065628902, 677543792580138430, 5887036391937389613, 4972018469228063343, 9603988472267868801, 6207690803740787708, 1390751769269680465, 14779846517676698965, 4400313738036540825, 1, 0, 0, 0, 1, 0, 15720913686265040726, 11620345195770806393, 392865519522630483, 10866688391213961683, 4078956937078417294, 8169860993617536308, 13903556343063122489, 7226453148331774623, 12303475117195379639, 12980119595156137175, 2954837086209820968, 686805010274260483, 12922697597526240324, 2239891938742671995, 9798699259742823392, 1, 0, 0, 0, 1, 0, 1576291082626878936, 6836143998208741199, 5718769156293156294, 501346961392724628, 12301747922262729865, 7909458165142256993, 17643816943101201258, 739842910379542056, 14479451218433079532, 6627357084936364627, 6596157637386353039, 8706567413279745902, 4975249353684987436, 9576130314342554279, 8323169935435436763, 1, 0, 0, 0, 1, 0, 13015036049004182291, 0, 0, 3820689183586493894, 8535816953133153286, 12781603895645888322, 4895491920411997249, 6893839572721182305, 17259376159632543425, 7788172704304532836, 17444739644589522901, 15979424445015031332, 6966167031354634355, 5956660324772534609, 14233099751914870044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2862138511955678409, 2554244438665697829, 9129723360543316479, 16513197729164811328, 10619536471246139015, 11289943669462175698, 7818804555865981505, 4673396992430997118, 18261872069356847559, 8010670397007670803, 14891365206755013222, 17356025534910089368, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7758258992155315690, 6695383891040002341, 2424787611628537668, 4815287357290896051, 4063396021928247911, 10804772324353478999, 11573391963135759227, 5652365973964779246, 7568935938034555881, 871847630272290682, 833106187556617464, 2031310896521954322, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17115115516972321026, 9265251570417433175, 16343713044075599831, 3003012580421078075, 1116280449848444285, 17288383771256214060, 18390005084876364234, 14148401294484512817, 3939988349760901151, 18441078654886601219, 14690990432528119604, 16067965450256037769, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 1, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 2197, 4384, 6571, 8758, 10945, 13132, 15319, 17506, 19693, 21880, 24067, 26254, 28441, 30628, 32815, 35002, 37189, 39376, 41563, 43750, 45937, 48124, 50311, 52498, 54685, 56872, 59059, 61246, 63433, 64162, 64891, 65134, 65377, 65458, 65485, 65512, 65521, 65530, 65533, 65534, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 49, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 2, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 0, 0, 1, 0, 0, 1, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13342492399873323769, 4511615971967153504, 9085863547783897978, 13728083094831419091, 4968648927826019469, 12828040835569540857, 14858685484860085108, 11332670461359993442, 6031863247325663438, 10194964851803169917, 3020492374890726247, 14015299246960655077, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1439796670523758837, 11189511375577512439, 4029278259426396811, 5555139373262852832, 17195207199910519646, 15946070950510533025, 16638144790071955925, 14431967032738938661, 674016650738724202, 2476887483552371976, 15867024276402164724, 18240053740881435667, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2591609871503882494, 14523290705070057408, 16053154709446024998, 2905384006316447019, 6734621562241387182, 6868712626693654693, 14803289513390493682, 10393518078208184991, 9655491867310024790, 9610004573075108621, 2691485309401819348, 9264051620447261114, 1, 0, 0, 0, 1, 0, 16310674867943291767, 6055575173485499620, 12415403453461233454, 5919456033500076693, 11602649596278030541, 15730095788089532534, 12155959663009124293, 9715952180361858627, 16719465941571322506, 7947368985060100292, 2462224494429193628, 4753798685424869288, 4964236593939309395, 10383311521670833729, 3770835013589498382, 1, 0, 0, 0, 1, 0, 18087077157995694324, 16330777485816030986, 10063042555031126160, 5687909194194711965, 7973996941547777109, 7908104163460391198, 5239197399579256268, 15224252119305799711, 8574904634803746916, 2182109332887118586, 13071332837477200404, 1540176383869885892, 7961669463441676499, 6863497050423701439, 9055361938666247589, 1, 0, 0, 0, 1, 0, 16967670111924614213, 17486841943826861107, 18307481886056309438, 7941686916236651549, 3672880019205947738, 2236539493336923746, 5670979983981263850, 8194394828646838882, 15431555872184246136, 1087022739668739893, 7204946769828595498, 7978597004657283049, 15117861700401653408, 11135759119963236724, 14147095007921770778, 1, 0, 0, 0, 1, 0, 15248998622285712496, 1816831098907864072, 1977941839824239836, 10471520652203868473, 12969815742735761919, 12829755263022627333, 7984319522957739004, 12444330148186854115, 1895854814022398925, 7979854057356878352, 12651590612371699683, 10693788391520380705, 2168204218347522931, 10792639723427933554, 2008826339817234435, 1, 0, 0, 0, 1, 0, 1949341260302477275, 10525442150725175322, 10268663784703415650, 4586059525590481046, 10757916804785969985, 2326984138263422166, 5769086287272836702, 8680261223649739505, 9584551737159741567, 14209807647112141969, 10782010546727900871, 12476380710530844150, 264326996749206681, 9175748808845810742, 5723824967382588797, 1, 0, 0, 0, 1, 0, 13440535156983805468, 12080935995323460100, 9067005830434678477, 14314758709191331837, 1326425913004665964, 18320766430359725566, 13803823311240773956, 3919235389861209780, 4987801895818641338, 9475211165936098151, 6745878472543166577, 13055692992345669402, 16600930886850462534, 4020408003683484830, 2099106023167119258, 1, 0, 0, 0, 1, 0, 5892436324803940896, 7017064751240904271, 10317850206740106337, 16403500445172050158, 8998725782446855275, 15603212774947060210, 14994098977964244257, 12657319342943489784, 12145542090324719848, 17338503932931685384, 9012900451066906030, 7985393687855976209, 10163945784944658272, 14681340973312169871, 5885105447661412229, 1, 0, 0, 0, 1, 0, 13935905759807022949, 0, 0, 6981555831806437627, 3320646806195653797, 2577750295211676178, 15041604777168753281, 15743276195226846510, 18068871666013902057, 280994234174845985, 15850020848376370982, 17844212763579117389, 18181508983255172512, 418056849863168392, 13912537796384226859, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13711912288503888270, 502156843765695809, 360850050916534143, 10958079103202840999, 2778123425092199841, 13664544216029702565, 10293012497513243194, 2953143545478827927, 2456530167870834703, 10292737970295456228, 2666974936005298869, 2936046437280927758, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7425430573821419685, 13147348360138928114, 7183698983616787617, 17793074612839242130, 2613774562373586415, 1391392205806749871, 12632074680840502609, 9172592184988170325, 7343890316269580191, 632012914013142222, 14966813495153624489, 7163672760378086559, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16752277069679715408, 11903841834984596874, 9070535322622906244, 3601655880141993647, 1448060333031158668, 3418909895274525076, 12384471116364520725, 3259030218090439002, 6483315548845037473, 9098012027422757538, 13584072213050301608, 12965649133168865250, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4383606322674378669, 13264028927506398677, 4766776471757604196, 14660905060901389201, 12446750015896088802, 12927954860087459534, 14751589151467562513, 18208410790236506017, 8060897427763484267, 10391043349415287037, 7848268271641614303, 13621084556403650323, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11282929110176162954, 5896249534368220847, 12230245468863423579, 17357985657180629743, 10353774239160274935, 3759003303159369746, 3091073535594807983, 3398985649909830369, 15694315280551902473, 17044036436784806527, 1670964981039714496, 17078772340992927473, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17215248529293365853, 11382862066285680273, 18104224094677170296, 10490790376815116141, 11424271721157330669, 1148549753827007441, 17274728363719186424, 11870335859895317550, 15462035367190511759, 13171139175044072684, 12506995107569119516, 862170971660204027, 1, 0, 0, 0, 1, 0, 18208784611061899534, 11090107870009134382, 15816468029966600756, 13193227772306657556, 5436084715181539253, 15873409126341319274, 8856174280738574418, 15057005486179715954, 7129001791528740265, 6785780051417756764, 1782594595734670280, 16783127636073026773, 2094744771380247596, 16020980424362300069, 5676881743340217488, 1, 0, 0, 0, 1, 0, 3995660239591967986, 13991065272063476564, 4842320139602494012, 5492874275384737590, 9049442861863566881, 9007898958502691821, 9423711593310475409, 6387235594535598756, 7039074043166063940, 11491856728648046938, 5559192297727634984, 586150029444692874, 9272483157421678641, 11430895388638705560, 6521284656283570782, 1, 0, 0, 0, 1, 0, 10265417819422388610, 3230613796530740211, 8204482557338271208, 5965860733558915216, 3732227441816681926, 4972858056675247397, 15435624740876731287, 610949617653761740, 16413792935045431209, 11964718430105317483, 8697421447132597636, 7685703760533694936, 9520544349855559315, 16369319727902045750, 10481218501610762636, 1, 0, 0, 0, 1, 0, 4200148723083586126, 8898019494692638676, 9361391436000884061, 6906630570311142812, 10416842793286403595, 15154449156086880838, 17187582840477322187, 1667764180674112574, 11868526707386259660, 7310308994414837120, 37096681180297292, 1254987403839644538, 7281147841738764349, 16804807948024450931, 14191613402325013881, 1, 0, 0, 0, 1, 0, 6921512846940257894, 8083147322870350598, 7402338099048749868, 11028121748345672612, 9182929970775715030, 642245012387336876, 9940061963065628902, 677543792580138430, 5887036391937389613, 4972018469228063343, 9603988472267868801, 6207690803740787708, 1390751769269680465, 14779846517676698965, 4400313738036540825, 1, 0, 0, 0, 1, 0, 15720913686265040726, 11620345195770806393, 392865519522630483, 10866688391213961683, 4078956937078417294, 8169860993617536308, 13903556343063122489, 7226453148331774623, 12303475117195379639, 12980119595156137175, 2954837086209820968, 686805010274260483, 12922697597526240324, 2239891938742671995, 9798699259742823392, 1, 0, 0, 0, 1, 0, 1576291082626878936, 6836143998208741199, 5718769156293156294, 501346961392724628, 12301747922262729865, 7909458165142256993, 17643816943101201258, 739842910379542056, 14479451218433079532, 6627357084936364627, 6596157637386353039, 8706567413279745902, 4975249353684987436, 9576130314342554279, 8323169935435436763, 1, 0, 0, 0, 1, 0, 13015036049004182291, 0, 0, 3820689183586493894, 8535816953133153286, 12781603895645888322, 4895491920411997249, 6893839572721182305, 17259376159632543425, 7788172704304532836, 17444739644589522901, 15979424445015031332, 6966167031354634355, 5956660324772534609, 14233099751914870044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2862138511955678409, 2554244438665697829, 9129723360543316479, 16513197729164811328, 10619536471246139015, 11289943669462175698, 7818804555865981505, 4673396992430997118, 18261872069356847559, 8010670397007670803, 14891365206755013222, 17356025534910089368, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7758258992155315690, 6695383891040002341, 2424787611628537668, 4815287357290896051, 4063396021928247911, 10804772324353478999, 11573391963135759227, 5652365973964779246, 7568935938034555881, 871847630272290682, 833106187556617464, 2031310896521954322, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17115115516972321026, 9265251570417433175, 16343713044075599831, 3003012580421078075, 1116280449848444285, 17288383771256214060, 18390005084876364234, 14148401294484512817, 3939988349760901151, 18441078654886601219, 14690990432528119604, 16067965450256037769, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 0, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 2197, 4384, 6571, 8758, 10945, 13132, 15319, 17506, 19693, 21880, 24067, 26254, 28441, 30628, 32815, 35002, 37189, 39376, 41563, 43750, 45937, 48124, 50311, 52498, 54685, 56872, 59059, 61246, 63433, 64162, 64891, 65134, 65377, 65458, 65485, 65512, 65521, 65530, 65533, 65534, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 49, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 2, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_24.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_24.snap index 7989144c16..943e299594 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_24.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_24.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 0, 0, 0, 1, 1, 1, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 0, 0, 1, 0, 0, 0, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13398731741387911383, 10446875550887438149, 5572533910279649175, 13491880295779941671, 8698112979694512183, 126724644436205205, 12147025678885387063, 1552825087809033479, 2467314028170731200, 16216562119055243322, 18364539353432252959, 9694623828077467233, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1702596310854469483, 7588826506897155585, 2665502751151845058, 17558274388625518928, 1484832724912073400, 10241199256484865800, 1963067308825972547, 9447273069996733529, 16601393295490334589, 9113898857319116772, 1551875687645078236, 3675008886325466594, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5960531672215414966, 16730914921892092280, 3420041171743926975, 2846824553470173952, 17559905242927504135, 11710755472728257079, 4225984201120753953, 6419011263238967677, 410862426300963016, 17132700957014282816, 5908552039479525180, 9937899669773170043, 1, 0, 0, 0, 1, 0, 2018420705353333259, 9229172344109022227, 14345475894589655224, 14152498107176274636, 12511176149634059683, 13105841064724313047, 3523509076537079172, 8301224421374966792, 9814439449693896294, 1196744323913827820, 6692866018192235946, 6715125970066025284, 16961354324299843537, 13623916550628200923, 7849591422987652597, 1, 0, 0, 0, 1, 0, 15554140634930940730, 12149993956067977962, 12691178410278042977, 5800650255543088287, 12242421290212925246, 8706919134091371207, 9746772683078209435, 11307131702448115253, 12969767250590673327, 6686048917052134288, 16414416705576227412, 1613631742115437617, 4492424574001173259, 5891234840048028912, 10568464651116235631, 1, 0, 0, 0, 1, 0, 13619523926946942997, 13932701015699199040, 16282203144892365836, 288495594474105189, 2659747577123257435, 468662522013222574, 4777591649493566963, 4549622233314763492, 3609195066294253037, 15701263684091820063, 3487294253425873238, 1246482959663576649, 12151404659680738203, 9533885383398026397, 13349382737895871506, 1, 0, 0, 0, 1, 0, 15226961741359169238, 9668238623772378075, 18406869698288958124, 10304697226126818963, 17510270622758876933, 5208953037158023510, 13973483607215960244, 14889292305938541714, 17903436875856263069, 10456077510396891682, 10911204476854742317, 10767371226180010877, 2845921321939758123, 10207454088372242899, 10067581411407423596, 1, 0, 0, 0, 1, 0, 11007944782899320208, 9688656475445036579, 11072586067494939844, 7796778119718125747, 17430549031516796763, 17715598857116570054, 15890473733699877306, 11140388332008156040, 15437904745147545753, 9698983999555494854, 11853370831480580617, 13778778399918900014, 12400304789414303503, 16245042535546460743, 15913203609357376990, 1, 0, 0, 0, 1, 0, 15735266059006798772, 3801815209619718647, 4149362138393037094, 11043847812690714922, 15750016999752216538, 3526946062060894178, 17542926168179991242, 13488989169427894096, 1711823131760196898, 7279056890420718668, 907162566851125145, 14020627064222792913, 6600097648382112815, 2667361456561557318, 17219034350459931223, 1, 0, 0, 0, 1, 0, 2879545791821313481, 1259493953867425253, 11021794342469225424, 16409243384953073963, 8823739942223974350, 1348240088196356067, 8826324103843911331, 12121966587219528787, 8947445239291587989, 794393058555157904, 7400519332304830077, 1437804116009572564, 10359847956037447171, 9185031367250188962, 3713349402354236945, 1, 0, 0, 0, 1, 0, 11365853094296287088, 0, 0, 9109780042108713794, 2025584296720659827, 9279746140911612054, 3536220024494542760, 8800758533265494982, 13269571463782090254, 12786208149678159110, 7328500979632536073, 12022435130037250391, 15247865541233938330, 6462695849105922235, 10616453538138359448, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15306362721670767113, 3678646409353890898, 3233112695116768266, 294092485488322279, 6765154775891776468, 17267661857179267882, 10374412076721466090, 6984573596316331699, 433966021407007016, 2869001919576405519, 4895010392763653973, 3058320693955246873, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2730832614768234730, 10191942812097658700, 1858231082388626584, 12149225804903469645, 15354276103682076009, 10036416896754782473, 10797782388389379392, 14977076517134741377, 17962467459011056432, 17417648807118850139, 14926331475286732296, 4965950384458944745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 479016032615721743, 1453528547827258310, 17742257866254572336, 3036839951080750932, 7645122244202370271, 18012966148946012188, 14917361677919134410, 16254221298013000537, 2310073430536633551, 14370760106653398402, 13033597008762597331, 16872816814243270280, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4194228403373198226, 17446294671039685780, 16018419181163655201, 16046055491183908407, 3149648302915651279, 5535026374122183926, 638510963943763558, 11838988982732965160, 4659330917232488313, 9155393387906219784, 3236590870033651606, 11961896515966597756, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4321424756204952178, 12180657588796280274, 16144413208110066321, 6937908670684349781, 2183945468601797792, 15092496102668051355, 18152457079207292292, 8838579915162662604, 18368728739119945660, 13386503743719781199, 18316422071602565784, 4654018437841213862, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17106991433953495229, 3901851127268644692, 12517012706582615280, 9428962583778419369, 13296390406171247483, 257473274985355223, 13178378367745074892, 9645282237960382599, 6368972875636062959, 2643395754600898300, 15701603594857309722, 5272790938970678408, 1, 0, 0, 0, 1, 0, 8354096936197882314, 12164220337553977958, 17378238272422563267, 480007043786623808, 15132938321031306327, 17466716576309862393, 12671344758477488595, 1854573623301018325, 10260436313437728882, 13292769663331639140, 1452793205233705375, 4707200061081251786, 8948310776749535742, 5947972608122843521, 4281766794113009188, 1, 0, 0, 0, 1, 0, 6138730842224758627, 11686086623819538808, 14590719856456710457, 7837641036032671415, 12010127700996563076, 15879773433331271008, 2133167353214657976, 4773455775437745378, 10299240179448618610, 6045651321104574873, 6462510494810546740, 13659284260102405271, 17164574292834012429, 10936885931162702722, 17886680608631893125, 1, 0, 0, 0, 1, 0, 3162794119795435989, 4562834728889875846, 6107962147992612292, 8465759122953264103, 1665683881724788425, 17940570471380392799, 3223264940814324611, 332137947454970287, 8209352310311089013, 265277838027200178, 6187212959913925984, 6075821593933813225, 1499535172174489924, 9418660414070260899, 13746660795296557163, 1, 0, 0, 0, 1, 0, 12162889168802937247, 15401019179307093351, 9535864432215440062, 9771451080159159411, 1484367395490874035, 4502835184975000914, 11663083613788432971, 7803450627715630286, 5035373507226681389, 6225168341521517925, 14540441677731288899, 13120146179040509426, 16357468590797302295, 12493684045311157256, 7270036416424823086, 1, 0, 0, 0, 1, 0, 11474756587763645750, 12425880873394014153, 6096335841451385157, 17765926817646991510, 16052656468702535281, 4179930870000296671, 11139084033219732849, 4739616627721376242, 2504937998242193140, 3231597075356238257, 17657306689192164966, 10747531529265802304, 2426484208226890587, 10916182427754190208, 208295785334160234, 1, 0, 0, 0, 1, 0, 16765618494244376401, 5081092756681378539, 13872457506768069988, 4529776878769021619, 169695422976636841, 9233870580127604406, 15207411620676648511, 16719606593630884665, 11029884787275710886, 5442307944523583224, 2816716335908718574, 1718675228113159248, 14980454155356662645, 2197742477585333602, 13322595239551652280, 1, 0, 0, 0, 1, 0, 13714635581333797590, 1976182429811709209, 5257242985435580561, 14057252888063062893, 8215766650263520356, 9037700404196650899, 10815732145433955496, 6575555704765488965, 7946539915965721335, 17774723700903466966, 1438935019962455534, 7272994976566716580, 17414628586841602406, 7615091160766850619, 17297950766482640011, 1, 0, 0, 0, 1, 0, 5178157714855210142, 0, 0, 9776318485951152693, 12890305973496102809, 15372246715962319753, 4407166322243232537, 8211250723004787137, 16732929992769459335, 5078948249831860209, 10360494843504659614, 15218257307939313170, 9391735730020210762, 18265959195035569409, 13953265341705633702, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14580812564900766592, 15861640058126249653, 14882250288085472215, 2674423901749705077, 17915715126849699543, 7467959617957012266, 11754602214149170613, 4296220331020841697, 1975418926721182099, 2701106116508976741, 12264490131121739608, 14232230927042798671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6012095218278392893, 14517213901488835116, 10288285656672707851, 3504222453682520691, 12433676256235881077, 9462884495447906259, 1831143805055270726, 13555983847490106392, 12089371041955731221, 1898134322103701335, 16106017656155713552, 6488214721912194407, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12583880807825187559, 6582109139928846076, 11046557109431487119, 2024557484059292221, 7933147088254086263, 17277989807306885144, 14579426980777214583, 10974207239020571710, 15888265955091463133, 12702609090402714686, 1042562102193278240, 10956084748384074170, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 1, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 1, 1, 0, 0, 0, 13, 4294967292, 0, 1, 12, 0, 0, 2147483648, 0, 13, 0, 11351842504255128813, 0, 65535, 16383, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 13, 2200, 4387, 6574, 8761, 10948, 13135, 15322, 16051, 16294, 16375, 16378, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 51, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 3, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 0, 0, 0, 1, 1, 1, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 0, 0, 1, 0, 0, 1, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13398731741387911383, 10446875550887438149, 5572533910279649175, 13491880295779941671, 8698112979694512183, 126724644436205205, 12147025678885387063, 1552825087809033479, 2467314028170731200, 16216562119055243322, 18364539353432252959, 9694623828077467233, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1702596310854469483, 7588826506897155585, 2665502751151845058, 17558274388625518928, 1484832724912073400, 10241199256484865800, 1963067308825972547, 9447273069996733529, 16601393295490334589, 9113898857319116772, 1551875687645078236, 3675008886325466594, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5960531672215414966, 16730914921892092280, 3420041171743926975, 2846824553470173952, 17559905242927504135, 11710755472728257079, 4225984201120753953, 6419011263238967677, 410862426300963016, 17132700957014282816, 5908552039479525180, 9937899669773170043, 1, 0, 0, 0, 1, 0, 2018420705353333259, 9229172344109022227, 14345475894589655224, 14152498107176274636, 12511176149634059683, 13105841064724313047, 3523509076537079172, 8301224421374966792, 9814439449693896294, 1196744323913827820, 6692866018192235946, 6715125970066025284, 16961354324299843537, 13623916550628200923, 7849591422987652597, 1, 0, 0, 0, 1, 0, 15554140634930940730, 12149993956067977962, 12691178410278042977, 5800650255543088287, 12242421290212925246, 8706919134091371207, 9746772683078209435, 11307131702448115253, 12969767250590673327, 6686048917052134288, 16414416705576227412, 1613631742115437617, 4492424574001173259, 5891234840048028912, 10568464651116235631, 1, 0, 0, 0, 1, 0, 13619523926946942997, 13932701015699199040, 16282203144892365836, 288495594474105189, 2659747577123257435, 468662522013222574, 4777591649493566963, 4549622233314763492, 3609195066294253037, 15701263684091820063, 3487294253425873238, 1246482959663576649, 12151404659680738203, 9533885383398026397, 13349382737895871506, 1, 0, 0, 0, 1, 0, 15226961741359169238, 9668238623772378075, 18406869698288958124, 10304697226126818963, 17510270622758876933, 5208953037158023510, 13973483607215960244, 14889292305938541714, 17903436875856263069, 10456077510396891682, 10911204476854742317, 10767371226180010877, 2845921321939758123, 10207454088372242899, 10067581411407423596, 1, 0, 0, 0, 1, 0, 11007944782899320208, 9688656475445036579, 11072586067494939844, 7796778119718125747, 17430549031516796763, 17715598857116570054, 15890473733699877306, 11140388332008156040, 15437904745147545753, 9698983999555494854, 11853370831480580617, 13778778399918900014, 12400304789414303503, 16245042535546460743, 15913203609357376990, 1, 0, 0, 0, 1, 0, 15735266059006798772, 3801815209619718647, 4149362138393037094, 11043847812690714922, 15750016999752216538, 3526946062060894178, 17542926168179991242, 13488989169427894096, 1711823131760196898, 7279056890420718668, 907162566851125145, 14020627064222792913, 6600097648382112815, 2667361456561557318, 17219034350459931223, 1, 0, 0, 0, 1, 0, 2879545791821313481, 1259493953867425253, 11021794342469225424, 16409243384953073963, 8823739942223974350, 1348240088196356067, 8826324103843911331, 12121966587219528787, 8947445239291587989, 794393058555157904, 7400519332304830077, 1437804116009572564, 10359847956037447171, 9185031367250188962, 3713349402354236945, 1, 0, 0, 0, 1, 0, 11365853094296287088, 0, 0, 9109780042108713794, 2025584296720659827, 9279746140911612054, 3536220024494542760, 8800758533265494982, 13269571463782090254, 12786208149678159110, 7328500979632536073, 12022435130037250391, 15247865541233938330, 6462695849105922235, 10616453538138359448, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15306362721670767113, 3678646409353890898, 3233112695116768266, 294092485488322279, 6765154775891776468, 17267661857179267882, 10374412076721466090, 6984573596316331699, 433966021407007016, 2869001919576405519, 4895010392763653973, 3058320693955246873, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2730832614768234730, 10191942812097658700, 1858231082388626584, 12149225804903469645, 15354276103682076009, 10036416896754782473, 10797782388389379392, 14977076517134741377, 17962467459011056432, 17417648807118850139, 14926331475286732296, 4965950384458944745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 479016032615721743, 1453528547827258310, 17742257866254572336, 3036839951080750932, 7645122244202370271, 18012966148946012188, 14917361677919134410, 16254221298013000537, 2310073430536633551, 14370760106653398402, 13033597008762597331, 16872816814243270280, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4194228403373198226, 17446294671039685780, 16018419181163655201, 16046055491183908407, 3149648302915651279, 5535026374122183926, 638510963943763558, 11838988982732965160, 4659330917232488313, 9155393387906219784, 3236590870033651606, 11961896515966597756, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4321424756204952178, 12180657588796280274, 16144413208110066321, 6937908670684349781, 2183945468601797792, 15092496102668051355, 18152457079207292292, 8838579915162662604, 18368728739119945660, 13386503743719781199, 18316422071602565784, 4654018437841213862, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17106991433953495229, 3901851127268644692, 12517012706582615280, 9428962583778419369, 13296390406171247483, 257473274985355223, 13178378367745074892, 9645282237960382599, 6368972875636062959, 2643395754600898300, 15701603594857309722, 5272790938970678408, 1, 0, 0, 0, 1, 0, 8354096936197882314, 12164220337553977958, 17378238272422563267, 480007043786623808, 15132938321031306327, 17466716576309862393, 12671344758477488595, 1854573623301018325, 10260436313437728882, 13292769663331639140, 1452793205233705375, 4707200061081251786, 8948310776749535742, 5947972608122843521, 4281766794113009188, 1, 0, 0, 0, 1, 0, 6138730842224758627, 11686086623819538808, 14590719856456710457, 7837641036032671415, 12010127700996563076, 15879773433331271008, 2133167353214657976, 4773455775437745378, 10299240179448618610, 6045651321104574873, 6462510494810546740, 13659284260102405271, 17164574292834012429, 10936885931162702722, 17886680608631893125, 1, 0, 0, 0, 1, 0, 3162794119795435989, 4562834728889875846, 6107962147992612292, 8465759122953264103, 1665683881724788425, 17940570471380392799, 3223264940814324611, 332137947454970287, 8209352310311089013, 265277838027200178, 6187212959913925984, 6075821593933813225, 1499535172174489924, 9418660414070260899, 13746660795296557163, 1, 0, 0, 0, 1, 0, 12162889168802937247, 15401019179307093351, 9535864432215440062, 9771451080159159411, 1484367395490874035, 4502835184975000914, 11663083613788432971, 7803450627715630286, 5035373507226681389, 6225168341521517925, 14540441677731288899, 13120146179040509426, 16357468590797302295, 12493684045311157256, 7270036416424823086, 1, 0, 0, 0, 1, 0, 11474756587763645750, 12425880873394014153, 6096335841451385157, 17765926817646991510, 16052656468702535281, 4179930870000296671, 11139084033219732849, 4739616627721376242, 2504937998242193140, 3231597075356238257, 17657306689192164966, 10747531529265802304, 2426484208226890587, 10916182427754190208, 208295785334160234, 1, 0, 0, 0, 1, 0, 16765618494244376401, 5081092756681378539, 13872457506768069988, 4529776878769021619, 169695422976636841, 9233870580127604406, 15207411620676648511, 16719606593630884665, 11029884787275710886, 5442307944523583224, 2816716335908718574, 1718675228113159248, 14980454155356662645, 2197742477585333602, 13322595239551652280, 1, 0, 0, 0, 1, 0, 13714635581333797590, 1976182429811709209, 5257242985435580561, 14057252888063062893, 8215766650263520356, 9037700404196650899, 10815732145433955496, 6575555704765488965, 7946539915965721335, 17774723700903466966, 1438935019962455534, 7272994976566716580, 17414628586841602406, 7615091160766850619, 17297950766482640011, 1, 0, 0, 0, 1, 0, 5178157714855210142, 0, 0, 9776318485951152693, 12890305973496102809, 15372246715962319753, 4407166322243232537, 8211250723004787137, 16732929992769459335, 5078948249831860209, 10360494843504659614, 15218257307939313170, 9391735730020210762, 18265959195035569409, 13953265341705633702, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14580812564900766592, 15861640058126249653, 14882250288085472215, 2674423901749705077, 17915715126849699543, 7467959617957012266, 11754602214149170613, 4296220331020841697, 1975418926721182099, 2701106116508976741, 12264490131121739608, 14232230927042798671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6012095218278392893, 14517213901488835116, 10288285656672707851, 3504222453682520691, 12433676256235881077, 9462884495447906259, 1831143805055270726, 13555983847490106392, 12089371041955731221, 1898134322103701335, 16106017656155713552, 6488214721912194407, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12583880807825187559, 6582109139928846076, 11046557109431487119, 2024557484059292221, 7933147088254086263, 17277989807306885144, 14579426980777214583, 10974207239020571710, 15888265955091463133, 12702609090402714686, 1042562102193278240, 10956084748384074170, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 0, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 0, 1, 0, 0, 0, 13, 4294967292, 0, 1, 12, 0, 0, 2147483648, 0, 13, 0, 11351842504255128813, 0, 65535, 16383, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 13, 2200, 4387, 6574, 8761, 10948, 13135, 15322, 16051, 16294, 16375, 16378, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 51, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 3, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_25.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_25.snap index 7989144c16..943e299594 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_25.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_25.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 0, 0, 0, 1, 1, 1, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 0, 0, 1, 0, 0, 0, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13398731741387911383, 10446875550887438149, 5572533910279649175, 13491880295779941671, 8698112979694512183, 126724644436205205, 12147025678885387063, 1552825087809033479, 2467314028170731200, 16216562119055243322, 18364539353432252959, 9694623828077467233, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1702596310854469483, 7588826506897155585, 2665502751151845058, 17558274388625518928, 1484832724912073400, 10241199256484865800, 1963067308825972547, 9447273069996733529, 16601393295490334589, 9113898857319116772, 1551875687645078236, 3675008886325466594, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5960531672215414966, 16730914921892092280, 3420041171743926975, 2846824553470173952, 17559905242927504135, 11710755472728257079, 4225984201120753953, 6419011263238967677, 410862426300963016, 17132700957014282816, 5908552039479525180, 9937899669773170043, 1, 0, 0, 0, 1, 0, 2018420705353333259, 9229172344109022227, 14345475894589655224, 14152498107176274636, 12511176149634059683, 13105841064724313047, 3523509076537079172, 8301224421374966792, 9814439449693896294, 1196744323913827820, 6692866018192235946, 6715125970066025284, 16961354324299843537, 13623916550628200923, 7849591422987652597, 1, 0, 0, 0, 1, 0, 15554140634930940730, 12149993956067977962, 12691178410278042977, 5800650255543088287, 12242421290212925246, 8706919134091371207, 9746772683078209435, 11307131702448115253, 12969767250590673327, 6686048917052134288, 16414416705576227412, 1613631742115437617, 4492424574001173259, 5891234840048028912, 10568464651116235631, 1, 0, 0, 0, 1, 0, 13619523926946942997, 13932701015699199040, 16282203144892365836, 288495594474105189, 2659747577123257435, 468662522013222574, 4777591649493566963, 4549622233314763492, 3609195066294253037, 15701263684091820063, 3487294253425873238, 1246482959663576649, 12151404659680738203, 9533885383398026397, 13349382737895871506, 1, 0, 0, 0, 1, 0, 15226961741359169238, 9668238623772378075, 18406869698288958124, 10304697226126818963, 17510270622758876933, 5208953037158023510, 13973483607215960244, 14889292305938541714, 17903436875856263069, 10456077510396891682, 10911204476854742317, 10767371226180010877, 2845921321939758123, 10207454088372242899, 10067581411407423596, 1, 0, 0, 0, 1, 0, 11007944782899320208, 9688656475445036579, 11072586067494939844, 7796778119718125747, 17430549031516796763, 17715598857116570054, 15890473733699877306, 11140388332008156040, 15437904745147545753, 9698983999555494854, 11853370831480580617, 13778778399918900014, 12400304789414303503, 16245042535546460743, 15913203609357376990, 1, 0, 0, 0, 1, 0, 15735266059006798772, 3801815209619718647, 4149362138393037094, 11043847812690714922, 15750016999752216538, 3526946062060894178, 17542926168179991242, 13488989169427894096, 1711823131760196898, 7279056890420718668, 907162566851125145, 14020627064222792913, 6600097648382112815, 2667361456561557318, 17219034350459931223, 1, 0, 0, 0, 1, 0, 2879545791821313481, 1259493953867425253, 11021794342469225424, 16409243384953073963, 8823739942223974350, 1348240088196356067, 8826324103843911331, 12121966587219528787, 8947445239291587989, 794393058555157904, 7400519332304830077, 1437804116009572564, 10359847956037447171, 9185031367250188962, 3713349402354236945, 1, 0, 0, 0, 1, 0, 11365853094296287088, 0, 0, 9109780042108713794, 2025584296720659827, 9279746140911612054, 3536220024494542760, 8800758533265494982, 13269571463782090254, 12786208149678159110, 7328500979632536073, 12022435130037250391, 15247865541233938330, 6462695849105922235, 10616453538138359448, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15306362721670767113, 3678646409353890898, 3233112695116768266, 294092485488322279, 6765154775891776468, 17267661857179267882, 10374412076721466090, 6984573596316331699, 433966021407007016, 2869001919576405519, 4895010392763653973, 3058320693955246873, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2730832614768234730, 10191942812097658700, 1858231082388626584, 12149225804903469645, 15354276103682076009, 10036416896754782473, 10797782388389379392, 14977076517134741377, 17962467459011056432, 17417648807118850139, 14926331475286732296, 4965950384458944745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 479016032615721743, 1453528547827258310, 17742257866254572336, 3036839951080750932, 7645122244202370271, 18012966148946012188, 14917361677919134410, 16254221298013000537, 2310073430536633551, 14370760106653398402, 13033597008762597331, 16872816814243270280, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4194228403373198226, 17446294671039685780, 16018419181163655201, 16046055491183908407, 3149648302915651279, 5535026374122183926, 638510963943763558, 11838988982732965160, 4659330917232488313, 9155393387906219784, 3236590870033651606, 11961896515966597756, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4321424756204952178, 12180657588796280274, 16144413208110066321, 6937908670684349781, 2183945468601797792, 15092496102668051355, 18152457079207292292, 8838579915162662604, 18368728739119945660, 13386503743719781199, 18316422071602565784, 4654018437841213862, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17106991433953495229, 3901851127268644692, 12517012706582615280, 9428962583778419369, 13296390406171247483, 257473274985355223, 13178378367745074892, 9645282237960382599, 6368972875636062959, 2643395754600898300, 15701603594857309722, 5272790938970678408, 1, 0, 0, 0, 1, 0, 8354096936197882314, 12164220337553977958, 17378238272422563267, 480007043786623808, 15132938321031306327, 17466716576309862393, 12671344758477488595, 1854573623301018325, 10260436313437728882, 13292769663331639140, 1452793205233705375, 4707200061081251786, 8948310776749535742, 5947972608122843521, 4281766794113009188, 1, 0, 0, 0, 1, 0, 6138730842224758627, 11686086623819538808, 14590719856456710457, 7837641036032671415, 12010127700996563076, 15879773433331271008, 2133167353214657976, 4773455775437745378, 10299240179448618610, 6045651321104574873, 6462510494810546740, 13659284260102405271, 17164574292834012429, 10936885931162702722, 17886680608631893125, 1, 0, 0, 0, 1, 0, 3162794119795435989, 4562834728889875846, 6107962147992612292, 8465759122953264103, 1665683881724788425, 17940570471380392799, 3223264940814324611, 332137947454970287, 8209352310311089013, 265277838027200178, 6187212959913925984, 6075821593933813225, 1499535172174489924, 9418660414070260899, 13746660795296557163, 1, 0, 0, 0, 1, 0, 12162889168802937247, 15401019179307093351, 9535864432215440062, 9771451080159159411, 1484367395490874035, 4502835184975000914, 11663083613788432971, 7803450627715630286, 5035373507226681389, 6225168341521517925, 14540441677731288899, 13120146179040509426, 16357468590797302295, 12493684045311157256, 7270036416424823086, 1, 0, 0, 0, 1, 0, 11474756587763645750, 12425880873394014153, 6096335841451385157, 17765926817646991510, 16052656468702535281, 4179930870000296671, 11139084033219732849, 4739616627721376242, 2504937998242193140, 3231597075356238257, 17657306689192164966, 10747531529265802304, 2426484208226890587, 10916182427754190208, 208295785334160234, 1, 0, 0, 0, 1, 0, 16765618494244376401, 5081092756681378539, 13872457506768069988, 4529776878769021619, 169695422976636841, 9233870580127604406, 15207411620676648511, 16719606593630884665, 11029884787275710886, 5442307944523583224, 2816716335908718574, 1718675228113159248, 14980454155356662645, 2197742477585333602, 13322595239551652280, 1, 0, 0, 0, 1, 0, 13714635581333797590, 1976182429811709209, 5257242985435580561, 14057252888063062893, 8215766650263520356, 9037700404196650899, 10815732145433955496, 6575555704765488965, 7946539915965721335, 17774723700903466966, 1438935019962455534, 7272994976566716580, 17414628586841602406, 7615091160766850619, 17297950766482640011, 1, 0, 0, 0, 1, 0, 5178157714855210142, 0, 0, 9776318485951152693, 12890305973496102809, 15372246715962319753, 4407166322243232537, 8211250723004787137, 16732929992769459335, 5078948249831860209, 10360494843504659614, 15218257307939313170, 9391735730020210762, 18265959195035569409, 13953265341705633702, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14580812564900766592, 15861640058126249653, 14882250288085472215, 2674423901749705077, 17915715126849699543, 7467959617957012266, 11754602214149170613, 4296220331020841697, 1975418926721182099, 2701106116508976741, 12264490131121739608, 14232230927042798671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6012095218278392893, 14517213901488835116, 10288285656672707851, 3504222453682520691, 12433676256235881077, 9462884495447906259, 1831143805055270726, 13555983847490106392, 12089371041955731221, 1898134322103701335, 16106017656155713552, 6488214721912194407, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12583880807825187559, 6582109139928846076, 11046557109431487119, 2024557484059292221, 7933147088254086263, 17277989807306885144, 14579426980777214583, 10974207239020571710, 15888265955091463133, 12702609090402714686, 1042562102193278240, 10956084748384074170, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 1, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 1, 1, 0, 0, 0, 13, 4294967292, 0, 1, 12, 0, 0, 2147483648, 0, 13, 0, 11351842504255128813, 0, 65535, 16383, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 13, 2200, 4387, 6574, 8761, 10948, 13135, 15322, 16051, 16294, 16375, 16378, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 51, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 3, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 1, 1, 0, 1, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 7, 0, 0, 0, 0, 1, 1, 1, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 13, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 5, 0, 0, 0, 0, 1, 1, 1, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 0, 0, 1, 0, 0, 1, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 0, 0, 1, 0, 0, 1, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13398731741387911383, 10446875550887438149, 5572533910279649175, 13491880295779941671, 8698112979694512183, 126724644436205205, 12147025678885387063, 1552825087809033479, 2467314028170731200, 16216562119055243322, 18364539353432252959, 9694623828077467233, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1702596310854469483, 7588826506897155585, 2665502751151845058, 17558274388625518928, 1484832724912073400, 10241199256484865800, 1963067308825972547, 9447273069996733529, 16601393295490334589, 9113898857319116772, 1551875687645078236, 3675008886325466594, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5960531672215414966, 16730914921892092280, 3420041171743926975, 2846824553470173952, 17559905242927504135, 11710755472728257079, 4225984201120753953, 6419011263238967677, 410862426300963016, 17132700957014282816, 5908552039479525180, 9937899669773170043, 1, 0, 0, 0, 1, 0, 2018420705353333259, 9229172344109022227, 14345475894589655224, 14152498107176274636, 12511176149634059683, 13105841064724313047, 3523509076537079172, 8301224421374966792, 9814439449693896294, 1196744323913827820, 6692866018192235946, 6715125970066025284, 16961354324299843537, 13623916550628200923, 7849591422987652597, 1, 0, 0, 0, 1, 0, 15554140634930940730, 12149993956067977962, 12691178410278042977, 5800650255543088287, 12242421290212925246, 8706919134091371207, 9746772683078209435, 11307131702448115253, 12969767250590673327, 6686048917052134288, 16414416705576227412, 1613631742115437617, 4492424574001173259, 5891234840048028912, 10568464651116235631, 1, 0, 0, 0, 1, 0, 13619523926946942997, 13932701015699199040, 16282203144892365836, 288495594474105189, 2659747577123257435, 468662522013222574, 4777591649493566963, 4549622233314763492, 3609195066294253037, 15701263684091820063, 3487294253425873238, 1246482959663576649, 12151404659680738203, 9533885383398026397, 13349382737895871506, 1, 0, 0, 0, 1, 0, 15226961741359169238, 9668238623772378075, 18406869698288958124, 10304697226126818963, 17510270622758876933, 5208953037158023510, 13973483607215960244, 14889292305938541714, 17903436875856263069, 10456077510396891682, 10911204476854742317, 10767371226180010877, 2845921321939758123, 10207454088372242899, 10067581411407423596, 1, 0, 0, 0, 1, 0, 11007944782899320208, 9688656475445036579, 11072586067494939844, 7796778119718125747, 17430549031516796763, 17715598857116570054, 15890473733699877306, 11140388332008156040, 15437904745147545753, 9698983999555494854, 11853370831480580617, 13778778399918900014, 12400304789414303503, 16245042535546460743, 15913203609357376990, 1, 0, 0, 0, 1, 0, 15735266059006798772, 3801815209619718647, 4149362138393037094, 11043847812690714922, 15750016999752216538, 3526946062060894178, 17542926168179991242, 13488989169427894096, 1711823131760196898, 7279056890420718668, 907162566851125145, 14020627064222792913, 6600097648382112815, 2667361456561557318, 17219034350459931223, 1, 0, 0, 0, 1, 0, 2879545791821313481, 1259493953867425253, 11021794342469225424, 16409243384953073963, 8823739942223974350, 1348240088196356067, 8826324103843911331, 12121966587219528787, 8947445239291587989, 794393058555157904, 7400519332304830077, 1437804116009572564, 10359847956037447171, 9185031367250188962, 3713349402354236945, 1, 0, 0, 0, 1, 0, 11365853094296287088, 0, 0, 9109780042108713794, 2025584296720659827, 9279746140911612054, 3536220024494542760, 8800758533265494982, 13269571463782090254, 12786208149678159110, 7328500979632536073, 12022435130037250391, 15247865541233938330, 6462695849105922235, 10616453538138359448, 1, 0, 0, 0, 1, 0, 0, 0, 0, 15306362721670767113, 3678646409353890898, 3233112695116768266, 294092485488322279, 6765154775891776468, 17267661857179267882, 10374412076721466090, 6984573596316331699, 433966021407007016, 2869001919576405519, 4895010392763653973, 3058320693955246873, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2730832614768234730, 10191942812097658700, 1858231082388626584, 12149225804903469645, 15354276103682076009, 10036416896754782473, 10797782388389379392, 14977076517134741377, 17962467459011056432, 17417648807118850139, 14926331475286732296, 4965950384458944745, 1, 0, 0, 0, 1, 0, 0, 0, 0, 479016032615721743, 1453528547827258310, 17742257866254572336, 3036839951080750932, 7645122244202370271, 18012966148946012188, 14917361677919134410, 16254221298013000537, 2310073430536633551, 14370760106653398402, 13033597008762597331, 16872816814243270280, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 15666451408857108222, 5229864730287063918, 4435027266040030689, 5001523311460849924, 16159283724457640221, 11118838785729522730, 7576593531686797042, 6712929990112816841, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16253482711025978099, 5751576643258238090, 7110029021941723513, 3208043314804619251, 18130890293586930078, 10452764368937945515, 9114363797835460134, 6104172690014223231, 1560947813056021755, 9302012295643728416, 7519454690376123692, 17781582622500481192, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16690839578921925157, 7830268710878889486, 10115409991715085575, 6920597847411412414, 18252951749527557342, 6969997263492352670, 5446076396314160376, 3119855977255645286, 6935064976442414148, 424328237663665361, 7627104070861575574, 12847902632736061277, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11755424915479552417, 4868320831660690795, 11428668827299215140, 17985619796195836408, 4460903658820341507, 15570786589164252178, 12863008906537145423, 2700229040680838768, 9999441144135002932, 17748121622218558811, 17604686071836489236, 12021499907877242591, 1, 0, 0, 0, 1, 0, 4447686994046778179, 11785000236654418865, 10679155400143926564, 17934377671577204140, 7042762868047858013, 4015039023438705588, 11907191178709112742, 859505755654562117, 16136993048454358354, 10008421878335836436, 4228220371303630837, 10354700837586583171, 6681769685034042719, 14277148259130460564, 16751519355106661703, 1, 0, 0, 0, 1, 0, 217106376514171653, 11707313943908545641, 15092932467239161061, 11049594146888643723, 7267371538363991280, 8421627027326523148, 9466912758182965715, 11174658189737631113, 12296464969648251345, 7266552182027361169, 15522155400452634037, 4735711626023545756, 13982878080104642188, 17307771294890409643, 2969703856153678454, 1, 0, 0, 0, 1, 0, 11044550050665632476, 8958367422149199561, 16497379967830959424, 9105126057127804171, 13427183447069512151, 15171283498151438808, 1953587265841775225, 9636744945302995714, 18126939303114916528, 8791105532651972211, 13664486701019622043, 2809204122464618686, 7309352233404946366, 2933551330348935458, 12987934619706800857, 1, 0, 0, 0, 1, 0, 1877907417051268915, 6151364593092129113, 13049072304454003157, 14569284676797348998, 6517696895688418945, 14662750186533371679, 16069841829669607101, 1490539036394497080, 9033882039108268313, 11281913023757770338, 6092037682822283700, 10868401885487323501, 12870260590513220077, 10624425952582111111, 2172600571554701126, 1, 0, 0, 0, 1, 0, 10197860193367132813, 18317591232122268101, 11864893253666570624, 2835737623710330612, 12960707821770488929, 11079168775731474830, 1560700914733041660, 7731471377060742735, 6301009824137139871, 10181825490691565485, 1893419523737526751, 4027411046406207040, 8260391000410661595, 17874287708894504070, 14997664071320688070, 1, 0, 0, 0, 1, 0, 7903888723576875237, 18382523577454102436, 13167437966520740716, 15482419984058848245, 7634329044629047826, 7042468264080735391, 6200990949184863170, 13733877647296302634, 10330363517752279308, 8463471033597650592, 9636585409664050258, 1846469577394958972, 7640841583197908852, 911970190394256131, 3566552483989599402, 1, 0, 0, 0, 1, 0, 2186301169863059887, 6122215293275160143, 16696916221087249943, 5297995970636059087, 6007758954686348362, 4655654314239637986, 1006207264024395366, 15572658687280648106, 7189713532379018536, 2112404415880305855, 2136665268102207704, 2885718226990976376, 10688417071827877337, 14924823153427050614, 7087476601458867917, 1, 0, 0, 0, 1, 0, 4350099661540135647, 0, 0, 770728251595531533, 434120282701603474, 899748567092010447, 14918729158665343812, 16808111015808513609, 7424874700566577356, 17448147405455891940, 4462464721020457233, 13212275138420405274, 3040692668058239811, 16335725686098559697, 14206292953735333262, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1347942901513492691, 5581285869985960561, 15417366235984526759, 380737719356524599, 12243901590027926887, 7052270251739242825, 654959311657763753, 7098417589530391109, 12234598862193668129, 7813293313258815644, 11437013713086863200, 6294107725304445883, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12086966446141742548, 6581368197537384623, 3331301994171189600, 12870561906904032245, 6559275936659510680, 17586339544079318164, 15404879372302137522, 15343623253038912080, 14653607410806008848, 15261763399945716285, 7627258546495067733, 9537940691512987143, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10239457018222882008, 17661012293298952642, 15814677761660135474, 6984680585936259437, 17224785255700525855, 14071176523136369481, 458610335793450516, 7762335122892638892, 2498958194485300229, 2258772319189190202, 18044191572661655945, 15535806100011306333, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1390310476158884261, 12282546735285148319, 11708893791522292939, 10310226363807226654, 3512215170452429648, 6756061023037720295, 16490279521751489469, 7080716573279759555, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 14319792288905293245, 11465345153771181037, 16104169334207009019, 2750797734633655770, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4194228403373198226, 17446294671039685780, 16018419181163655201, 16046055491183908407, 3149648302915651279, 5535026374122183926, 638510963943763558, 11838988982732965160, 4659330917232488313, 9155393387906219784, 3236590870033651606, 11961896515966597756, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4321424756204952178, 12180657588796280274, 16144413208110066321, 6937908670684349781, 2183945468601797792, 15092496102668051355, 18152457079207292292, 8838579915162662604, 18368728739119945660, 13386503743719781199, 18316422071602565784, 4654018437841213862, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17106991433953495229, 3901851127268644692, 12517012706582615280, 9428962583778419369, 13296390406171247483, 257473274985355223, 13178378367745074892, 9645282237960382599, 6368972875636062959, 2643395754600898300, 15701603594857309722, 5272790938970678408, 1, 0, 0, 0, 1, 0, 8354096936197882314, 12164220337553977958, 17378238272422563267, 480007043786623808, 15132938321031306327, 17466716576309862393, 12671344758477488595, 1854573623301018325, 10260436313437728882, 13292769663331639140, 1452793205233705375, 4707200061081251786, 8948310776749535742, 5947972608122843521, 4281766794113009188, 1, 0, 0, 0, 1, 0, 6138730842224758627, 11686086623819538808, 14590719856456710457, 7837641036032671415, 12010127700996563076, 15879773433331271008, 2133167353214657976, 4773455775437745378, 10299240179448618610, 6045651321104574873, 6462510494810546740, 13659284260102405271, 17164574292834012429, 10936885931162702722, 17886680608631893125, 1, 0, 0, 0, 1, 0, 3162794119795435989, 4562834728889875846, 6107962147992612292, 8465759122953264103, 1665683881724788425, 17940570471380392799, 3223264940814324611, 332137947454970287, 8209352310311089013, 265277838027200178, 6187212959913925984, 6075821593933813225, 1499535172174489924, 9418660414070260899, 13746660795296557163, 1, 0, 0, 0, 1, 0, 12162889168802937247, 15401019179307093351, 9535864432215440062, 9771451080159159411, 1484367395490874035, 4502835184975000914, 11663083613788432971, 7803450627715630286, 5035373507226681389, 6225168341521517925, 14540441677731288899, 13120146179040509426, 16357468590797302295, 12493684045311157256, 7270036416424823086, 1, 0, 0, 0, 1, 0, 11474756587763645750, 12425880873394014153, 6096335841451385157, 17765926817646991510, 16052656468702535281, 4179930870000296671, 11139084033219732849, 4739616627721376242, 2504937998242193140, 3231597075356238257, 17657306689192164966, 10747531529265802304, 2426484208226890587, 10916182427754190208, 208295785334160234, 1, 0, 0, 0, 1, 0, 16765618494244376401, 5081092756681378539, 13872457506768069988, 4529776878769021619, 169695422976636841, 9233870580127604406, 15207411620676648511, 16719606593630884665, 11029884787275710886, 5442307944523583224, 2816716335908718574, 1718675228113159248, 14980454155356662645, 2197742477585333602, 13322595239551652280, 1, 0, 0, 0, 1, 0, 13714635581333797590, 1976182429811709209, 5257242985435580561, 14057252888063062893, 8215766650263520356, 9037700404196650899, 10815732145433955496, 6575555704765488965, 7946539915965721335, 17774723700903466966, 1438935019962455534, 7272994976566716580, 17414628586841602406, 7615091160766850619, 17297950766482640011, 1, 0, 0, 0, 1, 0, 5178157714855210142, 0, 0, 9776318485951152693, 12890305973496102809, 15372246715962319753, 4407166322243232537, 8211250723004787137, 16732929992769459335, 5078948249831860209, 10360494843504659614, 15218257307939313170, 9391735730020210762, 18265959195035569409, 13953265341705633702, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14580812564900766592, 15861640058126249653, 14882250288085472215, 2674423901749705077, 17915715126849699543, 7467959617957012266, 11754602214149170613, 4296220331020841697, 1975418926721182099, 2701106116508976741, 12264490131121739608, 14232230927042798671, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6012095218278392893, 14517213901488835116, 10288285656672707851, 3504222453682520691, 12433676256235881077, 9462884495447906259, 1831143805055270726, 13555983847490106392, 12089371041955731221, 1898134322103701335, 16106017656155713552, 6488214721912194407, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12583880807825187559, 6582109139928846076, 11046557109431487119, 2024557484059292221, 7933147088254086263, 17277989807306885144, 14579426980777214583, 10974207239020571710, 15888265955091463133, 12702609090402714686, 1042562102193278240, 10956084748384074170, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240, 11509025001394472292, 1657723241998675022, 7525141456947324339, 4762963524641036906, 16091581530351759692, 16079373865472459546, 16047641734485800692, 17343413733132688543, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 40, 0, 0, 3, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 1, 0, 1, 1, 10, 0, 0, 0, 1, 0, 1, 1, 0, 40, 0, 0, 12, 3358534066525179769, 9365253138981608257, 4243893038989355703, 2372900269115514267, 9, 0, 4099276459869907627, 1, 10, 0, 0, 0, 1, 0, 0, 0, 13, 4294967292, 0, 1, 12, 0, 0, 2147483648, 0, 13, 0, 11351842504255128813, 0, 65535, 16383, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 13, 2200, 4387, 6574, 8761, 10948, 13135, 15322, 16051, 16294, 16375, 16378, 16381, 16382, 16383, 18570, 20757, 22944, 25131, 27318, 29505, 31692, 33879, 36066, 38253, 40440, 42627, 44814, 47001, 49188, 51375, 53562, 55749, 57936, 60123, 62310, 64497, 65226, 65469, 65496, 65523, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(18) }, program_info: ProgramInfo { program_hash: Word([4192437018821097220, 9480578168622006864, 4891889892170146481, 11712807151087072240]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 19, range_trace_len: 51, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 3, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_26.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_26.snap index 71ba4a50e2..9ef050bba1 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_26.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_26.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 0, 41, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 3261819110951294965, 2044213372194154011, 10091523089564062088, 12303199265142910504, 3073184512654327322, 1041809921369720709, 16698144525752928383, 3566999122524049164, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6811813611500970866, 9860311344216082483, 279816225750213135, 1439899159397533405, 4254579990847524851, 13079805966919738688, 6743125803107521679, 4681956701739972184, 7418486580310857761, 7994119771983090684, 13498446627995378981, 12442366360197298238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12330218901740233931, 4356844177334189800, 3650402777016745376, 14727094498238943916, 17114576923598071233, 12218492589526939611, 1867163304908812007, 3297507518564977562, 17019749743168160467, 1155757367334915164, 6649809143130705797, 6098667720777990098, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16287800225917557614, 8724150062868049447, 1781472746866786234, 10746359213734270257, 14501968992007296006, 1562069618543971026, 1669000574108639518, 10978317254779656082, 4937487787523099272, 14020255521522346779, 9522654220689816851, 15014871424912942550, 1, 0, 0, 0, 1, 0, 14877174880820946473, 17456558212836048017, 17739158337269775126, 2390658038828763199, 3846911055059526201, 10113987313323159199, 1223812058834541930, 7693932549469059792, 952986602744509450, 3582028644269610893, 18354142145846877062, 9870317658000082520, 17824815497741664585, 7559480440412863769, 15008680935203256586, 1, 0, 0, 0, 1, 0, 13977067499243959482, 11395256034671298845, 7327799218104320227, 2699367049541735206, 7763338432894318220, 30358156203896034, 6743090978755405998, 12027612752909244618, 2303575863276843576, 13566879202183211144, 14991347734816807516, 15545533182903182788, 3824341730458112374, 8930056613191782368, 10887298179723462085, 1, 0, 0, 0, 1, 0, 8858901812137030682, 13558987077266275339, 15564429589094530081, 5734803687955113279, 15092595329879644577, 1697370376582801763, 13966013418513317366, 15212529265532680398, 11814345067449767109, 12248403740758614702, 13253613960908137010, 13069247508460875244, 5646668393535724753, 12836057040498431452, 6132850845308416918, 1, 0, 0, 0, 1, 0, 3289076678693837113, 3306415136959427537, 4595381067892187327, 15617193812494172197, 13969944955380272714, 2151092097708635255, 9308934663460035993, 17701622526704384546, 10643130636190759117, 10608583573536775206, 2924854172257996410, 16966215805924461950, 11523838157115606042, 13766601347831535388, 15461729627686219061, 1, 0, 0, 0, 1, 0, 2861046167966645052, 10889239779607274128, 17320053671944779813, 3406927099241203725, 4689628285093180625, 8991051645303444091, 15420175838347825984, 10581163748471525208, 2494640429618639710, 5287408014276309700, 12153757963762118208, 8235209133198882488, 16153951788992043302, 6738693051085880966, 17758791276367026584, 1, 0, 0, 0, 1, 0, 10308255496352503262, 18121871418048845228, 15889419620549458343, 10343975768128176185, 1524422576558323017, 10037026397378548640, 11821902144147060712, 11001907572334629439, 15808731023964574299, 9790979724735385269, 15700324760341857643, 17774065041915838082, 10370417002357863310, 14069036937855587505, 12405462687145854473, 1, 0, 0, 0, 1, 0, 11515575222719100082, 3607722074361327345, 10538200152279946362, 3757345954094976880, 3511571172448102031, 18213897356329070177, 10064659859509677191, 724394552750888620, 1595171953489970254, 11073532118063625032, 9731412496448089833, 5891290976833577870, 11096622266210541923, 1899062451757954377, 8384214154009398478, 1, 0, 0, 0, 1, 0, 5623476244212125463, 0, 0, 11387279664761561894, 16119779393022010645, 12476469095199609689, 3278355048806054125, 11468668142758644503, 4997071000317359325, 17451936898459652544, 16157291854026127596, 2945651218563202825, 11746170412650491065, 7698809547406684914, 18261819862243438027, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12664138717389652380, 16373019178487693626, 5311930945536331644, 4616652429570306671, 2671393322368710032, 7020445890779083806, 15646972017585065174, 16340142805513243131, 2481092360881257830, 6535987403990440638, 3104393142368480565, 17079185842171546000, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8299034149894841811, 13423474518210064130, 7223353560134237057, 3777113587480581710, 1059544940949021637, 13774982404484476980, 8948369964312160088, 13982894413446367987, 10656699665804756215, 10122156746538229970, 7738728989754721313, 2573099324947734045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141583402420192864, 10379152206886126257, 13509433978352760019, 7620976189553973499, 18127894597596272634, 17184349270149775183, 12421841574297279117, 16491357058269217705, 2380753665748314674, 3728282910211741030, 4802195899845329288, 9396372422985936818, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6465560042516376876, 10751299519219102331, 6829597264991376521, 10079854000224610696, 6424017883760389900, 9495085361050600704, 3654621520649551024, 7914176922452123947, 4729837691331628860, 13366748441350673725, 12717828147245365778, 3287860802649270664, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16331008790693949850, 3856188963254020539, 7276367259939934310, 5386106271938997570, 6741329107631246959, 3391853806089667516, 7030657201005151820, 1643778320524415517, 1674634776332752145, 18052526731898170651, 16006362017165978748, 7152349585903556000, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6970683036804102439, 4769583868215503893, 4372128272177755375, 13529324029352761767, 2996250744135171229, 13729765936120520417, 7637363889880507326, 1728436561347785451, 7613188931468803736, 16785850119445204235, 16947261939602052576, 3064107934796899020, 1, 0, 0, 0, 1, 0, 12484506945223374059, 13798899377595454603, 15630174643971648065, 8497009269728596384, 244163607749525539, 13867864482574853380, 1658368978401400644, 11762321965912593392, 141485484147552889, 315282984146600331, 1408159065058053807, 645295908479301016, 17347247651058160235, 16534966660444334749, 7381693478918306831, 1, 0, 0, 0, 1, 0, 16880783619726628794, 4072438451438385394, 16451846751784462158, 2851620155234231146, 1446211823843582468, 13816377619801393141, 16408636790989999614, 9455401689567173595, 1439539174789061366, 13156326072595205886, 6030138189777334274, 6689083876929965918, 10990776668153918653, 804393087582707009, 705831048107886313, 1, 0, 0, 0, 1, 0, 16422957004609039675, 8426497859765948943, 11608582623132668527, 15495282497840653987, 6283226934869114102, 8130570750653425723, 12665328444727065725, 14002540095489523576, 309044684967905465, 15996466154888710009, 9510849878170612681, 2073776435788654133, 16193884857588698661, 6796181761165706510, 16774441650532541635, 1, 0, 0, 0, 1, 0, 13469000803554410638, 16240303874937126514, 8576418966068956289, 14225437221510868328, 14429029577374864048, 14398424816766135464, 3702021734644395951, 16090845688839933396, 5353983225038020876, 15172043069041220075, 18079653246948800863, 14606979696091412365, 13583314662851581779, 4025150260536840913, 1805352044388884357, 1, 0, 0, 0, 1, 0, 5818515005300781607, 14956639713668542674, 13632325391818316617, 8625575291436195558, 8418933870535928003, 14805102781885121051, 4525525454001958153, 761594659039248271, 584139155794109734, 8794979035614942225, 4069919206893812430, 9365831893597231271, 11904135334311579620, 14452440347418879120, 2754923086646275489, 1, 0, 0, 0, 1, 0, 14229374278813002744, 9131839128802060332, 6833211359926822669, 585466765571734889, 8007220776657207831, 10039237550878760371, 4523823347492887021, 13117220339118972087, 14451576196834978134, 16422680862829694082, 15302642370914668430, 13960461272960093645, 14645975772268327665, 5958131302596194806, 12341254189464639727, 1, 0, 0, 0, 1, 0, 11789502593543293339, 9376057554008896475, 4023925612208030114, 15397869777828729446, 2039526413662718418, 9059653401043810135, 6654503633133174944, 18344680919635320495, 2740918710541851833, 7298980622174255274, 8102419126297897135, 10167800255227906082, 7049611109336029555, 2571437932894054501, 5794920505966185319, 1, 0, 0, 0, 1, 0, 4023894446217307196, 0, 0, 14219322642025824233, 16894861457913198121, 7049306369106895867, 5021320952913191057, 2181822407068201872, 414394141903116109, 3792000010759110764, 11229756891578734264, 1998678292085591025, 5758188707877290663, 8014024215551803682, 10216538963378596370, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2441238758278104147, 553494724036872290, 11522074935679212862, 14978021216926555772, 16350540043631590898, 17390992297262099104, 12846460123869708560, 2384358946534123926, 12102928269928850518, 3650051887228749294, 8114639632202749987, 16624551875599356960, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2775370016004740491, 13690090054816609773, 12318001418161393796, 7066479221415084403, 1702177008576096978, 2087983965311367455, 7614720757886491626, 8422791455791464432, 2245777887379330575, 2591620200177413535, 1351582854755852759, 4389250045279167249, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14369612123276038546, 10710009389473682712, 4090852078585609018, 6595027110114265051, 9457579135023296174, 746869062219182741, 15097645659347780347, 4547363727573445852, 9356606797863555676, 6408924248829769611, 17425991862702377038, 1839559312650246696, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 3261819110951294965, 2044213372194154011, 10091523089564062088, 12303199265142910504, 3073184512654327322, 1041809921369720709, 16698144525752928383, 3566999122524049164, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 0, 41, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 3261819110951294965, 2044213372194154011, 10091523089564062088, 12303199265142910504, 3073184512654327322, 1041809921369720709, 16698144525752928383, 3566999122524049164, 0, 0, 1, 0, 0, 1, 1, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6811813611500970866, 9860311344216082483, 279816225750213135, 1439899159397533405, 4254579990847524851, 13079805966919738688, 6743125803107521679, 4681956701739972184, 7418486580310857761, 7994119771983090684, 13498446627995378981, 12442366360197298238, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12330218901740233931, 4356844177334189800, 3650402777016745376, 14727094498238943916, 17114576923598071233, 12218492589526939611, 1867163304908812007, 3297507518564977562, 17019749743168160467, 1155757367334915164, 6649809143130705797, 6098667720777990098, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16287800225917557614, 8724150062868049447, 1781472746866786234, 10746359213734270257, 14501968992007296006, 1562069618543971026, 1669000574108639518, 10978317254779656082, 4937487787523099272, 14020255521522346779, 9522654220689816851, 15014871424912942550, 1, 0, 0, 0, 1, 0, 14877174880820946473, 17456558212836048017, 17739158337269775126, 2390658038828763199, 3846911055059526201, 10113987313323159199, 1223812058834541930, 7693932549469059792, 952986602744509450, 3582028644269610893, 18354142145846877062, 9870317658000082520, 17824815497741664585, 7559480440412863769, 15008680935203256586, 1, 0, 0, 0, 1, 0, 13977067499243959482, 11395256034671298845, 7327799218104320227, 2699367049541735206, 7763338432894318220, 30358156203896034, 6743090978755405998, 12027612752909244618, 2303575863276843576, 13566879202183211144, 14991347734816807516, 15545533182903182788, 3824341730458112374, 8930056613191782368, 10887298179723462085, 1, 0, 0, 0, 1, 0, 8858901812137030682, 13558987077266275339, 15564429589094530081, 5734803687955113279, 15092595329879644577, 1697370376582801763, 13966013418513317366, 15212529265532680398, 11814345067449767109, 12248403740758614702, 13253613960908137010, 13069247508460875244, 5646668393535724753, 12836057040498431452, 6132850845308416918, 1, 0, 0, 0, 1, 0, 3289076678693837113, 3306415136959427537, 4595381067892187327, 15617193812494172197, 13969944955380272714, 2151092097708635255, 9308934663460035993, 17701622526704384546, 10643130636190759117, 10608583573536775206, 2924854172257996410, 16966215805924461950, 11523838157115606042, 13766601347831535388, 15461729627686219061, 1, 0, 0, 0, 1, 0, 2861046167966645052, 10889239779607274128, 17320053671944779813, 3406927099241203725, 4689628285093180625, 8991051645303444091, 15420175838347825984, 10581163748471525208, 2494640429618639710, 5287408014276309700, 12153757963762118208, 8235209133198882488, 16153951788992043302, 6738693051085880966, 17758791276367026584, 1, 0, 0, 0, 1, 0, 10308255496352503262, 18121871418048845228, 15889419620549458343, 10343975768128176185, 1524422576558323017, 10037026397378548640, 11821902144147060712, 11001907572334629439, 15808731023964574299, 9790979724735385269, 15700324760341857643, 17774065041915838082, 10370417002357863310, 14069036937855587505, 12405462687145854473, 1, 0, 0, 0, 1, 0, 11515575222719100082, 3607722074361327345, 10538200152279946362, 3757345954094976880, 3511571172448102031, 18213897356329070177, 10064659859509677191, 724394552750888620, 1595171953489970254, 11073532118063625032, 9731412496448089833, 5891290976833577870, 11096622266210541923, 1899062451757954377, 8384214154009398478, 1, 0, 0, 0, 1, 0, 5623476244212125463, 0, 0, 11387279664761561894, 16119779393022010645, 12476469095199609689, 3278355048806054125, 11468668142758644503, 4997071000317359325, 17451936898459652544, 16157291854026127596, 2945651218563202825, 11746170412650491065, 7698809547406684914, 18261819862243438027, 1, 0, 0, 0, 1, 0, 0, 0, 0, 12664138717389652380, 16373019178487693626, 5311930945536331644, 4616652429570306671, 2671393322368710032, 7020445890779083806, 15646972017585065174, 16340142805513243131, 2481092360881257830, 6535987403990440638, 3104393142368480565, 17079185842171546000, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8299034149894841811, 13423474518210064130, 7223353560134237057, 3777113587480581710, 1059544940949021637, 13774982404484476980, 8948369964312160088, 13982894413446367987, 10656699665804756215, 10122156746538229970, 7738728989754721313, 2573099324947734045, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4141583402420192864, 10379152206886126257, 13509433978352760019, 7620976189553973499, 18127894597596272634, 17184349270149775183, 12421841574297279117, 16491357058269217705, 2380753665748314674, 3728282910211741030, 4802195899845329288, 9396372422985936818, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 16116071169182046485, 13243492223453509904, 11600144893983875756, 8055423479702674738, 14226887805014239710, 5183721621480304370, 14925669435061449558, 6899349384621454800, 1, 0, 0, 0, 1, 0, 0, 0, 0, 665741763369239996, 5831108162926480783, 7330889791923421278, 13218130135561237014, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6465560042516376876, 10751299519219102331, 6829597264991376521, 10079854000224610696, 6424017883760389900, 9495085361050600704, 3654621520649551024, 7914176922452123947, 4729837691331628860, 13366748441350673725, 12717828147245365778, 3287860802649270664, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16331008790693949850, 3856188963254020539, 7276367259939934310, 5386106271938997570, 6741329107631246959, 3391853806089667516, 7030657201005151820, 1643778320524415517, 1674634776332752145, 18052526731898170651, 16006362017165978748, 7152349585903556000, 1, 0, 0, 0, 1, 0, 0, 0, 0, 6970683036804102439, 4769583868215503893, 4372128272177755375, 13529324029352761767, 2996250744135171229, 13729765936120520417, 7637363889880507326, 1728436561347785451, 7613188931468803736, 16785850119445204235, 16947261939602052576, 3064107934796899020, 1, 0, 0, 0, 1, 0, 12484506945223374059, 13798899377595454603, 15630174643971648065, 8497009269728596384, 244163607749525539, 13867864482574853380, 1658368978401400644, 11762321965912593392, 141485484147552889, 315282984146600331, 1408159065058053807, 645295908479301016, 17347247651058160235, 16534966660444334749, 7381693478918306831, 1, 0, 0, 0, 1, 0, 16880783619726628794, 4072438451438385394, 16451846751784462158, 2851620155234231146, 1446211823843582468, 13816377619801393141, 16408636790989999614, 9455401689567173595, 1439539174789061366, 13156326072595205886, 6030138189777334274, 6689083876929965918, 10990776668153918653, 804393087582707009, 705831048107886313, 1, 0, 0, 0, 1, 0, 16422957004609039675, 8426497859765948943, 11608582623132668527, 15495282497840653987, 6283226934869114102, 8130570750653425723, 12665328444727065725, 14002540095489523576, 309044684967905465, 15996466154888710009, 9510849878170612681, 2073776435788654133, 16193884857588698661, 6796181761165706510, 16774441650532541635, 1, 0, 0, 0, 1, 0, 13469000803554410638, 16240303874937126514, 8576418966068956289, 14225437221510868328, 14429029577374864048, 14398424816766135464, 3702021734644395951, 16090845688839933396, 5353983225038020876, 15172043069041220075, 18079653246948800863, 14606979696091412365, 13583314662851581779, 4025150260536840913, 1805352044388884357, 1, 0, 0, 0, 1, 0, 5818515005300781607, 14956639713668542674, 13632325391818316617, 8625575291436195558, 8418933870535928003, 14805102781885121051, 4525525454001958153, 761594659039248271, 584139155794109734, 8794979035614942225, 4069919206893812430, 9365831893597231271, 11904135334311579620, 14452440347418879120, 2754923086646275489, 1, 0, 0, 0, 1, 0, 14229374278813002744, 9131839128802060332, 6833211359926822669, 585466765571734889, 8007220776657207831, 10039237550878760371, 4523823347492887021, 13117220339118972087, 14451576196834978134, 16422680862829694082, 15302642370914668430, 13960461272960093645, 14645975772268327665, 5958131302596194806, 12341254189464639727, 1, 0, 0, 0, 1, 0, 11789502593543293339, 9376057554008896475, 4023925612208030114, 15397869777828729446, 2039526413662718418, 9059653401043810135, 6654503633133174944, 18344680919635320495, 2740918710541851833, 7298980622174255274, 8102419126297897135, 10167800255227906082, 7049611109336029555, 2571437932894054501, 5794920505966185319, 1, 0, 0, 0, 1, 0, 4023894446217307196, 0, 0, 14219322642025824233, 16894861457913198121, 7049306369106895867, 5021320952913191057, 2181822407068201872, 414394141903116109, 3792000010759110764, 11229756891578734264, 1998678292085591025, 5758188707877290663, 8014024215551803682, 10216538963378596370, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2441238758278104147, 553494724036872290, 11522074935679212862, 14978021216926555772, 16350540043631590898, 17390992297262099104, 12846460123869708560, 2384358946534123926, 12102928269928850518, 3650051887228749294, 8114639632202749987, 16624551875599356960, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2775370016004740491, 13690090054816609773, 12318001418161393796, 7066479221415084403, 1702177008576096978, 2087983965311367455, 7614720757886491626, 8422791455791464432, 2245777887379330575, 2591620200177413535, 1351582854755852759, 4389250045279167249, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14369612123276038546, 10710009389473682712, 4090852078585609018, 6595027110114265051, 9457579135023296174, 746869062219182741, 15097645659347780347, 4547363727573445852, 9356606797863555676, 6408924248829769611, 17425991862702377038, 1839559312650246696, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905, 3261819110951294965, 2044213372194154011, 10091523089564062088, 12303199265142910504, 3073184512654327322, 1041809921369720709, 16698144525752928383, 3566999122524049164, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 4374, 6561, 8748, 10935, 13122, 15309, 17496, 19683, 21870, 24057, 26244, 28431, 30618, 32805, 34992, 37179, 39366, 41553, 43740, 45927, 48114, 50301, 52488, 54675, 56862, 59049, 61236, 63423, 64152, 64881, 65124, 65367, 65448, 65529, 65532, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(10) }, program_info: ProgramInfo { program_hash: Word([7894050562420362676, 4416250439475247271, 2326332951934988565, 9381983878411686905]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 11, range_trace_len: 39, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 64, bitwise_chiplet_len: 0, memory_chiplet_len: 0, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_27.snap b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_27.snap index 27e08e8641..a2ba1b8ee6 100644 --- a/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_27.snap +++ b/processor/src/trace/parallel/snapshots/miden_processor__trace__parallel__tests__trace__parallel__tests__test_trace_generation_at_fragment_boundaries__case_27.snap @@ -2,4 +2,4 @@ source: processor/src/trace/parallel/tests.rs expression: DeterministicTrace(&trace_from_fragments) --- -ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 1, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [0, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 0, 0, 1, 0, 0, 0, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13342492399873323769, 4511615971967153504, 9085863547783897978, 13728083094831419091, 4968648927826019469, 12828040835569540857, 14858685484860085108, 11332670461359993442, 6031863247325663438, 10194964851803169917, 3020492374890726247, 14015299246960655077, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1439796670523758837, 11189511375577512439, 4029278259426396811, 5555139373262852832, 17195207199910519646, 15946070950510533025, 16638144790071955925, 14431967032738938661, 674016650738724202, 2476887483552371976, 15867024276402164724, 18240053740881435667, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2591609871503882494, 14523290705070057408, 16053154709446024998, 2905384006316447019, 6734621562241387182, 6868712626693654693, 14803289513390493682, 10393518078208184991, 9655491867310024790, 9610004573075108621, 2691485309401819348, 9264051620447261114, 1, 0, 0, 0, 1, 0, 16310674867943291767, 6055575173485499620, 12415403453461233454, 5919456033500076693, 11602649596278030541, 15730095788089532534, 12155959663009124293, 9715952180361858627, 16719465941571322506, 7947368985060100292, 2462224494429193628, 4753798685424869288, 4964236593939309395, 10383311521670833729, 3770835013589498382, 1, 0, 0, 0, 1, 0, 18087077157995694324, 16330777485816030986, 10063042555031126160, 5687909194194711965, 7973996941547777109, 7908104163460391198, 5239197399579256268, 15224252119305799711, 8574904634803746916, 2182109332887118586, 13071332837477200404, 1540176383869885892, 7961669463441676499, 6863497050423701439, 9055361938666247589, 1, 0, 0, 0, 1, 0, 16967670111924614213, 17486841943826861107, 18307481886056309438, 7941686916236651549, 3672880019205947738, 2236539493336923746, 5670979983981263850, 8194394828646838882, 15431555872184246136, 1087022739668739893, 7204946769828595498, 7978597004657283049, 15117861700401653408, 11135759119963236724, 14147095007921770778, 1, 0, 0, 0, 1, 0, 15248998622285712496, 1816831098907864072, 1977941839824239836, 10471520652203868473, 12969815742735761919, 12829755263022627333, 7984319522957739004, 12444330148186854115, 1895854814022398925, 7979854057356878352, 12651590612371699683, 10693788391520380705, 2168204218347522931, 10792639723427933554, 2008826339817234435, 1, 0, 0, 0, 1, 0, 1949341260302477275, 10525442150725175322, 10268663784703415650, 4586059525590481046, 10757916804785969985, 2326984138263422166, 5769086287272836702, 8680261223649739505, 9584551737159741567, 14209807647112141969, 10782010546727900871, 12476380710530844150, 264326996749206681, 9175748808845810742, 5723824967382588797, 1, 0, 0, 0, 1, 0, 13440535156983805468, 12080935995323460100, 9067005830434678477, 14314758709191331837, 1326425913004665964, 18320766430359725566, 13803823311240773956, 3919235389861209780, 4987801895818641338, 9475211165936098151, 6745878472543166577, 13055692992345669402, 16600930886850462534, 4020408003683484830, 2099106023167119258, 1, 0, 0, 0, 1, 0, 5892436324803940896, 7017064751240904271, 10317850206740106337, 16403500445172050158, 8998725782446855275, 15603212774947060210, 14994098977964244257, 12657319342943489784, 12145542090324719848, 17338503932931685384, 9012900451066906030, 7985393687855976209, 10163945784944658272, 14681340973312169871, 5885105447661412229, 1, 0, 0, 0, 1, 0, 13935905759807022949, 0, 0, 6981555831806437627, 3320646806195653797, 2577750295211676178, 15041604777168753281, 15743276195226846510, 18068871666013902057, 280994234174845985, 15850020848376370982, 17844212763579117389, 18181508983255172512, 418056849863168392, 13912537796384226859, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13711912288503888270, 502156843765695809, 360850050916534143, 10958079103202840999, 2778123425092199841, 13664544216029702565, 10293012497513243194, 2953143545478827927, 2456530167870834703, 10292737970295456228, 2666974936005298869, 2936046437280927758, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7425430573821419685, 13147348360138928114, 7183698983616787617, 17793074612839242130, 2613774562373586415, 1391392205806749871, 12632074680840502609, 9172592184988170325, 7343890316269580191, 632012914013142222, 14966813495153624489, 7163672760378086559, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16752277069679715408, 11903841834984596874, 9070535322622906244, 3601655880141993647, 1448060333031158668, 3418909895274525076, 12384471116364520725, 3259030218090439002, 6483315548845037473, 9098012027422757538, 13584072213050301608, 12965649133168865250, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4383606322674378669, 13264028927506398677, 4766776471757604196, 14660905060901389201, 12446750015896088802, 12927954860087459534, 14751589151467562513, 18208410790236506017, 8060897427763484267, 10391043349415287037, 7848268271641614303, 13621084556403650323, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11282929110176162954, 5896249534368220847, 12230245468863423579, 17357985657180629743, 10353774239160274935, 3759003303159369746, 3091073535594807983, 3398985649909830369, 15694315280551902473, 17044036436784806527, 1670964981039714496, 17078772340992927473, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17215248529293365853, 11382862066285680273, 18104224094677170296, 10490790376815116141, 11424271721157330669, 1148549753827007441, 17274728363719186424, 11870335859895317550, 15462035367190511759, 13171139175044072684, 12506995107569119516, 862170971660204027, 1, 0, 0, 0, 1, 0, 18208784611061899534, 11090107870009134382, 15816468029966600756, 13193227772306657556, 5436084715181539253, 15873409126341319274, 8856174280738574418, 15057005486179715954, 7129001791528740265, 6785780051417756764, 1782594595734670280, 16783127636073026773, 2094744771380247596, 16020980424362300069, 5676881743340217488, 1, 0, 0, 0, 1, 0, 3995660239591967986, 13991065272063476564, 4842320139602494012, 5492874275384737590, 9049442861863566881, 9007898958502691821, 9423711593310475409, 6387235594535598756, 7039074043166063940, 11491856728648046938, 5559192297727634984, 586150029444692874, 9272483157421678641, 11430895388638705560, 6521284656283570782, 1, 0, 0, 0, 1, 0, 10265417819422388610, 3230613796530740211, 8204482557338271208, 5965860733558915216, 3732227441816681926, 4972858056675247397, 15435624740876731287, 610949617653761740, 16413792935045431209, 11964718430105317483, 8697421447132597636, 7685703760533694936, 9520544349855559315, 16369319727902045750, 10481218501610762636, 1, 0, 0, 0, 1, 0, 4200148723083586126, 8898019494692638676, 9361391436000884061, 6906630570311142812, 10416842793286403595, 15154449156086880838, 17187582840477322187, 1667764180674112574, 11868526707386259660, 7310308994414837120, 37096681180297292, 1254987403839644538, 7281147841738764349, 16804807948024450931, 14191613402325013881, 1, 0, 0, 0, 1, 0, 6921512846940257894, 8083147322870350598, 7402338099048749868, 11028121748345672612, 9182929970775715030, 642245012387336876, 9940061963065628902, 677543792580138430, 5887036391937389613, 4972018469228063343, 9603988472267868801, 6207690803740787708, 1390751769269680465, 14779846517676698965, 4400313738036540825, 1, 0, 0, 0, 1, 0, 15720913686265040726, 11620345195770806393, 392865519522630483, 10866688391213961683, 4078956937078417294, 8169860993617536308, 13903556343063122489, 7226453148331774623, 12303475117195379639, 12980119595156137175, 2954837086209820968, 686805010274260483, 12922697597526240324, 2239891938742671995, 9798699259742823392, 1, 0, 0, 0, 1, 0, 1576291082626878936, 6836143998208741199, 5718769156293156294, 501346961392724628, 12301747922262729865, 7909458165142256993, 17643816943101201258, 739842910379542056, 14479451218433079532, 6627357084936364627, 6596157637386353039, 8706567413279745902, 4975249353684987436, 9576130314342554279, 8323169935435436763, 1, 0, 0, 0, 1, 0, 13015036049004182291, 0, 0, 3820689183586493894, 8535816953133153286, 12781603895645888322, 4895491920411997249, 6893839572721182305, 17259376159632543425, 7788172704304532836, 17444739644589522901, 15979424445015031332, 6966167031354634355, 5956660324772534609, 14233099751914870044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2862138511955678409, 2554244438665697829, 9129723360543316479, 16513197729164811328, 10619536471246139015, 11289943669462175698, 7818804555865981505, 4673396992430997118, 18261872069356847559, 8010670397007670803, 14891365206755013222, 17356025534910089368, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7758258992155315690, 6695383891040002341, 2424787611628537668, 4815287357290896051, 4063396021928247911, 10804772324353478999, 11573391963135759227, 5652365973964779246, 7568935938034555881, 871847630272290682, 833106187556617464, 2031310896521954322, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17115115516972321026, 9265251570417433175, 16343713044075599831, 3003012580421078075, 1116280449848444285, 17288383771256214060, 18390005084876364234, 14148401294484512817, 3939988349760901151, 18441078654886601219, 14690990432528119604, 16067965450256037769, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 40, 0, 0, 3, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 1, 0, 1, 1, 10, 0, 0, 1, 1, 0, 1, 1, 0, 40, 0, 0, 12, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 9, 0, 4099276459869907627, 1, 10, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 2197, 4384, 6571, 8758, 10945, 13132, 15319, 17506, 19693, 21880, 24067, 26254, 28441, 30628, 32815, 35002, 37189, 39376, 41563, 43750, 45937, 48124, 50311, 52498, 54685, 56872, 59059, 61246, 63433, 64162, 64891, 65134, 65377, 65458, 65485, 65512, 65521, 65530, 65533, 65534, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(19) }, program_info: ProgramInfo { program_hash: Word([9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 20, range_trace_len: 49, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 2, ace_chiplet_len: 0, kernel_rom_len: 0 } } } +ExecutionTrace { main_trace: MainTrace { storage: Parts { core_rm: [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 1, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 1, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 3137828705454, 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 1, 0, 24514286761, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 40, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 1, 4, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 191517865, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 5, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 1496233, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 6, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 11689, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 0, 0, 0, 0, 0, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 1, 0, 91, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 0, 0, 0, 0, 0, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 0, 0, 0, 0, 0, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 9, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 11, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 8, 1, 13, 0, 0, 0, 0, 0, 5, 0, 1, 1, 0, 1, 0, 1, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 1, 1, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 1, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 18, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0], chiplets_rm: [1, 1, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 0, 0, 1, 0, 0, 1, 1, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13342492399873323769, 4511615971967153504, 9085863547783897978, 13728083094831419091, 4968648927826019469, 12828040835569540857, 14858685484860085108, 11332670461359993442, 6031863247325663438, 10194964851803169917, 3020492374890726247, 14015299246960655077, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1439796670523758837, 11189511375577512439, 4029278259426396811, 5555139373262852832, 17195207199910519646, 15946070950510533025, 16638144790071955925, 14431967032738938661, 674016650738724202, 2476887483552371976, 15867024276402164724, 18240053740881435667, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2591609871503882494, 14523290705070057408, 16053154709446024998, 2905384006316447019, 6734621562241387182, 6868712626693654693, 14803289513390493682, 10393518078208184991, 9655491867310024790, 9610004573075108621, 2691485309401819348, 9264051620447261114, 1, 0, 0, 0, 1, 0, 16310674867943291767, 6055575173485499620, 12415403453461233454, 5919456033500076693, 11602649596278030541, 15730095788089532534, 12155959663009124293, 9715952180361858627, 16719465941571322506, 7947368985060100292, 2462224494429193628, 4753798685424869288, 4964236593939309395, 10383311521670833729, 3770835013589498382, 1, 0, 0, 0, 1, 0, 18087077157995694324, 16330777485816030986, 10063042555031126160, 5687909194194711965, 7973996941547777109, 7908104163460391198, 5239197399579256268, 15224252119305799711, 8574904634803746916, 2182109332887118586, 13071332837477200404, 1540176383869885892, 7961669463441676499, 6863497050423701439, 9055361938666247589, 1, 0, 0, 0, 1, 0, 16967670111924614213, 17486841943826861107, 18307481886056309438, 7941686916236651549, 3672880019205947738, 2236539493336923746, 5670979983981263850, 8194394828646838882, 15431555872184246136, 1087022739668739893, 7204946769828595498, 7978597004657283049, 15117861700401653408, 11135759119963236724, 14147095007921770778, 1, 0, 0, 0, 1, 0, 15248998622285712496, 1816831098907864072, 1977941839824239836, 10471520652203868473, 12969815742735761919, 12829755263022627333, 7984319522957739004, 12444330148186854115, 1895854814022398925, 7979854057356878352, 12651590612371699683, 10693788391520380705, 2168204218347522931, 10792639723427933554, 2008826339817234435, 1, 0, 0, 0, 1, 0, 1949341260302477275, 10525442150725175322, 10268663784703415650, 4586059525590481046, 10757916804785969985, 2326984138263422166, 5769086287272836702, 8680261223649739505, 9584551737159741567, 14209807647112141969, 10782010546727900871, 12476380710530844150, 264326996749206681, 9175748808845810742, 5723824967382588797, 1, 0, 0, 0, 1, 0, 13440535156983805468, 12080935995323460100, 9067005830434678477, 14314758709191331837, 1326425913004665964, 18320766430359725566, 13803823311240773956, 3919235389861209780, 4987801895818641338, 9475211165936098151, 6745878472543166577, 13055692992345669402, 16600930886850462534, 4020408003683484830, 2099106023167119258, 1, 0, 0, 0, 1, 0, 5892436324803940896, 7017064751240904271, 10317850206740106337, 16403500445172050158, 8998725782446855275, 15603212774947060210, 14994098977964244257, 12657319342943489784, 12145542090324719848, 17338503932931685384, 9012900451066906030, 7985393687855976209, 10163945784944658272, 14681340973312169871, 5885105447661412229, 1, 0, 0, 0, 1, 0, 13935905759807022949, 0, 0, 6981555831806437627, 3320646806195653797, 2577750295211676178, 15041604777168753281, 15743276195226846510, 18068871666013902057, 280994234174845985, 15850020848376370982, 17844212763579117389, 18181508983255172512, 418056849863168392, 13912537796384226859, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13711912288503888270, 502156843765695809, 360850050916534143, 10958079103202840999, 2778123425092199841, 13664544216029702565, 10293012497513243194, 2953143545478827927, 2456530167870834703, 10292737970295456228, 2666974936005298869, 2936046437280927758, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7425430573821419685, 13147348360138928114, 7183698983616787617, 17793074612839242130, 2613774562373586415, 1391392205806749871, 12632074680840502609, 9172592184988170325, 7343890316269580191, 632012914013142222, 14966813495153624489, 7163672760378086559, 1, 0, 0, 0, 1, 0, 0, 0, 0, 16752277069679715408, 11903841834984596874, 9070535322622906244, 3601655880141993647, 1448060333031158668, 3418909895274525076, 12384471116364520725, 3259030218090439002, 6483315548845037473, 9098012027422757538, 13584072213050301608, 12965649133168865250, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 6190635258012880107, 4840757955412667387, 14304772746964984975, 13670896049781213124, 9440211366785524370, 7698805642109006453, 17057575786157171701, 17131584050600476194, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13024110921086730221, 1131208899036558480, 18136552782870868471, 9594118340025725004, 1190658701913535022, 1352424102745866255, 4798141223555508282, 11702782905971311743, 18346837778669738664, 6496253015800789210, 13084260837127404333, 15909096041365347974, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3587442816163675215, 1667157010810320250, 952274539956745973, 16218246678075491818, 9371121588404883743, 13301242752201603536, 12962488577647927717, 8115486282645452027, 15130142357101091527, 18063315295058131399, 4018109146681745349, 18432189660917429733, 1, 0, 0, 0, 1, 0, 0, 0, 0, 512402747638547729, 2053960715201569301, 15933282259815262093, 11582919835122342747, 7133056533056999470, 5420135027930584396, 10133257770726709126, 16425371230714077552, 6726588340010678615, 14099326864720264780, 14498381569327145056, 2798890989547891271, 1, 0, 0, 0, 1, 0, 1146202597936876238, 5907497589537577326, 12401833826959750188, 9217956011885162917, 1526213270499333709, 9924516287334785738, 5661452934218108707, 7380100170229652082, 17078794493496835379, 332864556927106185, 10333496212804492507, 8394319278312203283, 16744359797696928029, 3778421823029569719, 10768372030970716894, 1, 0, 0, 0, 1, 0, 1909941408887978391, 15888660883255058425, 301654227516565330, 12846799727083908462, 1380252317064967448, 11816233963570869158, 1899963197709801965, 11125714198188567552, 13618468821889769363, 101015634312276042, 12880029163967100393, 14939877513325106589, 10579480970462933513, 1428985706412758663, 16024750973514577255, 1, 0, 0, 0, 1, 0, 13790262192006840807, 12747268767129483984, 15893046134662715133, 1720195204565087693, 664031068804619792, 17484213571014188868, 18354595702287703799, 834873962620943786, 9650238821992519861, 17762248064501548615, 1606019581379521796, 823113708878672797, 16129781670858537825, 3911680161282028629, 5067028895751058275, 1, 0, 0, 0, 1, 0, 7370492772357229844, 11911421948164011982, 6120215642153888610, 16676527939404087356, 9404280000999464502, 8423043379628164525, 1735222492513760332, 11318806736621162148, 15407186837043713393, 13485211244653928073, 4257071131168813417, 3482639998457803800, 14359460599290704174, 16073214466625742345, 4430959127423856282, 1, 0, 0, 0, 1, 0, 15213348941945515579, 4080896831515632495, 2115916331101874032, 14072300156908432530, 4680481291290566437, 10485112285448962747, 11498487923782501751, 15870139479256453021, 15903424027416555998, 8883940618995723208, 11170081717188072664, 3366715262389109205, 9117246600999250277, 15902507139806774023, 15590656855559575839, 1, 0, 0, 0, 1, 0, 9281128272221551300, 1953391350014801803, 10361246786850296393, 15658716527747040980, 729009684537575982, 7463752398658534839, 4276681409258176044, 6806060556807781604, 12605480788735099613, 10386976621364522928, 8123337005847551087, 13912213856326486056, 1806905237893315697, 5274544965980948277, 18146646330136390606, 1, 0, 0, 0, 1, 0, 3184119643432893508, 12666055134254320926, 13347884086274478638, 10805338145914832851, 2509966126115291236, 7086318781105575433, 6019260256544801113, 309743103212430298, 6059068631740368787, 13373704167654916087, 5057603743378325948, 14981257187297131103, 3809925330596605534, 15088403650698955530, 7707774010999656594, 1, 0, 0, 0, 1, 0, 17563106072770942913, 0, 0, 11866022853402812888, 6606875518512322314, 16683125300631590273, 2813750347113564525, 17862871362988443440, 4210674244211222629, 3258729720361659960, 367186060507240673, 3229291246709926782, 17063257729896061936, 7902492290152572474, 5135727797169111985, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13328288515202849800, 6972406840307481976, 29465347809991832, 12012198471360912693, 15779352999894925288, 173097048437312502, 7034851303745741351, 11088333491201093194, 6771862800272250893, 3846044480011221270, 4070136787975548901, 9633218853985087472, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17331158106613184460, 14148490408465275064, 8090161351836983773, 2492059183640657261, 6026600320279882336, 15568437290332308327, 16133345873308301364, 16575090776691519559, 7666370275789511263, 10729939698274680623, 6345872167795009033, 16966092255533854383, 1, 0, 0, 0, 1, 0, 0, 0, 0, 18344276842462151560, 2917966740410115114, 8665315444141111469, 16968938268466755316, 6970552753544824994, 11532601739151124629, 5426492436527662130, 16147396598096989679, 12942227631865082960, 5297971463863936522, 3095930865537762353, 3065488485208441055, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 4949154992619464010, 10000279862191744493, 2980140658145787783, 14525300817521856881, 15190222347874856922, 8671284646676347574, 4232664728858134772, 15703076512693482766, 1, 0, 0, 0, 1, 0, 0, 0, 0, 401642074298203, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 14280802901810915241, 1835177830541154044, 10010111294767420802, 2549897079792572603, 16850544756775285522, 1076973899277284702, 16072847024087248681, 6959791354043610236, 13098960849839742034, 17457628753812655267, 10076989882539553734, 9851586117636382793, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7925919485060883878, 826263100281998566, 16943179644353820008, 5670682422759337153, 652387120995254672, 14086579741019377519, 1047399340937520223, 1843180796447728437, 9449621519891201049, 5096693283465186518, 13617634258944637452, 7414079509745519565, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9094034340168608638, 9612296353153372169, 8996122336997085030, 4249626004536644548, 4188956971131276775, 3818478693739735842, 13840617071834531990, 9556362158826632350, 2814310786559014444, 12947605480618213072, 11664888937794835322, 10414894202973226643, 1, 0, 0, 0, 1, 0, 206637164063268726, 10092260866618400225, 13038545162971821924, 6650811367268781560, 2509054224639990472, 17350347680949584060, 9138873913574622404, 18389965100329173053, 5593621083784091164, 13835424809772757395, 3220022195391792741, 5305842545683321494, 13490514080936595140, 6832371865971954132, 11403399710197601656, 1, 0, 0, 0, 1, 0, 13042021488072180943, 17665366762968375743, 14514089290800305099, 13091389828882674218, 4611398810491526224, 81685142906752346, 2149720931386886989, 11347427093515448316, 968047239546776409, 11208516754282785707, 7596903557041777533, 6167749875842285147, 6026705707665599719, 15647394574465449881, 12376579030877442488, 1, 0, 0, 0, 1, 0, 7479226098762365380, 20647088475708265, 14234714302482719672, 680445747454648704, 10159688738464070440, 9792116363139842106, 7330871518527332444, 4089976927111145333, 15053368214221814937, 13990233438164144322, 12190997158276486897, 7437125179920904126, 12940670116574659651, 11586223746088007538, 15054143113295762432, 1, 0, 0, 0, 1, 0, 13347963917530181895, 10889708507292659338, 4175833649164370394, 5233297770622824375, 745298233749984501, 1134592111928495305, 10789212522972025785, 1655996231185402724, 15389814481683087606, 16658833476738371029, 17337514399056563302, 91614862745339577, 5957825878304116293, 8927362828162004403, 17460975957431844228, 1, 0, 0, 0, 1, 0, 6929809241430544204, 6641711964892684437, 12124997350307806549, 9867160564810673994, 17942681985602265676, 4841731940180862534, 5554647570062987979, 16778373777892540383, 7660052382355122994, 492549161703070590, 7481614450647261413, 1154605885284628266, 1527514044633931889, 968318691601385838, 10685847052710927197, 1, 0, 0, 0, 1, 0, 17634176407370476921, 7739526124990237795, 13838384228721941065, 10263347723858682786, 10152063658776528390, 2487841274273895537, 14002884382934858252, 16481019216530994753, 737940994724202658, 13983563295828088546, 13086268929321267306, 9490927005547387767, 12643114535206930756, 5238866342343116613, 1026289052488784895, 1, 0, 0, 0, 1, 0, 6697396169967230934, 18287805115840952516, 14443334479498508931, 9643915442530902318, 5274902253855511588, 8629130978595053833, 13067519389098510351, 6485826671956173957, 13211005290810103003, 11078906302351818677, 4561010052951998759, 7714188412126691626, 2913086696180341350, 845034972551066538, 1899038343674936222, 1, 0, 0, 0, 1, 0, 15116382065750335012, 0, 0, 887493237489321299, 6033538369482377655, 16798226782780142546, 16399505509770566014, 12077164016468113545, 12296311093518063031, 2334817027508375898, 6016566887476098647, 7120740401378484294, 12860916533743270733, 17367170950581948054, 5883730844910027408, 1, 0, 0, 0, 1, 0, 0, 0, 0, 13483864438078018308, 3570589185097006252, 9731250716956559616, 11950037765875050974, 4878983963291132913, 5554567664494429423, 6515674137823977144, 13097123292793361360, 2929601484581949152, 15934882759672330788, 4924405821869545305, 10308552102917724507, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8159241411748295729, 4587292818271677447, 12286920896461242142, 12195903600484928258, 1618531819557712390, 12302163852964786956, 393947096345211186, 17631302057213141907, 1077164174037184778, 2173747106952139997, 1674381281184830519, 1101239144209002141, 1, 0, 0, 0, 1, 0, 0, 0, 0, 10385528691577928985, 16771298688176486904, 1919835269886444210, 17694444981837938563, 565132887411573955, 14310991091785572129, 1951192747307666741, 8382824402074565601, 7253613682453412944, 5260381980138555939, 4077397353846458666, 16732112788727027442, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 7288090792972058500, 7008881577152522467, 7526556702499462773, 16136160484984138575, 12957959164911169922, 9238536158694879401, 16570851802495678006, 6132059608254040410, 1, 0, 0, 0, 1, 0, 0, 0, 0, 5482243896119908732, 17271741639510569126, 10627125303494028926, 12334791106787903660, 13210061556570014836, 16003296542960478536, 6732564319544917702, 16687523027086140644, 0, 87, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4383606322674378669, 13264028927506398677, 4766776471757604196, 14660905060901389201, 12446750015896088802, 12927954860087459534, 14751589151467562513, 18208410790236506017, 8060897427763484267, 10391043349415287037, 7848268271641614303, 13621084556403650323, 1, 0, 0, 0, 1, 0, 0, 0, 0, 11282929110176162954, 5896249534368220847, 12230245468863423579, 17357985657180629743, 10353774239160274935, 3759003303159369746, 3091073535594807983, 3398985649909830369, 15694315280551902473, 17044036436784806527, 1670964981039714496, 17078772340992927473, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17215248529293365853, 11382862066285680273, 18104224094677170296, 10490790376815116141, 11424271721157330669, 1148549753827007441, 17274728363719186424, 11870335859895317550, 15462035367190511759, 13171139175044072684, 12506995107569119516, 862170971660204027, 1, 0, 0, 0, 1, 0, 18208784611061899534, 11090107870009134382, 15816468029966600756, 13193227772306657556, 5436084715181539253, 15873409126341319274, 8856174280738574418, 15057005486179715954, 7129001791528740265, 6785780051417756764, 1782594595734670280, 16783127636073026773, 2094744771380247596, 16020980424362300069, 5676881743340217488, 1, 0, 0, 0, 1, 0, 3995660239591967986, 13991065272063476564, 4842320139602494012, 5492874275384737590, 9049442861863566881, 9007898958502691821, 9423711593310475409, 6387235594535598756, 7039074043166063940, 11491856728648046938, 5559192297727634984, 586150029444692874, 9272483157421678641, 11430895388638705560, 6521284656283570782, 1, 0, 0, 0, 1, 0, 10265417819422388610, 3230613796530740211, 8204482557338271208, 5965860733558915216, 3732227441816681926, 4972858056675247397, 15435624740876731287, 610949617653761740, 16413792935045431209, 11964718430105317483, 8697421447132597636, 7685703760533694936, 9520544349855559315, 16369319727902045750, 10481218501610762636, 1, 0, 0, 0, 1, 0, 4200148723083586126, 8898019494692638676, 9361391436000884061, 6906630570311142812, 10416842793286403595, 15154449156086880838, 17187582840477322187, 1667764180674112574, 11868526707386259660, 7310308994414837120, 37096681180297292, 1254987403839644538, 7281147841738764349, 16804807948024450931, 14191613402325013881, 1, 0, 0, 0, 1, 0, 6921512846940257894, 8083147322870350598, 7402338099048749868, 11028121748345672612, 9182929970775715030, 642245012387336876, 9940061963065628902, 677543792580138430, 5887036391937389613, 4972018469228063343, 9603988472267868801, 6207690803740787708, 1390751769269680465, 14779846517676698965, 4400313738036540825, 1, 0, 0, 0, 1, 0, 15720913686265040726, 11620345195770806393, 392865519522630483, 10866688391213961683, 4078956937078417294, 8169860993617536308, 13903556343063122489, 7226453148331774623, 12303475117195379639, 12980119595156137175, 2954837086209820968, 686805010274260483, 12922697597526240324, 2239891938742671995, 9798699259742823392, 1, 0, 0, 0, 1, 0, 1576291082626878936, 6836143998208741199, 5718769156293156294, 501346961392724628, 12301747922262729865, 7909458165142256993, 17643816943101201258, 739842910379542056, 14479451218433079532, 6627357084936364627, 6596157637386353039, 8706567413279745902, 4975249353684987436, 9576130314342554279, 8323169935435436763, 1, 0, 0, 0, 1, 0, 13015036049004182291, 0, 0, 3820689183586493894, 8535816953133153286, 12781603895645888322, 4895491920411997249, 6893839572721182305, 17259376159632543425, 7788172704304532836, 17444739644589522901, 15979424445015031332, 6966167031354634355, 5956660324772534609, 14233099751914870044, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2862138511955678409, 2554244438665697829, 9129723360543316479, 16513197729164811328, 10619536471246139015, 11289943669462175698, 7818804555865981505, 4673396992430997118, 18261872069356847559, 8010670397007670803, 14891365206755013222, 17356025534910089368, 1, 0, 0, 0, 1, 0, 0, 0, 0, 7758258992155315690, 6695383891040002341, 2424787611628537668, 4815287357290896051, 4063396021928247911, 10804772324353478999, 11573391963135759227, 5652365973964779246, 7568935938034555881, 871847630272290682, 833106187556617464, 2031310896521954322, 1, 0, 0, 0, 1, 0, 0, 0, 0, 17115115516972321026, 9265251570417433175, 16343713044075599831, 3003012580421078075, 1116280449848444285, 17288383771256214060, 18390005084876364234, 14148401294484512817, 3939988349760901151, 18441078654886601219, 14690990432528119604, 16067965450256037769, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683, 11377866377890790275, 9885671831159451104, 49905639292627904, 594790136239256278, 3558778201956820739, 1106728433230065324, 7399742180187746173, 8147499972447601337, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 40, 0, 0, 3, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 1, 0, 1, 1, 10, 0, 0, 0, 1, 0, 1, 1, 0, 40, 0, 0, 12, 7458506668679174706, 18375473735916206629, 2105717247508690050, 1679902783560062568, 9, 0, 4099276459869907627, 1, 10, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], range_checker_cols: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 7, 8, 9, 10, 2197, 4384, 6571, 8758, 10945, 13132, 15319, 17506, 19693, 21880, 24067, 26254, 28441, 30628, 32815, 35002, 37189, 39376, 41563, 43750, 45937, 48124, 50311, 52498, 54685, 56872, 59059, 61246, 63433, 64162, 64891, 65134, 65377, 65458, 65485, 65512, 65521, 65530, 65533, 65534, 65535, 65535]], num_rows: 128 }, last_program_row: RowIndex(19) }, program_info: ProgramInfo { program_hash: Word([9874694795284567525, 11914585017133270728, 14619522228640933410, 6636010883309744683]), kernel: Kernel([]) }, stack_outputs: StackOutputs { elements: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, precompile_requests: [], final_precompile_transcript: PrecompileTranscript { state: Word([0, 0, 0, 0]) }, trace_len_summary: TraceLenSummary { main_trace_len: 20, range_trace_len: 49, chiplets_trace_len: ChipletsLengths { hash_chiplet_len: 80, bitwise_chiplet_len: 0, memory_chiplet_len: 2, ace_chiplet_len: 0, kernel_rom_len: 0 } } } diff --git a/processor/src/trace/range/aux_trace.rs b/processor/src/trace/range/aux_trace.rs index daef81548b..7f76797ff8 100644 --- a/processor/src/trace/range/aux_trace.rs +++ b/processor/src/trace/range/aux_trace.rs @@ -3,6 +3,7 @@ use core::mem::MaybeUninit; use miden_air::trace::{ Challenges, MainTrace, RowIndex, + bus_types::RANGE_CHECK_BUS, range::{M_COL_IDX, V_COL_IDX}, }; @@ -68,7 +69,7 @@ impl AuxTraceBuilder { challenges: &Challenges, ) -> Vec { // run batch inversion on the lookup values - let divisors = get_divisors(&self.lookup_values, challenges.alpha); + let divisors = get_divisors(&self.lookup_values, challenges.bus_prefix[RANGE_CHECK_BUS]); // allocate memory for the running sum column and set the initial value to ZERO let mut b_range: Vec> = uninit_vector(main_trace.num_rows()); diff --git a/processor/src/trace/stack/aux_trace.rs b/processor/src/trace/stack/aux_trace.rs index 5a21b27b18..c8fb40f813 100644 --- a/processor/src/trace/stack/aux_trace.rs +++ b/processor/src/trace/stack/aux_trace.rs @@ -1,6 +1,6 @@ use alloc::vec::Vec; -use miden_air::trace::{Challenges, MainTrace, RowIndex}; +use miden_air::trace::{Challenges, MainTrace, RowIndex, bus_types::STACK_OVERFLOW_TABLE}; use miden_core::{field::ExtensionField, operations::opcodes}; use super::Felt; @@ -112,6 +112,6 @@ impl OverflowTableRow { /// Reduces this row to a single field element in the field specified by E. This requires /// at least 4 alpha values. pub fn to_value>(&self, challenges: &Challenges) -> E { - challenges.encode([self.clk, self.val, self.prev]) + challenges.encode(STACK_OVERFLOW_TABLE, [self.clk, self.val, self.prev]) } } diff --git a/processor/src/trace/tests/chiplets/bitwise.rs b/processor/src/trace/tests/chiplets/bitwise.rs index dff9a14043..ce411b19b7 100644 --- a/processor/src/trace/tests/chiplets/bitwise.rs +++ b/processor/src/trace/tests/chiplets/bitwise.rs @@ -185,7 +185,7 @@ fn build_expected_bitwise( s1: Felt, result: Felt, ) -> Felt { - challenges.encode([label, s0, s1, result]) + challenges.encode(miden_air::trace::bus_types::CHIPLETS_BUS, [label, s0, s1, result]) } fn build_expected_bitwise_from_trace( diff --git a/processor/src/trace/tests/chiplets/hasher.rs b/processor/src/trace/tests/chiplets/hasher.rs index 2d78d61e83..02a96263ce 100644 --- a/processor/src/trace/tests/chiplets/hasher.rs +++ b/processor/src/trace/tests/chiplets/hasher.rs @@ -1,7 +1,7 @@ use alloc::vec::Vec; use miden_air::trace::{ - Challenges, RowIndex, bus_message, + Challenges, RowIndex, bus_message, bus_types, chiplets::hasher::{ CONTROLLER_ROWS_PER_PERM_FELT, DIGEST_RANGE, HasherState, LINEAR_HASH_LABEL, MP_VERIFY_LABEL, MR_UPDATE_NEW_LABEL, MR_UPDATE_OLD_LABEL, RATE_LEN, RETURN_HASH_LABEL, @@ -281,7 +281,7 @@ const LABEL_OFFSET_OUTPUT: u8 = 32; /// Sponge start message: full 12-element state (matches SPAN / control block request). fn sponge_start_msg(challenges: &Challenges, addr: Felt, state: &HasherState) -> Felt { - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[0] * Felt::from_u8(LINEAR_HASH_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[1] * addr; header + build_value(&challenges.beta_powers[3..15], state) @@ -291,7 +291,7 @@ fn sponge_start_msg(challenges: &Challenges, addr: Felt, state: &HasherSta /// Both the RESPAN request and the hasher continuation response use LABEL_OFFSET_OUTPUT (= 32). fn sponge_continuation_msg(challenges: &Challenges, addr: Felt, rate: &[Felt]) -> Felt { assert_eq!(rate.len(), RATE_LEN); - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[0] * Felt::from_u8(LINEAR_HASH_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[1] * addr; header + build_value(&challenges.beta_powers[3..11], rate) @@ -300,7 +300,7 @@ fn sponge_continuation_msg(challenges: &Challenges, addr: Felt, rate: &[Fe /// Digest return message: 4-element digest (matches END / MPVERIFY output / MRUPDATE output). fn digest_return_msg(challenges: &Challenges, addr: Felt, digest: &[Felt]) -> Felt { assert_eq!(digest.len(), 4); - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[0] * Felt::from_u8(RETURN_HASH_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[1] * addr; header + build_value(&challenges.beta_powers[3..7], digest) @@ -308,7 +308,7 @@ fn digest_return_msg(challenges: &Challenges, addr: Felt, digest: &[Felt]) /// Full state return message: 12-element state (matches HPERM output). fn full_state_return_msg(challenges: &Challenges, addr: Felt, state: &HasherState) -> Felt { - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[0] * Felt::from_u8(RETURN_STATE_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[1] * addr; header + build_value(&challenges.beta_powers[3..15], state) @@ -322,7 +322,7 @@ fn tree_input_msg( index: Felt, leaf_word: &[Felt; 4], ) -> Felt { - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[0] * Felt::from_u8(label + LABEL_OFFSET_INPUT) + challenges.beta_powers[1] * addr + challenges.beta_powers[2] * index; @@ -338,8 +338,8 @@ fn hasher_response_at( challenges: &Challenges, row: RowIndex, ) -> Felt { - let perm_seg = trace.main_trace.chiplet_perm_seg(row); - if perm_seg == ONE { + let s_perm = trace.main_trace.chiplet_s_perm(row); + if s_perm == ONE { return ONE; // perm segment: no response } @@ -434,7 +434,7 @@ fn decoder_request_at( // SPAN request: rate-only message (LINEAR_HASH_LABEL + 16) at addr(row+1). let addr_next = trace.main_trace.addr(row + 1); let state = trace.main_trace.decoder_hasher_state(row); - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(LINEAR_HASH_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * addr_next; @@ -448,7 +448,7 @@ fn decoder_request_at( // RESPAN request: rate-only message (LINEAR_HASH_LABEL + 32) at addr(row+1). let addr_next = trace.main_trace.addr(row + 1); let state = trace.main_trace.decoder_hasher_state(row); - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(LINEAR_HASH_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * addr_next; @@ -463,7 +463,7 @@ fn decoder_request_at( let addr = trace.main_trace.addr(row) + ONE; let state = trace.main_trace.decoder_hasher_state(row); let digest = &state[..4]; - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(RETURN_HASH_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * addr; @@ -478,7 +478,7 @@ fn decoder_request_at( let addr_next = trace.main_trace.addr(row + 1); let state = trace.main_trace.decoder_hasher_state(row); let op_code_felt = trace.main_trace.get_op_code(row); - let header = challenges.alpha + let header = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(LINEAR_HASH_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * addr_next; @@ -499,7 +499,7 @@ fn decoder_request_at( core::array::from_fn(|i| trace.main_trace.stack_element(i, row + 1)); let input_value = { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(LINEAR_HASH_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * helper_0; @@ -509,7 +509,7 @@ fn decoder_request_at( acc }; let output_value = { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(RETURN_STATE_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * (helper_0 + ONE); @@ -549,7 +549,7 @@ fn decoder_request_at( .collect(); let input_value = { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(LINEAR_HASH_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * addr; @@ -559,7 +559,7 @@ fn decoder_request_at( acc }; let output_value = { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(RETURN_STATE_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * (addr + ONE); @@ -587,7 +587,7 @@ fn decoder_request_at( merkle_root.as_elements().try_into().expect("word must be 4 field elements"); let input_value = { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(MP_VERIFY_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * helper_0 @@ -599,7 +599,7 @@ fn decoder_request_at( }; let output_addr = helper_0 + node_depth * rows_per_perm - ONE; let output_value = { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(RETURN_HASH_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * output_addr; @@ -634,7 +634,7 @@ fn decoder_request_at( new_root.as_elements().try_into().expect("word must be 4 field elements"); let input_old = { - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(MR_UPDATE_OLD_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * helper_0 @@ -646,7 +646,7 @@ fn decoder_request_at( }; let output_old = { let output_addr = helper_0 + merkle_path_depth * rows_per_perm - ONE; - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(RETURN_HASH_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * output_addr; @@ -657,7 +657,7 @@ fn decoder_request_at( }; let input_new = { let new_input_addr = helper_0 + merkle_path_depth * rows_per_perm; - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(MR_UPDATE_NEW_LABEL + LABEL_OFFSET_INPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * new_input_addr @@ -669,7 +669,7 @@ fn decoder_request_at( }; let output_new = { let new_output_addr = helper_0 + merkle_path_depth * two_legs_rows - ONE; - let mut acc = challenges.alpha + let mut acc = challenges.bus_prefix[bus_types::CHIPLETS_BUS] + challenges.beta_powers[bus_message::LABEL_IDX] * Felt::from_u8(RETURN_HASH_LABEL + LABEL_OFFSET_OUTPUT) + challenges.beta_powers[bus_message::ADDR_IDX] * new_output_addr; diff --git a/processor/src/trace/tests/chiplets/memory.rs b/processor/src/trace/tests/chiplets/memory.rs index f2a9466fa0..881f6bba44 100644 --- a/processor/src/trace/tests/chiplets/memory.rs +++ b/processor/src/trace/tests/chiplets/memory.rs @@ -289,7 +289,10 @@ fn build_expected_bus_element_msg( ) -> Felt { assert!(op_label == MEMORY_READ_ELEMENT_LABEL || op_label == MEMORY_WRITE_ELEMENT_LABEL); - challenges.encode([Felt::from_u8(op_label), ctx, addr, clk, value]) + challenges.encode( + miden_air::trace::bus_types::CHIPLETS_BUS, + [Felt::from_u8(op_label), ctx, addr, clk, value], + ) } fn build_expected_bus_word_msg( @@ -302,7 +305,10 @@ fn build_expected_bus_word_msg( ) -> Felt { assert!(op_label == MEMORY_READ_WORD_LABEL || op_label == MEMORY_WRITE_WORD_LABEL); - challenges.encode([Felt::from_u8(op_label), ctx, addr, clk, word[0], word[1], word[2], word[3]]) + challenges.encode( + miden_air::trace::bus_types::CHIPLETS_BUS, + [Felt::from_u8(op_label), ctx, addr, clk, word[0], word[1], word[2], word[3]], + ) } fn build_expected_bus_msg_from_trace( diff --git a/processor/src/trace/tests/decoder.rs b/processor/src/trace/tests/decoder.rs index 1ab354d0b3..cecb30b1a2 100644 --- a/processor/src/trace/tests/decoder.rs +++ b/processor/src/trace/tests/decoder.rs @@ -883,7 +883,7 @@ impl BlockStackTableRow { /// at least 12 coefficients. pub fn to_value>(&self, challenges: &Challenges) -> E { let is_loop = if self.is_loop { ONE } else { ZERO }; - challenges.alpha + challenges.bus_prefix[miden_air::trace::bus_types::BLOCK_STACK_TABLE] + challenges.beta_powers[0] * self.block_id + challenges.beta_powers[1] * self.parent_id + challenges.beta_powers[2] * is_loop @@ -918,7 +918,7 @@ impl OpGroupTableRow { /// Reduces this row to a single field element in the field specified by E. This requires /// at least 4 coefficients. pub fn to_value>(&self, challenges: &Challenges) -> E { - challenges.alpha + challenges.bus_prefix[miden_air::trace::bus_types::OP_GROUP_TABLE] + challenges.beta_powers[0] * self.batch_id + challenges.beta_powers[1] * self.group_pos + challenges.beta_powers[2] * self.group_value diff --git a/processor/src/trace/tests/hasher.rs b/processor/src/trace/tests/hasher.rs index 87cf4628ef..cd0ea2cc53 100644 --- a/processor/src/trace/tests/hasher.rs +++ b/processor/src/trace/tests/hasher.rs @@ -1,7 +1,7 @@ use alloc::vec::Vec; use miden_air::trace::{ - AUX_TRACE_RAND_CHALLENGES, Challenges, MainTrace, chiplets::hasher::P1_COL_IDX, + AUX_TRACE_RAND_CHALLENGES, Challenges, MainTrace, bus_types, chiplets::hasher::P1_COL_IDX, }; use miden_core::{ ONE, Word, ZERO, @@ -217,7 +217,7 @@ impl SiblingTableRow { let lsb = self.index.as_canonical_u64() & 1; if lsb == 0 { // Sibling at rate1 (positions 7-10) - challenges.alpha + challenges.bus_prefix[bus_types::SIBLING_TABLE] + challenges.beta_powers[1] * self.mrupdate_id + challenges.beta_powers[2] * self.index + challenges.beta_powers[7] * self.sibling[0] @@ -226,7 +226,7 @@ impl SiblingTableRow { + challenges.beta_powers[10] * self.sibling[3] } else { // Sibling at rate0 (positions 3-6) - challenges.alpha + challenges.bus_prefix[bus_types::SIBLING_TABLE] + challenges.beta_powers[1] * self.mrupdate_id + challenges.beta_powers[2] * self.index + challenges.beta_powers[3] * self.sibling[0] diff --git a/processor/src/trace/tests/range.rs b/processor/src/trace/tests/range.rs index 63b684c8a3..80f830de12 100644 --- a/processor/src/trace/tests/range.rs +++ b/processor/src/trace/tests/range.rs @@ -1,6 +1,6 @@ use miden_air::trace::{ - ACE_CHIPLET_WIRING_BUS_OFFSET, AUX_TRACE_RAND_CHALLENGES, chiplets::hasher::HASH_CYCLE_LEN, - range::B_RANGE_COL_IDX, + ACE_CHIPLET_WIRING_BUS_OFFSET, AUX_TRACE_RAND_CHALLENGES, Challenges, bus_types, + chiplets::hasher::HASH_CYCLE_LEN, range::B_RANGE_COL_IDX, }; use miden_core::{ONE, ZERO, field::Field, operations::Operation}; use miden_utils_testing::{rand::rand_array, stack}; @@ -18,7 +18,8 @@ fn b_range_trace_stack() { let trace = build_trace_from_ops(operations, &stack); let rand_elements = rand_array::(); - let alpha = rand_elements[0]; + let challenges = Challenges::new(rand_elements[0], rand_elements[1]); + let alpha = challenges.bus_prefix[bus_types::RANGE_CHECK_BUS]; let aux_columns = trace.build_aux_trace(&rand_elements).unwrap(); let b_range = aux_columns.get_column(B_RANGE_COL_IDX); @@ -117,7 +118,8 @@ fn b_range_trace_mem() { let trace = build_trace_from_ops(operations, &stack_input); let rand_elements = rand_array::(); - let alpha = rand_elements[0]; + let challenges = Challenges::new(rand_elements[0], rand_elements[1]); + let alpha = challenges.bus_prefix[bus_types::RANGE_CHECK_BUS]; let aux_columns = trace.build_aux_trace(&rand_elements).unwrap(); let b_range = aux_columns.get_column(B_RANGE_COL_IDX); let v_wiring = aux_columns.get_column(ACE_CHIPLET_WIRING_BUS_OFFSET); @@ -213,16 +215,17 @@ fn b_range_trace_mem() { ); // Verify the wiring bus residual matches the expected value. - // v_wiring_final = -4/(alpha + w0) - 2/(alpha + 4*w1) - // = -4/(alpha + 1) - 2/(alpha + 4) + // The wiring bus uses bus_prefix[RANGE_CHECK_BUS] for memory address range checks + // (same as b_range) so they balance to zero. + let alpha_w = challenges.bus_prefix[bus_types::RANGE_CHECK_BUS]; let num_memory_rows = Felt::from_u8(2); - let w0_contribution = (alpha + w0).inverse() * num_memory_rows; // 2/(alpha+1) from w0 - let w1_contribution = (alpha + w1).inverse() * num_memory_rows; // 2/(alpha+1) from w1 - let four_w1_contribution = (alpha + four_w1).inverse() * num_memory_rows; // 2/(alpha+4) from 4*w1 + let w0_contribution = (alpha_w + w0).inverse() * num_memory_rows; + let w1_contribution = (alpha_w + w1).inverse() * num_memory_rows; + let four_w1_contribution = (alpha_w + four_w1).inverse() * num_memory_rows; let expected_wiring_residual = -(w0_contribution + w1_contribution + four_w1_contribution); assert_eq!( v_wiring_final, expected_wiring_residual, - "v_wiring residual should equal -(2/(alpha+w0) + 2/(alpha+w1) + 2/(alpha+4*w1))" + "v_wiring residual should equal -(2/(alpha_w+w0) + 2/(alpha_w+w1) + 2/(alpha_w+4*w1))" ); // Verify the end-to-end balance: b_range + v_wiring = 0.