From 2031c580db6145d995a8facfbd6b4795d8265266 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Mon, 17 Feb 2025 23:35:24 +0000 Subject: [PATCH 01/21] feat: hash cc log w poseidon, add raw log to rollup + ts --- l1-contracts/src/core/RollupCore.sol | 4 - l1-contracts/src/core/interfaces/IRollup.sol | 1 - .../src/core/libraries/ConstantsGen.sol | 20 +- l1-contracts/test/Rollup.t.sol | 22 +- l1-contracts/test/base/RollupBase.sol | 2 +- l1-contracts/test/fees/FeeRollup.t.sol | 2 - .../ValidatorSelection.t.sol | 4 +- .../aztec-nr/aztec/src/oracle/logs.nr | 7 +- .../src/main.nr | 23 +- .../src/components/tail_output_composer.nr | 4 - .../tail_output_composer/meter_gas_used.nr | 15 +- .../meter_gas_used.nr | 19 +- .../src/private_kernel_tail.nr | 31 +-- .../src/private_kernel_tail_to_public.nr | 16 +- .../previous_kernel_validator_builder/mod.nr | 2 +- .../meter_gas_used.nr | 6 +- .../meter_gas_used.nr | 10 +- .../tail_to_public_output_composer.nr | 15 +- .../crates/rollup-lib/src/abis/tx_effect.nr | 10 +- .../src/base/private_base_rollup.nr | 88 +++++-- .../rollup-lib/src/base/public_base_rollup.nr | 112 ++++++--- .../crates/rollup-lib/src/components.nr | 100 +++++--- .../private_to_rollup_accumulated_data.nr | 11 - .../types/src/abis/contract_class_log.nr | 30 +++ .../crates/types/src/abis/log_hash.nr | 6 +- .../crates/types/src/abis/mod.nr | 1 + .../crates/types/src/constants.nr | 7 +- .../crates/types/src/hash.nr | 47 ++-- .../crates/types/src/tests/fixture_builder.nr | 6 +- .../crates/types/src/utils/arrays.nr | 66 ++++++ .../archiver/src/archiver/archiver.test.ts | 8 +- .../archiver/src/archiver/archiver.ts | 27 +-- .../archiver/src/archiver/data_retrieval.ts | 24 +- .../archiver/kv_archiver_store/log_store.ts | 67 ++++-- .../memory_archiver_store.ts | 65 ++++-- yarn-project/aztec.js/src/index.ts | 2 - .../src/contract-interface-gen/typescript.ts | 1 - yarn-project/circuit-types/src/body.test.ts | 3 +- yarn-project/circuit-types/src/body.ts | 25 +- .../src/interfaces/archiver.test.ts | 8 +- .../src/interfaces/aztec-node.test.ts | 8 +- .../circuit-types/src/interfaces/pxe.test.ts | 8 +- yarn-project/circuit-types/src/l2_block.ts | 5 +- ..._log.ts => extended_contract_class_log.ts} | 49 ++-- .../src/logs/function_l2_logs.test.ts | 49 ---- .../src/logs/function_l2_logs.ts | 104 --------- .../src/logs/get_logs_response.ts | 8 +- yarn-project/circuit-types/src/logs/index.ts | 6 +- .../src/logs/l2_block_l2_logs.test.ts | 32 --- .../src/logs/l2_block_l2_logs.ts | 146 ------------ .../circuit-types/src/logs/tx_l2_logs.test.ts | 39 ---- .../circuit-types/src/logs/tx_l2_logs.ts | 216 ------------------ .../src/logs/unencrypted_l2_log.test.ts | 23 -- .../src/logs/unencrypted_l2_log.ts | 98 -------- yarn-project/circuit-types/src/mocks.ts | 10 +- .../src/private_execution_result.ts | 18 +- yarn-project/circuit-types/src/stats/stats.ts | 2 +- .../circuit-types/src/tx/processed_tx.ts | 13 +- .../circuit-types/src/tx/simulated_tx.ts | 5 +- yarn-project/circuit-types/src/tx/tx.ts | 70 ++++-- .../circuit-types/src/tx_effect.test.ts | 9 +- yarn-project/circuit-types/src/tx_effect.ts | 96 +++----- yarn-project/circuits.js/src/constants.gen.ts | 23 +- yarn-project/circuits.js/src/hash/hash.ts | 10 + .../src/structs/contract_class_log.test.ts | 45 ++++ .../src/structs/contract_class_log.ts | 104 +++++++++ yarn-project/circuits.js/src/structs/index.ts | 1 + ...ivate_kernel_tail_circuit_public_inputs.ts | 14 ++ .../private_to_rollup_accumulated_data.ts | 11 +- .../circuits.js/src/structs/log_hash.ts | 17 +- .../circuits.js/src/tests/factories.ts | 3 +- .../composed/integration_l1_publisher.test.ts | 2 - .../contract_class_registration.test.ts | 4 +- .../src/conversion/client.ts | 53 +---- .../src/conversion/common.ts | 10 +- .../ContractClassRegisteredEventData.hex | 2 +- .../PrivateFunctionBroadcastedEventData.hex | 2 +- ...onstrainedFunctionBroadcastedEventData.hex | 2 +- ...ntract_class_registered_event.test.ts.snap | 11 + ...te_function_broadcasted_event.test.ts.snap | 18 +- ...ed_function_broadcasted_event.test.ts.snap | 16 +- .../contract_class_registered_event.test.ts | 18 +- .../contract_class_registered_event.ts | 25 +- ...private_function_broadcasted_event.test.ts | 3 +- .../private_function_broadcasted_event.ts | 72 +++--- ...trained_function_broadcasted_event.test.ts | 3 +- ...nconstrained_function_broadcasted_event.ts | 64 +++--- .../src/scripts/generate_data.ts | 16 +- .../src/publisher/sequencer-publisher.test.ts | 4 - .../src/publisher/sequencer-publisher.ts | 4 - .../simulator/src/acvm/oracle/oracle.ts | 12 +- .../simulator/src/acvm/oracle/typed_oracle.ts | 6 +- .../src/client/client_execution_context.ts | 19 +- .../simulator/src/public/public_db_sources.ts | 24 +- .../simulator/src/public/public_processor.ts | 27 ++- .../src/public/public_tx_simulator.test.ts | 32 ++- .../src/public/public_tx_simulator.ts | 2 +- yarn-project/txe/src/oracle/txe_oracle.ts | 4 +- 98 files changed, 1082 insertions(+), 1532 deletions(-) create mode 100644 noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr rename yarn-project/circuit-types/src/logs/{extended_unencrypted_l2_log.ts => extended_contract_class_log.ts} (50%) delete mode 100644 yarn-project/circuit-types/src/logs/function_l2_logs.test.ts delete mode 100644 yarn-project/circuit-types/src/logs/function_l2_logs.ts delete mode 100644 yarn-project/circuit-types/src/logs/l2_block_l2_logs.test.ts delete mode 100644 yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts delete mode 100644 yarn-project/circuit-types/src/logs/tx_l2_logs.test.ts delete mode 100644 yarn-project/circuit-types/src/logs/tx_l2_logs.ts delete mode 100644 yarn-project/circuit-types/src/logs/unencrypted_l2_log.test.ts delete mode 100644 yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts create mode 100644 yarn-project/circuits.js/src/structs/contract_class_log.test.ts create mode 100644 yarn-project/circuits.js/src/structs/contract_class_log.ts create mode 100644 yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap diff --git a/l1-contracts/src/core/RollupCore.sol b/l1-contracts/src/core/RollupCore.sol index 0e33d1b46bd3..eb8cb0fe4288 100644 --- a/l1-contracts/src/core/RollupCore.sol +++ b/l1-contracts/src/core/RollupCore.sol @@ -447,15 +447,11 @@ contract RollupCore is * * @param _args - The arguments to propose the block * @param _signatures - Signatures from the validators - * // TODO(#9101): The below _body should be removed once we can extract blobs. It's only here so the archiver can extract tx effects. - * @param - The body of the L2 block * @param _blobInput - The blob evaluation KZG proof, challenge, and opening required for the precompile. */ function propose( ProposeArgs calldata _args, Signature[] memory _signatures, - // TODO(#9101): Extract blobs from beacon chain => remove below body input - bytes calldata, bytes calldata _blobInput ) public override(IRollupCore) { if (canPrune()) { diff --git a/l1-contracts/src/core/interfaces/IRollup.sol b/l1-contracts/src/core/interfaces/IRollup.sol index 16110c624e1e..fba85cdf4cee 100644 --- a/l1-contracts/src/core/interfaces/IRollup.sol +++ b/l1-contracts/src/core/interfaces/IRollup.sol @@ -104,7 +104,6 @@ interface IRollupCore { function propose( ProposeArgs calldata _args, Signature[] memory _signatures, - bytes calldata _body, bytes calldata _blobInput ) external; diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index df21b2baece9..3ccca87372d5 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -172,8 +172,9 @@ library Constants { uint256 internal constant TREE_LEAF_READ_REQUEST_LENGTH = 2; uint256 internal constant PRIVATE_LOG_DATA_LENGTH = 20; uint256 internal constant SCOPED_PRIVATE_LOG_DATA_LENGTH = 21; - uint256 internal constant LOG_HASH_LENGTH = 3; - uint256 internal constant SCOPED_LOG_HASH_LENGTH = 4; + uint256 internal constant CONTRACT_CLASS_LOG_SIZE_IN_FIELDS = 3019; + uint256 internal constant CONTRACT_CLASS_LOG_DATA_LENGTH = 3021; + uint256 internal constant SCOPED_CONTRACT_CLASS_LOG_DATA_LENGTH = 3022; uint256 internal constant NOTE_HASH_LENGTH = 2; uint256 internal constant SCOPED_NOTE_HASH_LENGTH = 3; uint256 internal constant NULLIFIER_LENGTH = 3; @@ -193,7 +194,7 @@ library Constants { uint256 internal constant TOTAL_MANA_USED_LENGTH = 1; uint256 internal constant BLOCK_HEADER_LENGTH = 25; uint256 internal constant BLOCK_HEADER_LENGTH_BYTES = 648; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 741; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3759; uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 908; uint256 internal constant PRIVATE_CONTEXT_INPUTS_LENGTH = 40; uint256 internal constant FEE_RECIPIENT_LENGTH = 2; @@ -202,16 +203,16 @@ library Constants { uint256 internal constant SCOPED_READ_REQUEST_LEN = 3; uint256 internal constant PUBLIC_DATA_READ_LENGTH = 3; uint256 internal constant PRIVATE_VALIDATION_REQUESTS_LENGTH = 772; - uint256 internal constant PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH = 741; + uint256 internal constant PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH = 3758; uint256 internal constant TX_CONSTANT_DATA_LENGTH = 37; uint256 internal constant COMBINED_CONSTANT_DATA_LENGTH = 46; - uint256 internal constant PRIVATE_ACCUMULATED_DATA_LENGTH = 1412; - uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2230; - uint256 internal constant PRIVATE_TO_PUBLIC_ACCUMULATED_DATA_LENGTH = 900; + uint256 internal constant PRIVATE_ACCUMULATED_DATA_LENGTH = 4430; + uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 5248; + uint256 internal constant PRIVATE_TO_PUBLIC_ACCUMULATED_DATA_LENGTH = 3918; uint256 internal constant PRIVATE_TO_AVM_ACCUMULATED_DATA_LENGTH = 160; uint256 internal constant NUM_PRIVATE_TO_AVM_ACCUMULATED_DATA_ARRAYS = 3; - uint256 internal constant PRIVATE_TO_PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 1847; - uint256 internal constant PRIVATE_TO_ROLLUP_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 783; + uint256 internal constant PRIVATE_TO_PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 7883; + uint256 internal constant PRIVATE_TO_ROLLUP_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3800; uint256 internal constant CONSTANT_ROLLUP_DATA_LENGTH = 13; uint256 internal constant BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = 52; uint256 internal constant BLOCK_ROOT_OR_BLOCK_MERGE_PUBLIC_INPUTS_LENGTH = 986; @@ -290,6 +291,7 @@ library Constants { uint256 internal constant L2_GAS_PER_L1_TO_L2_MSG_READ_REQUEST = 1404; uint256 internal constant L2_GAS_PER_LOG_BYTE = 4; uint256 internal constant L2_GAS_PER_PRIVATE_LOG = 0; + uint256 internal constant L2_GAS_PER_CONTRACT_CLASS_LOG = 0; uint256 internal constant L2_GAS_PER_L2_TO_L1_MSG = 200; uint256 internal constant TX_START_PREFIX = 8392562855083340404; uint256 internal constant REVERT_CODE_PREFIX = 1; diff --git a/l1-contracts/test/Rollup.t.sol b/l1-contracts/test/Rollup.t.sol index 2304a4b48616..7df238a719fc 100644 --- a/l1-contracts/test/Rollup.t.sol +++ b/l1-contracts/test/Rollup.t.sol @@ -221,7 +221,7 @@ contract RollupTest is RollupBase { txHashes: new bytes32[](0) }); vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__InvalidBlobHash.selector, blobHashes[0])); - rollup.propose(args, signatures, data.body, data.blobInputs); + rollup.propose(args, signatures, data.blobInputs); } function testInvalidBlobProof() public setUpFor("mixed_block_1") { @@ -249,7 +249,7 @@ contract RollupTest is RollupBase { txHashes: new bytes32[](0) }); vm.expectRevert(abi.encodeWithSelector(Errors.Rollup__InvalidBlobProof.selector, blobHashes[0])); - rollup.propose(args, signatures, data.body, blobInput); + rollup.propose(args, signatures, blobInput); } function testRevertPrune() public setUpFor("mixed_block_1") { @@ -314,7 +314,7 @@ contract RollupTest is RollupBase { oracleInput: OracleInput(0), txHashes: txHashes }); - rollup.propose(args, signatures, data.body, data.blobInputs); + rollup.propose(args, signatures, data.blobInputs); } function testNonZeroL2Fee() public setUpFor("mixed_block_1") { @@ -341,7 +341,7 @@ contract RollupTest is RollupBase { oracleInput: OracleInput(0), txHashes: txHashes }); - rollup.propose(args, signatures, data.body, data.blobInputs); + rollup.propose(args, signatures, data.blobInputs); } struct TestBlockFeeStruct { @@ -394,7 +394,7 @@ contract RollupTest is RollupBase { oracleInput: OracleInput(0), txHashes: new bytes32[](0) }); - rollup.propose(args, signatures, data.body, data.blobInputs); + rollup.propose(args, signatures, data.blobInputs); assertEq( testERC20.balanceOf(data.decodedHeader.globalVariables.coinbase), 0, @@ -670,7 +670,6 @@ contract RollupTest is RollupBase { DecoderBase.Data memory data = load("empty_block_1").block; bytes memory header = data.header; bytes32 archive = data.archive; - bytes memory body = data.body; bytes32[] memory txHashes = new bytes32[](0); assembly { @@ -686,14 +685,13 @@ contract RollupTest is RollupBase { oracleInput: OracleInput(0), txHashes: txHashes }); - rollup.propose(args, signatures, body, data.blobInputs); + rollup.propose(args, signatures, data.blobInputs); } function testRevertInvalidChainId() public setUpFor("empty_block_1") { DecoderBase.Data memory data = load("empty_block_1").block; bytes memory header = data.header; bytes32 archive = data.archive; - bytes memory body = data.body; bytes32[] memory txHashes = new bytes32[](0); assembly { @@ -708,14 +706,13 @@ contract RollupTest is RollupBase { oracleInput: OracleInput(0), txHashes: txHashes }); - rollup.propose(args, signatures, body, data.blobInputs); + rollup.propose(args, signatures, data.blobInputs); } function testRevertInvalidVersion() public setUpFor("empty_block_1") { DecoderBase.Data memory data = load("empty_block_1").block; bytes memory header = data.header; bytes32 archive = data.archive; - bytes memory body = data.body; bytes32[] memory txHashes = new bytes32[](0); assembly { @@ -730,14 +727,13 @@ contract RollupTest is RollupBase { oracleInput: OracleInput(0), txHashes: txHashes }); - rollup.propose(args, signatures, body, data.blobInputs); + rollup.propose(args, signatures, data.blobInputs); } function testRevertInvalidTimestamp() public setUpFor("empty_block_1") { DecoderBase.Data memory data = load("empty_block_1").block; bytes memory header = data.header; bytes32 archive = data.archive; - bytes memory body = data.body; bytes32[] memory txHashes = new bytes32[](0); uint256 realTs = data.decodedHeader.globalVariables.timestamp; @@ -757,7 +753,7 @@ contract RollupTest is RollupBase { oracleInput: OracleInput(0), txHashes: txHashes }); - rollup.propose(args, signatures, body, new bytes(144)); + rollup.propose(args, signatures, new bytes(144)); } function testSubmitProofNonExistantBlock() public setUpFor("empty_block_1") { diff --git a/l1-contracts/test/base/RollupBase.sol b/l1-contracts/test/base/RollupBase.sol index c3b3aeb5db46..ef1d81d2f130 100644 --- a/l1-contracts/test/base/RollupBase.sol +++ b/l1-contracts/test/base/RollupBase.sol @@ -196,7 +196,7 @@ contract RollupBase is DecoderBase { oracleInput: OracleInput(0), txHashes: new bytes32[](0) }); - rollup.propose(args, signatures, full.block.body, blobInputs); + rollup.propose(args, signatures, blobInputs); bytes32 l2ToL1MessageTreeRoot; uint32 numTxs = full.block.numTxs; diff --git a/l1-contracts/test/fees/FeeRollup.t.sol b/l1-contracts/test/fees/FeeRollup.t.sol index d7c46320c40d..8207c26a228c 100644 --- a/l1-contracts/test/fees/FeeRollup.t.sol +++ b/l1-contracts/test/fees/FeeRollup.t.sol @@ -261,7 +261,6 @@ contract FeeRollupTest is FeeModelTestPoints, DecoderBase { txHashes: b.txHashes }), b.signatures, - b.body, b.blobInputs ); nextSlot = nextSlot + Slot.wrap(1); @@ -363,7 +362,6 @@ contract FeeRollupTest is FeeModelTestPoints, DecoderBase { txHashes: b.txHashes }), b.signatures, - b.body, b.blobInputs ); diff --git a/l1-contracts/test/validator-selection/ValidatorSelection.t.sol b/l1-contracts/test/validator-selection/ValidatorSelection.t.sol index c4ae9c5330ce..de2c1909495a 100644 --- a/l1-contracts/test/validator-selection/ValidatorSelection.t.sol +++ b/l1-contracts/test/validator-selection/ValidatorSelection.t.sol @@ -315,14 +315,14 @@ contract ValidatorSelectionTest is DecoderBase { emit log("Time to propose"); vm.prank(ree.proposer); - rollup.propose(args, signatures, full.block.body, full.block.blobInputs); + rollup.propose(args, signatures, full.block.blobInputs); if (ree.shouldRevert) { return; } } else { Signature[] memory signatures = new Signature[](0); - rollup.propose(args, signatures, full.block.body, full.block.blobInputs); + rollup.propose(args, signatures, full.block.blobInputs); } assertEq(_expectRevert, ree.shouldRevert, "Does not match revert expectation"); diff --git a/noir-projects/aztec-nr/aztec/src/oracle/logs.nr b/noir-projects/aztec-nr/aztec/src/oracle/logs.nr index 019a48e3468d..7e2e6b8d684c 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/logs.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/logs.nr @@ -1,12 +1,11 @@ use dep::protocol_types::address::AztecAddress; -/// Temporary substitute that is used for handling contract class registration. This -/// variant returns the log hash, which would be too large to compute inside a circuit. +/// The below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. pub unconstrained fn emit_contract_class_unencrypted_log_private( contract_address: AztecAddress, message: [Field; N], counter: u32, -) -> Field { +) { emit_contract_class_unencrypted_log_private_oracle(contract_address, message, counter) } @@ -15,4 +14,4 @@ unconstrained fn emit_contract_class_unencrypted_log_private_oracle( contract_address: AztecAddress, message: [Field; N], counter: u32, -) -> Field {} +) {} diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index 58b469d0b304..0b5b4eef779d 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -7,12 +7,14 @@ pub contract ContractClassRegisterer { use dep::aztec::protocol_types::{ abis::log_hash::LogHash, constants::{ - ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, FUNCTION_TREE_HEIGHT, - MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS, + ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + FUNCTION_TREE_HEIGHT, MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS, MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, REGISTERER_CONTRACT_BYTECODE_CAPSULE_SLOT, }, contract_class_id::ContractClassId, + traits::is_empty, + utils::arrays::{array_concat, find_index_hint_from_end}, }; use dep::aztec::{ @@ -217,13 +219,18 @@ pub contract ContractClassRegisterer { // cannot prove non-registration. Therefore, it is possible that a malicious oracle might prevent sequencers // from including transactions with calls to certain badly-broadcasted contracts. // TODO(#8978): review correctness - let log_hash = - unsafe { emit_contract_class_unencrypted_log_private(contract_address, log, counter) }; + let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = + array_concat(log, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); + // TODO(MW): use chunked poseidon if cheaper? Use variable poseidon with length of non-0 fields? + let log_hash = std::hash::poseidon2::Poseidon2::hash(log, N); + /// Safety: TODO(MW): constraining below length in the base rollup. Is this good/safe? + let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; + /// Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. + unsafe { + emit_contract_class_unencrypted_log_private(contract_address, log_to_emit, counter); + } - // 40 = addr (32) + raw log len (4) + processed log len (4) - context.contract_class_logs_hashes.push( - LogHash { value: log_hash, counter, length: 40 + (N as Field) * 32 }, - ); + context.contract_class_logs_hashes.push(LogHash { value: log_hash, counter, length }); } #[private] diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr index 416ffd333763..c624c995a2db 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer.nr @@ -56,10 +56,6 @@ impl TailOutputComposer { data.contract_class_logs_hashes = source.contract_class_logs_hashes.storage().map( |l: ScopedLogHash| l.expose_to_public(), ); - data.contract_class_log_preimages_length = source.contract_class_logs_hashes.storage().fold( - 0, - |len, l: ScopedLogHash| len + l.log_hash.length, - ); data } } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr index 12acfc1e3dfa..eb095284331e 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr @@ -1,10 +1,10 @@ use dep::types::{ abis::{ accumulated_data::private_to_rollup_accumulated_data::PrivateToRollupAccumulatedData, - gas::Gas, + gas::Gas, log_hash::ScopedLogHash, }, constants::{ - DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_LOG_BYTE, + DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, PRIVATE_LOG_SIZE_IN_FIELDS, }, @@ -31,9 +31,16 @@ pub fn meter_gas_used(data: PrivateToRollupAccumulatedData) -> Gas { metered_da_fields += num_private_logs * PRIVATE_LOG_SIZE_IN_FIELDS; metered_l2_gas += num_private_logs * L2_GAS_PER_PRIVATE_LOG; + let num_contract_class_logs = array_length(data.contract_class_logs_hashes); + let contract_class_log_emitted_fields = data.contract_class_logs_hashes.fold( + 0, + // TODO(MW): log_size is constrained to be correct in the base rollup + |len, l: ScopedLogHash| len + l.log_hash.length, + ); + metered_da_fields += contract_class_log_emitted_fields; + metered_l2_gas += num_contract_class_logs * L2_GAS_PER_CONTRACT_CLASS_LOG; + let mut metered_da_bytes = metered_da_fields * DA_BYTES_PER_FIELD; - metered_da_bytes += data.contract_class_log_preimages_length as u32; - metered_l2_gas += data.contract_class_log_preimages_length as u32 * L2_GAS_PER_LOG_BYTE; Gas::new(metered_da_bytes * DA_GAS_PER_BYTE, metered_l2_gas) + Gas::tx_overhead() } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr index fae82f49c294..4ec6c7dec500 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr @@ -4,9 +4,9 @@ use dep::types::{ public_call_request::PublicCallRequest, }, constants::{ - DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, L2_GAS_PER_L2_TO_L1_MSG, - L2_GAS_PER_LOG_BYTE, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, - PRIVATE_LOG_SIZE_IN_FIELDS, + DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, + L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, + L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, PRIVATE_LOG_SIZE_IN_FIELDS, }, traits::{Empty, is_empty}, utils::arrays::array_length, @@ -32,11 +32,16 @@ fn meter_accumulated_data_gas_used(data: PrivateToPublicAccumulatedData) -> Gas metered_da_fields += num_private_logs * PRIVATE_LOG_SIZE_IN_FIELDS; metered_l2_gas += num_private_logs * L2_GAS_PER_PRIVATE_LOG; + let num_contract_class_logs = array_length(data.contract_class_logs_hashes); + let contract_class_log_emitted_fields = data.contract_class_logs_hashes.fold( + 0, + // TODO(MW): log_size is constrained to be correct in the base rollup + |len, l: ScopedLogHash| len + l.log_hash.length, + ); + metered_da_fields += contract_class_log_emitted_fields; + metered_l2_gas += num_contract_class_logs * L2_GAS_PER_CONTRACT_CLASS_LOG; + let mut metered_da_bytes = metered_da_fields * DA_BYTES_PER_FIELD; - let contract_class_log_preimages_length = - data.contract_class_logs_hashes.fold(0, |len, l: ScopedLogHash| len + l.log_hash.length); - metered_da_bytes += contract_class_log_preimages_length as u32; - metered_l2_gas += contract_class_log_preimages_length as u32 * L2_GAS_PER_LOG_BYTE; metered_l2_gas += array_length(data.public_call_requests) * FIXED_AVM_STARTUP_L2_GAS; diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr index 5007a73062bd..ae7a4acc9a8c 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail.nr @@ -71,8 +71,8 @@ mod tests { traits::{Empty, FromField}, }; use dep::types::constants::{ - DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, GENERATOR_INDEX__IVSK_M, L2_GAS_PER_L2_TO_L1_MSG, - L2_GAS_PER_LOG_BYTE, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, + DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, GENERATOR_INDEX__IVSK_M, L2_GAS_PER_CONTRACT_CLASS_LOG, + L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, PRIVATE_KERNEL_INNER_INDEX, PRIVATE_KERNEL_TAIL_INDEX, PRIVATE_LOG_SIZE_IN_FIELDS, }; @@ -123,25 +123,6 @@ mod tests { assert_eq(public_inputs.rollup_validation_requests.max_block_number.unwrap(), 13); } - #[test] - fn measuring_of_log_lengths() { - let mut builder = PrivateKernelTailInputsBuilder::new(); - // Logs for the previous call stack. - let prev_contract_class_logs_hash = 956; - let prev_contract_class_log_preimages_length = 24; - builder.previous_kernel.add_contract_class_log_hash( - prev_contract_class_logs_hash, - prev_contract_class_log_preimages_length, - ); - - let public_inputs = builder.execute(); - - assert_eq( - public_inputs.end.contract_class_log_preimages_length, - prev_contract_class_log_preimages_length, - ); - } - #[test] fn ordering_of_msgs() { let mut builder = PrivateKernelTailInputsBuilder::new(); @@ -279,12 +260,14 @@ mod tests { let public_inputs = builder.execute(); let num_private_logs = 1 + 2; - let num_da_fields = 1 /* nullifier */ + num_private_logs * PRIVATE_LOG_SIZE_IN_FIELDS; - let num_da_bytes = (num_da_fields * DA_BYTES_PER_FIELD) + 12 /* contract_class_logs */; + let num_da_fields = 1 /* nullifier */ + + num_private_logs * PRIVATE_LOG_SIZE_IN_FIELDS + + 1 * 12 /* contract_class_logs */; + let num_da_bytes = (num_da_fields * DA_BYTES_PER_FIELD); let da_gas = num_da_bytes * DA_GAS_PER_BYTE; let l2_gas = 1 * L2_GAS_PER_NULLIFIER + num_private_logs * L2_GAS_PER_PRIVATE_LOG - + 12 * L2_GAS_PER_LOG_BYTE; + + 1 * L2_GAS_PER_CONTRACT_CLASS_LOG; assert_eq(Gas::tx_overhead() + Gas::new(da_gas, l2_gas), public_inputs.gas_used); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr index fb350dbe908c..1a66c22d85c8 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/private_kernel_tail_to_public.nr @@ -69,13 +69,13 @@ mod tests { address::{AztecAddress, EthAddress}, point::Point, tests::{fixture_builder::FixtureBuilder, utils::assert_array_eq}, - traits::{Empty, FromField}, + traits::FromField, }; use dep::types::constants::{ DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, GENERATOR_INDEX__TSK_M, - L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_LOG_BYTE, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, - L2_GAS_PER_PRIVATE_LOG, PRIVATE_KERNEL_INNER_INDEX, PRIVATE_KERNEL_TAIL_INDEX, - PRIVATE_LOG_SIZE_IN_FIELDS, + L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, + L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, PRIVATE_KERNEL_INNER_INDEX, + PRIVATE_KERNEL_TAIL_INDEX, PRIVATE_LOG_SIZE_IN_FIELDS, }; // TODO: Reduce the duplicated code/tests for PrivateKernelTailToPublicInputs and PrivateKernelTailInputs. @@ -389,13 +389,15 @@ mod tests { let public_inputs = builder.execute(); let num_private_logs = 3; - let num_da_fields = 1 /* nullifier */ + num_private_logs * PRIVATE_LOG_SIZE_IN_FIELDS; - let num_da_bytes = (num_da_fields * DA_BYTES_PER_FIELD) + 12 /* contract_class_logs */; + let num_da_fields = 1 /* nullifier */ + + num_private_logs * PRIVATE_LOG_SIZE_IN_FIELDS + + 1 * 12 /* contract_class_logs */; + let num_da_bytes = (num_da_fields * DA_BYTES_PER_FIELD); let da_gas = num_da_bytes * DA_GAS_PER_BYTE; let l2_gas = FIXED_AVM_STARTUP_L2_GAS + 1 * L2_GAS_PER_NULLIFIER + num_private_logs * L2_GAS_PER_PRIVATE_LOG - + 12 * L2_GAS_PER_LOG_BYTE /* contract_class_logs */; + + 1 * L2_GAS_PER_CONTRACT_CLASS_LOG; assert_eq(public_inputs.gas_used, Gas::tx_overhead() + Gas::new(da_gas, l2_gas)); } diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr index 2ca221dbfbd4..ed437527267f 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/previous_kernel_validator_builder/mod.nr @@ -2,7 +2,7 @@ mod validate_common; mod validate_no_transient_data; use crate::components::previous_kernel_validator::PreviousKernelValidator; -use dep::types::{address::AztecAddress, tests::fixture_builder::FixtureBuilder}; +use dep::types::{address::AztecAddress, tests::fixture_builder::FixtureBuilder, traits::FromField}; pub struct PreviousKernelValidatorBuilder { previous_kernel: FixtureBuilder, diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/meter_gas_used.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/meter_gas_used.nr index c7bf62dfb182..7418f45462f3 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/meter_gas_used.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_output_composer_builder/meter_gas_used.nr @@ -2,7 +2,7 @@ use crate::components::tail_output_composer::meter_gas_used; use dep::types::{ abis::gas::Gas, constants::{ - DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_LOG_BYTE, + DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, PRIVATE_LOG_SIZE_IN_FIELDS, }, @@ -45,8 +45,8 @@ fn meter_gas_used_everything_succeeds() { computed_l2_gas += 3 * L2_GAS_PER_PRIVATE_LOG; builder.add_contract_class_log_hash(3001, 51); - metered_da_bytes += 51; - computed_l2_gas += 51 * L2_GAS_PER_LOG_BYTE; + metered_da_bytes += 51 * DA_BYTES_PER_FIELD; + computed_l2_gas += 1 * L2_GAS_PER_CONTRACT_CLASS_LOG; let data = builder.to_private_to_rollup_accumulated_data(); let gas = meter_gas_used(data); diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/meter_gas_used.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/meter_gas_used.nr index 6dbffae8fd14..7a6428ae5c05 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/meter_gas_used.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/meter_gas_used.nr @@ -2,9 +2,9 @@ use crate::components::tail_to_public_output_composer::meter_gas_used; use dep::types::{ abis::{gas::Gas, public_call_request::PublicCallRequest}, constants::{ - DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, L2_GAS_PER_L2_TO_L1_MSG, - L2_GAS_PER_LOG_BYTE, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, - PRIVATE_LOG_SIZE_IN_FIELDS, + DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, + L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, + L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, PRIVATE_LOG_SIZE_IN_FIELDS, }, tests::fixture_builder::FixtureBuilder, traits::Empty, @@ -77,14 +77,14 @@ fn meter_gas_used_everything_succeeds() { let total_num_side_effects = 4 + 3 + 1; let total_log_bytes = 5 * PRIVATE_LOG_SIZE_IN_FIELDS * DA_BYTES_PER_FIELD // private_logs - + 51; // contract_class_logs + + 51 * DA_BYTES_PER_FIELD; // contract_class_logs let computed_da_gas = (total_num_side_effects * DA_BYTES_PER_FIELD + total_log_bytes) * DA_GAS_PER_BYTE; let computed_l2_gas = 4 * L2_GAS_PER_NOTE_HASH + 3 * L2_GAS_PER_NULLIFIER + 1 * L2_GAS_PER_L2_TO_L1_MSG + 5 * L2_GAS_PER_PRIVATE_LOG - + 51 * L2_GAS_PER_LOG_BYTE /* contract_class_logs */ + + 1 * L2_GAS_PER_CONTRACT_CLASS_LOG + 2 * FIXED_AVM_STARTUP_L2_GAS; assert_eq( diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/tail_to_public_output_composer.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/tail_to_public_output_composer.nr index d4a76a03014f..56bedf0d846a 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/tail_to_public_output_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/tests/tail_to_public_output_composer_builder/tail_to_public_output_composer.nr @@ -2,9 +2,9 @@ use crate::tests::tail_to_public_output_composer_builder::TailToPublicOutputComp use dep::types::{ abis::gas::Gas, constants::{ - DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, L2_GAS_PER_L2_TO_L1_MSG, - L2_GAS_PER_LOG_BYTE, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, - PRIVATE_LOG_SIZE_IN_FIELDS, + DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, + L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, + L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, PRIVATE_LOG_SIZE_IN_FIELDS, }, tests::utils::{assert_array_eq, swap_items}, }; @@ -121,7 +121,8 @@ fn tail_to_public_output_composer_succeeds() { let mut num_msgs = 1; let mut num_private_logs = 2; let mut num_public_calls = 2; - let contract_class_log_bytes = 9; + let num_contract_class_logs = 1; + let contract_class_log_fields = 9; // Gas: revertible { num_note_hashes += 2; @@ -134,15 +135,15 @@ fn tail_to_public_output_composer_succeeds() { let num_da_fields = num_note_hashes + num_nullifiers + num_msgs + + contract_class_log_fields + (num_private_logs * PRIVATE_LOG_SIZE_IN_FIELDS); - let computed_da_gas = - (num_da_fields * DA_BYTES_PER_FIELD + contract_class_log_bytes) * DA_GAS_PER_BYTE; + let computed_da_gas = (num_da_fields * DA_BYTES_PER_FIELD) * DA_GAS_PER_BYTE; let computed_l2_gas = num_note_hashes * L2_GAS_PER_NOTE_HASH + num_nullifiers * L2_GAS_PER_NULLIFIER + num_msgs * L2_GAS_PER_L2_TO_L1_MSG + num_private_logs * L2_GAS_PER_PRIVATE_LOG - + contract_class_log_bytes * L2_GAS_PER_LOG_BYTE + + num_contract_class_logs * L2_GAS_PER_CONTRACT_CLASS_LOG + num_public_calls * FIXED_AVM_STARTUP_L2_GAS; assert_eq( diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/tx_effect.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/tx_effect.nr index c0e2da5c6166..c3997b79d8b5 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/tx_effect.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/tx_effect.nr @@ -1,7 +1,7 @@ use types::{ abis::{ - log_hash::ScopedLogHash, private_log::PrivateLog, public_data_write::PublicDataWrite, - public_log::PublicLog, + contract_class_log::ContractClassLog, private_log::PrivateLog, + public_data_write::PublicDataWrite, public_log::PublicLog, }, constants::{ MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, @@ -21,8 +21,7 @@ pub(crate) struct TxEffect { pub(crate) public_data_writes: [PublicDataWrite; MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX], pub(crate) private_logs: [PrivateLog; MAX_PRIVATE_LOGS_PER_TX], pub(crate) public_logs: [PublicLog; MAX_PUBLIC_LOGS_PER_TX], - pub(crate) contract_class_log_preimages_length: Field, - pub(crate) contract_class_logs_hashes: [ScopedLogHash; MAX_CONTRACT_CLASS_LOGS_PER_TX], + pub(crate) contract_class_logs: [ContractClassLog; MAX_CONTRACT_CLASS_LOGS_PER_TX], } impl Empty for TxEffect { @@ -39,8 +38,7 @@ impl Empty for TxEffect { ], private_logs: [PrivateLog::empty(); MAX_PRIVATE_LOGS_PER_TX], public_logs: [PublicLog::empty(); MAX_PUBLIC_LOGS_PER_TX], - contract_class_log_preimages_length: 0, - contract_class_logs_hashes: [ScopedLogHash::empty(); MAX_CONTRACT_CLASS_LOGS_PER_TX], + contract_class_logs: [ContractClassLog::empty(); MAX_CONTRACT_CLASS_LOGS_PER_TX], } } } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr index d5a2ae2582ae..4f0586f579ad 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr @@ -18,13 +18,17 @@ use crate::{ use super::components::constants::validate_tx_constant_data; use dep::types::{ abis::{ - append_only_tree_snapshot::AppendOnlyTreeSnapshot, constant_rollup_data::ConstantRollupData, - public_data_write::PublicDataWrite, public_log::PublicLog, sponge_blob::SpongeBlob, + append_only_tree_snapshot::AppendOnlyTreeSnapshot, + constant_rollup_data::ConstantRollupData, + contract_class_log::{ContractClassLog, validate_and_silo_contract_class_log}, + public_data_write::PublicDataWrite, + public_log::PublicLog, + sponge_blob::SpongeBlob, tube::PrivateTubeData, }, constants::{ - ARCHIVE_HEIGHT, MAX_PUBLIC_LOGS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - NOTE_HASH_SUBTREE_HEIGHT, TUBE_VK_INDEX, + ARCHIVE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_PUBLIC_LOGS_PER_TX, + MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_SUBTREE_HEIGHT, TUBE_VK_INDEX, }, data::{hash::compute_public_data_tree_value, public_data_hint::PublicDataHint}, hash::silo_l2_to_l1_message, @@ -49,6 +53,7 @@ pub struct PrivateBaseRollupInputs { archive_root_membership_witness: MembershipWitness, constants: ConstantRollupData, + contract_class_logs_preimages: [ContractClassLog; MAX_CONTRACT_CLASS_LOGS_PER_TX], } impl PrivateBaseRollupInputs { @@ -111,6 +116,20 @@ impl PrivateBaseRollupInputs { ); let out_hash = compute_kernel_out_hash(siloed_l2_to_l1_msgs); + + let mut siloed_contract_class_logs = + [ContractClassLog::empty(); MAX_CONTRACT_CLASS_LOGS_PER_TX]; + for i in 0..MAX_CONTRACT_CLASS_LOGS_PER_TX { + siloed_contract_class_logs[i] = validate_and_silo_contract_class_log( + self.contract_class_logs_preimages[i], + self.tube_data.public_inputs.end.contract_class_logs_hashes[i], + ); + } + + // These lengths have been constrained in validate_and_silo_contract_class_log to be correct. + let contract_class_logs_lengths = + self.tube_data.public_inputs.end.contract_class_logs_hashes.map(|l| l.log_hash.length); + let tx_effect = TxEffect { tx_hash: self.tube_data.public_inputs.hash(), revert_code: 0, @@ -121,14 +140,13 @@ impl PrivateBaseRollupInputs { public_data_writes: all_public_data_update_requests, private_logs: self.tube_data.public_inputs.end.private_logs, public_logs: [PublicLog::empty(); MAX_PUBLIC_LOGS_PER_TX], - contract_class_log_preimages_length: self - .tube_data - .public_inputs - .end - .contract_class_log_preimages_length, - contract_class_logs_hashes: self.tube_data.public_inputs.end.contract_class_logs_hashes, + contract_class_logs: siloed_contract_class_logs, }; - let end_sponge_blob = append_tx_effects_for_blob(tx_effect, self.start_sponge_blob); + let end_sponge_blob = append_tx_effects_for_blob( + tx_effect, + self.start_sponge_blob, + contract_class_logs_lengths, + ); // Perform membership checks that the notes provided exist within the historical trees data perform_archive_membership_check( @@ -215,14 +233,16 @@ mod tests { use dep::types::{ abis::{ append_only_tree_snapshot::AppendOnlyTreeSnapshot, - constant_rollup_data::ConstantRollupData, gas::Gas, gas_fees::GasFees, + constant_rollup_data::ConstantRollupData, contract_class_log::ContractClassLog, + gas::Gas, gas_fees::GasFees, kernel_circuit_public_inputs::PrivateToRollupKernelCircuitPublicInputs, nullifier_leaf_preimage::NullifierLeafPreimage, public_data_write::PublicDataWrite, side_effect::OrderedValue, sponge_blob::SpongeBlob, }, address::{AztecAddress, EthAddress}, constants::{ - ARCHIVE_HEIGHT, CONTRACT_CLASS_LOGS_PREFIX, L2_L1_MSGS_PREFIX, MAX_L2_TO_L1_MSGS_PER_TX, + ARCHIVE_HEIGHT, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, CONTRACT_CLASS_LOGS_PREFIX, + L2_L1_MSGS_PREFIX, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NOTE_HASH_TREE_HEIGHT, NOTES_PREFIX, @@ -232,7 +252,7 @@ mod tests { TUBE_VK_INDEX, TX_FEE_PREFIX, TX_START_PREFIX, }, data::{public_data_hint::PublicDataHint, PublicDataTreeLeaf, PublicDataTreeLeafPreimage}, - hash::silo_l2_to_l1_message, + hash::{poseidon2_hash, silo_contract_class_log, silo_l2_to_l1_message}, merkle_tree::MembershipWitness, messaging::l2_to_l1_message::ScopedL2ToL1Message, partial_state_reference::PartialStateReference, @@ -311,6 +331,8 @@ mod tests { // Index of the low leaf for the leaf that contains the fee payer's Fee Juice balance. // Used for building the public data hint read for the payment update request. fee_payer_balance_leaf_index: u32, + + contract_class_logs_preimages: BoundedVec, } impl PrivateBaseRollupInputsBuilder { @@ -366,6 +388,7 @@ mod tests { constants, fee_payer, fee_payer_balance_leaf_index, + contract_class_logs_preimages: BoundedVec::new(), } } @@ -501,6 +524,16 @@ mod tests { ) } + // Exists separately to allow us to append correct log preimages and hashes + unconstrained fn append_contract_class_log(&mut self, log_fields: [Field; N]) { + let padded_log_fields: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = + array_concat(log_fields, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); + let log = ContractClassLog::new(padded_log_fields); + self.contract_class_logs_preimages.push(log); + let log_hash = poseidon2_hash(padded_log_fields); + self.tube_data.add_contract_class_log_hash(log_hash, N); + } + unconstrained fn build_inputs(mut self) -> PrivateBaseRollupInputs { let mut tube_data = self.tube_data.to_private_tube_data(); @@ -593,6 +626,7 @@ mod tests { let start_sponge_blob = append_tx_effects_for_blob( pre_existing_tx_effects, SpongeBlob::new(TX_EFFECTS_BLOB_HASH_INPUT_FIELDS), + [0; MAX_CONTRACT_CLASS_LOGS_PER_TX], ); let state_diff_hints = PrivateBaseStateDiffHints { @@ -618,6 +652,7 @@ mod tests { }, constants: self.constants, fee_payer_fee_juice_balance_read_hint, + contract_class_logs_preimages: self.contract_class_logs_preimages.storage(), } } @@ -825,8 +860,6 @@ mod tests { let inputs = builder.build_inputs(); let outputs = inputs.execute(); let mut tx_effects = [0; 57]; - // TODO(#8954): This test uses 50 notes and 5 extra absorbed fields - // This may change when logs are deconstructed // Initial field = TX_START_PREFIX | 0 | txlen[0] txlen[1] | 0 | REVERT_CODE_PREFIX | 0 | revert_code // The first 3 are: // - i=0 init field @@ -907,7 +940,8 @@ mod tests { builder.tube_data.append_l2_to_l1_msgs(NUM_MSGS); builder.tube_data.append_private_logs(NUM_PRIV_EVENT_LOGS); // Below will only work with NUM_CC_LOGS=1 - builder.tube_data.add_contract_class_log_hash(1, 2); + let cc_log = [1, 2, 3]; + builder.append_contract_class_log(cc_log); let inputs = builder.build_inputs(); let outputs = inputs.execute(); @@ -970,16 +1004,28 @@ mod tests { } offset += total_private_logs_len; // cc logs + let total_contract_class_logs_len = NUM_CC_LOGS * (cc_log.len() + 1); let contract_class_logs_prefix = - encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, NUM_CC_LOGS); + encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, total_contract_class_logs_len); reconstructed_tx_effects[offset] = contract_class_logs_prefix; offset += 1; for i in 0..NUM_CC_LOGS { - reconstructed_tx_effects[offset + i] = types::hash::silo_contract_class_log_hash( - builder.tube_data.contract_class_logs_hashes.storage()[i], + let siloed_log = silo_contract_class_log( + builder.contract_class_logs_preimages.storage()[i], + builder.tube_data.contract_address, ); + let log_len = builder.tube_data.contract_class_logs_hashes.storage()[i].log_hash.length; + if log_len != 0 { + reconstructed_tx_effects[offset] = log_len as Field; + offset += 1; + } + for j in 0..CONTRACT_CLASS_LOG_SIZE_IN_FIELDS { + if j < log_len { + reconstructed_tx_effects[offset] = siloed_log.fields[j]; + offset += 1; + } + } } - offset += NUM_CC_LOGS; // Initial field = TX_START_PREFIX | 0 | txlen[0] txlen[1] | 0 | REVERT_CODE_PREFIX | 0 | revert_code // revert code = 0 diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr index e3d8c499bca9..33101d9fa288 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr @@ -11,15 +11,18 @@ use crate::{ }; use dep::types::{ abis::{ - avm_circuit_public_inputs::AvmProofData, combined_constant_data::CombinedConstantData, - constant_rollup_data::ConstantRollupData, log_hash::ScopedLogHash, sponge_blob::SpongeBlob, + avm_circuit_public_inputs::AvmProofData, + combined_constant_data::CombinedConstantData, + constant_rollup_data::ConstantRollupData, + contract_class_log::{ContractClassLog, validate_and_silo_contract_class_log}, + sponge_blob::SpongeBlob, tube::PublicTubeData, }, - constants::ARCHIVE_HEIGHT, + constants::{ARCHIVE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX}, hash::silo_l2_to_l1_message, merkle_tree::MembershipWitness, messaging::l2_to_l1_message::ScopedL2ToL1Message, - traits::Hash, + traits::{Empty, Hash}, utils::arrays::array_merge, }; @@ -31,6 +34,7 @@ pub struct PublicBaseRollupInputs { archive_root_membership_witness: MembershipWitness, constants: ConstantRollupData, + contract_class_logs_preimages: [ContractClassLog; MAX_CONTRACT_CLASS_LOGS_PER_TX], } impl PublicBaseRollupInputs { @@ -38,7 +42,7 @@ impl PublicBaseRollupInputs { self, reverted: bool, combined_constant_data: CombinedConstantData, - ) -> TxEffect { + ) -> (TxEffect, [u32; MAX_CONTRACT_CLASS_LOGS_PER_TX]) { let from_private = self.tube_data.public_inputs; let from_public = self.avm_proof_data.public_inputs; let revert_code = if reverted { 1 } else { 0 }; @@ -66,22 +70,31 @@ impl PublicBaseRollupInputs { from_private.revertible_accumulated_data.contract_class_logs_hashes, ) }; - let contract_class_log_preimages_length = - contract_class_logs_hashes.fold(0, |len, l: ScopedLogHash| len + l.log_hash.length); - - TxEffect { - tx_hash: self.tube_data.public_inputs.hash(), - revert_code, - transaction_fee: from_public.transaction_fee, - note_hashes: from_public.accumulated_data.note_hashes, - nullifiers: from_public.accumulated_data.nullifiers, - l2_to_l1_msgs: siloed_l2_to_l1_msgs, - public_data_writes: from_public.accumulated_data.public_data_writes, - private_logs, - public_logs: from_public.accumulated_data.public_logs, - contract_class_log_preimages_length, - contract_class_logs_hashes, + let mut siloed_contract_class_logs = + [ContractClassLog::empty(); MAX_CONTRACT_CLASS_LOGS_PER_TX]; + for i in 0..MAX_CONTRACT_CLASS_LOGS_PER_TX { + siloed_contract_class_logs[i] = validate_and_silo_contract_class_log( + self.contract_class_logs_preimages[i], + contract_class_logs_hashes[i], + ); } + // These lengths have been constrained in validate_and_silo_contract_class_log to be correct. + let contract_class_logs_lengths = contract_class_logs_hashes.map(|l| l.log_hash.length); + + ( + TxEffect { + tx_hash: self.tube_data.public_inputs.hash(), + revert_code, + transaction_fee: from_public.transaction_fee, + note_hashes: from_public.accumulated_data.note_hashes, + nullifiers: from_public.accumulated_data.nullifiers, + l2_to_l1_msgs: siloed_l2_to_l1_msgs, + public_data_writes: from_public.accumulated_data.public_data_writes, + private_logs, + public_logs: from_public.accumulated_data.public_logs, + contract_class_logs: siloed_contract_class_logs, + }, contract_class_logs_lengths, + ) } pub fn execute(self) -> BaseOrMergeRollupPublicInputs { @@ -120,12 +133,16 @@ impl PublicBaseRollupInputs { ); } - let tx_effect = self.generate_tx_effect(reverted, combined_constant_data); - // Append the tx effects for blob(s) + let (tx_effect, contract_class_logs_lengths) = + self.generate_tx_effect(reverted, combined_constant_data); let out_hash = compute_kernel_out_hash(tx_effect.l2_to_l1_msgs); - let end_sponge_blob = append_tx_effects_for_blob(tx_effect, self.start_sponge_blob); + let end_sponge_blob = append_tx_effects_for_blob( + tx_effect, + self.start_sponge_blob, + contract_class_logs_lengths, + ); // Perform membership checks that the notes provided exist within the historical trees data perform_archive_membership_check( @@ -165,13 +182,14 @@ mod tests { use dep::types::{ abis::{ append_only_tree_snapshot::AppendOnlyTreeSnapshot, - constant_rollup_data::ConstantRollupData, + constant_rollup_data::ConstantRollupData, contract_class_log::ContractClassLog, nullifier_leaf_preimage::NullifierLeafPreimage, public_data_write::PublicDataWrite, side_effect::OrderedValue, sponge_blob::SpongeBlob, tree_snapshots::TreeSnapshots, }, address::EthAddress, constants::{ - ARCHIVE_HEIGHT, AVM_VK_INDEX, CONTRACT_CLASS_LOGS_PREFIX, L2_L1_MSGS_PREFIX, + ARCHIVE_HEIGHT, AVM_VK_INDEX, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + CONTRACT_CLASS_LOGS_PREFIX, L2_L1_MSGS_PREFIX, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTES_PREFIX, NULLIFIERS_PREFIX, PRIVATE_LOG_SIZE_IN_FIELDS, PRIVATE_LOGS_PREFIX, PUBLIC_DATA_UPDATE_REQUESTS_PREFIX, @@ -179,7 +197,7 @@ mod tests { TX_FEE_PREFIX, TX_START_PREFIX, }, data::{PublicDataTreeLeaf, PublicDataTreeLeafPreimage}, - hash::silo_l2_to_l1_message, + hash::{poseidon2_hash, silo_contract_class_log, silo_l2_to_l1_message}, merkle_tree::MembershipWitness, messaging::l2_to_l1_message::ScopedL2ToL1Message, tests::{ @@ -212,6 +230,7 @@ mod tests { public_data_writes: BoundedVec<(u32, PublicDataTreeLeaf), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>, nullifiers: BoundedVec, constants: ConstantRollupData, + contract_class_logs_preimages: BoundedVec, } impl PublicBaseRollupInputsBuilder { @@ -271,6 +290,16 @@ mod tests { sibling_path } + // Exists separately to allow us to append correct log preimages and hashes + unconstrained fn append_contract_class_log(&mut self, log_fields: [Field; N]) { + let padded_log_fields: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = + array_concat(log_fields, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); + let log = ContractClassLog::new(padded_log_fields); + self.contract_class_logs_preimages.push(log); + let log_hash = poseidon2_hash(padded_log_fields); + self.tube_data.add_contract_class_log_hash(log_hash, N); + } + unconstrained fn build_inputs(mut self) -> PublicBaseRollupInputs { let mut tube_data = self.tube_data.to_public_tube_data(); let mut avm_proof_data = self.avm_data.to_avm_proof_data(self.reverted); @@ -310,6 +339,7 @@ mod tests { let start_sponge_blob = append_tx_effects_for_blob( tx_effect, SpongeBlob::new(TX_EFFECTS_BLOB_HASH_INPUT_FIELDS), + [0; MAX_CONTRACT_CLASS_LOGS_PER_TX], ); PublicBaseRollupInputs { @@ -321,6 +351,7 @@ mod tests { sibling_path: start_archive.get_sibling_path(0), }, constants: self.constants, + contract_class_logs_preimages: self.contract_class_logs_preimages.storage(), } } @@ -356,6 +387,7 @@ mod tests { public_data_writes: BoundedVec::new(), nullifiers: BoundedVec::new(), constants: ConstantRollupData::empty(), + contract_class_logs_preimages: BoundedVec::new(), } } } @@ -374,8 +406,6 @@ mod tests { let inputs = builder.build_inputs(); let outputs = inputs.execute(); let mut tx_effects = [0; 54]; - // TODO(#8954): This test uses 50 notes and 4 extra absorbed fields - // This may change when logs are deconstructed // Initial field = TX_START_PREFIX | 0 | txlen[0] txlen[1] | 0 | REVERT_CODE_PREFIX | 0 | revert_code // The first 4 are: i=0 init field, i=1: tx hash, i=2: tx fee, i=3: note prefix tx_effects[0] = field_from_bytes( @@ -409,6 +439,8 @@ mod tests { let NUM_PRIV_EVENT_LOGS = 4; let NUM_PUB_LOGS = 6; let NUM_CC_LOGS = 1; + // Below will only work with NUM_CC_LOGS=1 + let cc_log = [1, 2, 3]; let PUB_DATA_SLOT = 25; let PUB_DATA_VALUE = 60; let TOTAL_BLOB_FIELDS = 3 // revert code, tx hash and tx fee @@ -420,7 +452,7 @@ mod tests { + 1 // L2 to L1 msgs and prefix + NUM_PUB_LOGS * PUBLIC_LOG_SIZE_IN_FIELDS + 1 // public logs and prefix - + NUM_CC_LOGS + + NUM_CC_LOGS * (cc_log.len() + 1) + 1 // contract class logs and prefix + 2 + 1 // single public data update (2 fields) and prefix @@ -450,7 +482,7 @@ mod tests { builder.tube_data.append_private_logs(NUM_PRIV_EVENT_LOGS); builder.avm_data.append_public_logs(NUM_PUB_LOGS); // Below will only work with NUM_CC_LOGS=1 - builder.tube_data.add_contract_class_log_hash(1, 2); + builder.append_contract_class_log(cc_log); let inputs = builder.build_inputs(); let outputs = inputs.execute(); @@ -543,16 +575,28 @@ mod tests { } offset += NUM_PUB_LOGS * PUBLIC_LOG_SIZE_IN_FIELDS; // cc logs + let total_contract_class_logs_len = NUM_CC_LOGS * (cc_log.len() + 1); let contract_class_logs_prefix = - encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, NUM_CC_LOGS); + encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, total_contract_class_logs_len); reconstructed_tx_effects[offset] = contract_class_logs_prefix; offset += 1; for i in 0..NUM_CC_LOGS { - reconstructed_tx_effects[offset + i] = types::hash::silo_contract_class_log_hash( - builder.tube_data.contract_class_logs_hashes.storage()[i], + let siloed_log = silo_contract_class_log( + builder.contract_class_logs_preimages.storage()[i], + builder.tube_data.contract_address, ); + let log_len = builder.tube_data.contract_class_logs_hashes.storage()[i].log_hash.length; + if log_len != 0 { + reconstructed_tx_effects[offset] = log_len as Field; + offset += 1; + } + for j in 0..CONTRACT_CLASS_LOG_SIZE_IN_FIELDS { + if j < log_len { + reconstructed_tx_effects[offset] = siloed_log.fields[j]; + offset += 1; + } + } } - offset += NUM_CC_LOGS; // Sanity check assert(offset == TOTAL_BLOB_FIELDS); diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr index 68422209e2ac..99ece9b77364 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr @@ -5,19 +5,19 @@ use crate::abis::{ use super::abis::tx_effect::TxEffect; use dep::types::{ abis::{ - log_hash::ScopedLogHash, private_log::PrivateLog, public_data_write::PublicDataWrite, - public_log::PublicLog, sponge_blob::SpongeBlob, + contract_class_log::ContractClassLog, private_log::PrivateLog, + public_data_write::PublicDataWrite, public_log::PublicLog, sponge_blob::SpongeBlob, }, constants::{ - AZTEC_MAX_EPOCH_DURATION, CONTRACT_CLASS_LOGS_PREFIX, L2_L1_MSGS_PREFIX, - MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, - MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, MAX_PUBLIC_LOGS_PER_TX, - MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTES_PREFIX, NULLIFIERS_PREFIX, - PRIVATE_LOG_SIZE_IN_FIELDS, PRIVATE_LOGS_PREFIX, PUBLIC_DATA_UPDATE_REQUESTS_PREFIX, - PUBLIC_LOG_SIZE_IN_FIELDS, PUBLIC_LOGS_PREFIX, REVERT_CODE_PREFIX, TX_FEE_PREFIX, - TX_START_PREFIX, + AZTEC_MAX_EPOCH_DURATION, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, CONTRACT_CLASS_LOGS_PREFIX, + L2_L1_MSGS_PREFIX, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, + MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, + MAX_PUBLIC_LOGS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTES_PREFIX, + NULLIFIERS_PREFIX, PRIVATE_LOG_SIZE_IN_FIELDS, PRIVATE_LOGS_PREFIX, + PUBLIC_DATA_UPDATE_REQUESTS_PREFIX, PUBLIC_LOG_SIZE_IN_FIELDS, PUBLIC_LOGS_PREFIX, + REVERT_CODE_PREFIX, TX_FEE_PREFIX, TX_START_PREFIX, }, - hash::{accumulate_sha256, silo_contract_class_log_hash}, + hash::accumulate_sha256, merkle_tree::VariableMerkleTree, traits::{Empty, Serialize}, utils::arrays::{array_length, array_merge}, @@ -149,10 +149,9 @@ pub fn encode_blob_prefix(input_type: u8, array_len: u32) -> Field { // MAX_NULLIFIERS_PER_TX fields for nullifiers // MAX_L2_TO_L1_MSGS_PER_TX for L2 to L1 messages // MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX public data update requests -> MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2 fields -// TODO(#8954): When logs are refactored into fields, we will append the values here, for now appending the log hashes: // MAX_PRIVATE_LOGS_PER_TX * PRIVATE_LOG_SIZE_IN_FIELDS fields for private logs // MAX_PUBLIC_LOGS_PER_TX * PUBLIC_LOG_SIZE_IN_FIELDS fields for public logs -// MAX_CONTRACT_CLASS_LOGS_PER_TX fields for contract class logs +// MAX_CONTRACT_CLASS_LOGS_PER_TX * (CONTRACT_CLASS_LOG_SIZE_IN_FIELDS + 1) fields for contract class logs // 7 fields for prefixes for each of the above categories pub(crate) global TX_EFFECTS_BLOB_HASH_INPUT_FIELDS: u32 = 1 + 1 @@ -163,14 +162,16 @@ pub(crate) global TX_EFFECTS_BLOB_HASH_INPUT_FIELDS: u32 = 1 + MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2 + MAX_PRIVATE_LOGS_PER_TX * PRIVATE_LOG_SIZE_IN_FIELDS + MAX_PUBLIC_LOGS_PER_TX * PUBLIC_LOG_SIZE_IN_FIELDS - + MAX_CONTRACT_CLASS_LOGS_PER_TX + + MAX_CONTRACT_CLASS_LOGS_PER_TX * (CONTRACT_CLASS_LOG_SIZE_IN_FIELDS + 1) + 7; pub(crate) fn append_tx_effects_for_blob( tx_effect: TxEffect, start_sponge_blob: SpongeBlob, + contract_class_logs_lengths: [u32; MAX_CONTRACT_CLASS_LOGS_PER_TX], ) -> SpongeBlob { - let (mut tx_effects_hash_input, offset) = get_tx_effects_hash_input(tx_effect); + let (mut tx_effects_hash_input, offset) = + get_tx_effects_hash_input(tx_effect, contract_class_logs_lengths); // NB: using start.absorb & returning start caused issues in ghost values appearing in // base_rollup_inputs.start when using a fresh sponge. These only appeared when simulating via wasm. @@ -187,6 +188,7 @@ pub(crate) fn append_tx_effects_for_blob( fn get_tx_effects_hash_input( tx_effect: TxEffect, + contract_class_logs_lengths: [u32; MAX_CONTRACT_CLASS_LOGS_PER_TX], ) -> ([Field; TX_EFFECTS_BLOB_HASH_INPUT_FIELDS], u32) { tx_effect.transaction_fee.assert_max_bit_size::<29 * 8>(); let TWO_POW_240 = 1766847064778384329583297500742918515827483896875618958121606201292619776; @@ -200,9 +202,7 @@ fn get_tx_effects_hash_input( let public_data_update_requests = tx_effect.public_data_writes; let private_logs = tx_effect.private_logs; let public_logs = tx_effect.public_logs; - let contract_class_logs = tx_effect.contract_class_logs_hashes.map(|log: ScopedLogHash| { - silo_contract_class_log_hash(log) - }); + let contract_class_logs = tx_effect.contract_class_logs; /// Safety: This constructs the array of effects and is constrained below. let mut tx_effects_hash_input = unsafe { @@ -216,6 +216,7 @@ fn get_tx_effects_hash_input( private_logs, public_logs, contract_class_logs, + contract_class_logs_lengths, tx_effect.revert_code as Field, ) }; @@ -356,23 +357,39 @@ fn get_tx_effects_hash_input( offset += array_len; } - // TODO(#8954): When logs are refactored into fields, we will append the values here - // Currently appending the single log hash as an interim solution // CONTRACT CLASS LOGS - array_len = array_length(contract_class_logs); + // Note: we can use contract_class_logs_lengths here as they are constrained to be zero if + // the log is empty, and the logs are constrained to be sorted L to R. + // This is cheaper because array_length uses is_empty, which is expensive for the logs. + array_len = array_length(contract_class_logs_lengths); if array_len != 0 { let mut check_elt = true; - let contract_class_logs_prefix = encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, array_len); - assert_eq(tx_effects_hash_input[offset], contract_class_logs_prefix); + let prefix_index = offset; + let mut total_cc_log_len = 0; + offset += 1; for j in 0..MAX_CONTRACT_CLASS_LOGS_PER_TX { - check_elt &= j != array_len; - if check_elt { - assert_eq(tx_effects_hash_input[offset + j], contract_class_logs[j]); + // These lengths have been constrained to be correct. + let log_len = contract_class_logs_lengths[j]; + if log_len != 0 { + assert_eq(tx_effects_hash_input[offset], log_len as Field); + offset += 1; + // plus one for prefix + total_cc_log_len += log_len + 1; + check_elt = true; + } + for k in 0..CONTRACT_CLASS_LOG_SIZE_IN_FIELDS { + check_elt &= k != log_len; + if check_elt { + assert_eq(tx_effects_hash_input[offset + k], contract_class_logs[j].fields[k]); + } } + offset += log_len; } - offset += array_len; + let contract_class_logs_prefix = + encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, total_cc_log_len); + assert_eq(tx_effects_hash_input[prefix_index], contract_class_logs_prefix); } // Now we know the number of fields appended, we can assign the first value: @@ -403,7 +420,8 @@ unconstrained fn get_tx_effects_hash_input_helper( public_data_update_requests: [PublicDataWrite; MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX], private_logs: [PrivateLog; MAX_PRIVATE_LOGS_PER_TX], public_logs: [PublicLog; MAX_PUBLIC_LOGS_PER_TX], - contract_class_logs: [Field; MAX_CONTRACT_CLASS_LOGS_PER_TX], + contract_class_logs: [ContractClassLog; MAX_CONTRACT_CLASS_LOGS_PER_TX], + contract_class_logs_lengths: [u32; MAX_CONTRACT_CLASS_LOGS_PER_TX], revert_code: Field, ) -> [Field; TX_EFFECTS_BLOB_HASH_INPUT_FIELDS] { let mut tx_effects_hash_input = [0; TX_EFFECTS_BLOB_HASH_INPUT_FIELDS]; @@ -510,19 +528,29 @@ unconstrained fn get_tx_effects_hash_input_helper( offset += array_len; } - // TODO(#8954): When logs are refactored into fields, we will append the values here - // Currently appending the single log hash as an interim solution // CONTRACT CLASS LOGS - let array_len = array_length(contract_class_logs); - if array_len != 0 { - let contract_class_logs_prefix = encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, array_len); - tx_effects_hash_input[offset] = contract_class_logs_prefix; + let num_cc_logs = array_length(contract_class_logs); + if num_cc_logs != 0 { + let prefix_index = offset; + let mut total_cc_log_len = 0; + offset += 1; - for j in 0..array_len { - tx_effects_hash_input[offset + j] = contract_class_logs[j]; + for j in 0..num_cc_logs { + let log_len = contract_class_logs_lengths[j]; + // prefix this log with its field length + tx_effects_hash_input[offset] = log_len as Field; + offset += 1; + for k in 0..log_len { + tx_effects_hash_input[offset] = contract_class_logs[j].fields[k]; + offset += 1; + } + // plus one for prefix + total_cc_log_len += log_len + 1; } - offset += array_len; + let contract_class_logs_prefix = + encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, total_cc_log_len); + tx_effects_hash_input[prefix_index] = contract_class_logs_prefix; } // Now we know the number of fields appended, we can assign the first value: diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_to_rollup_accumulated_data.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_to_rollup_accumulated_data.nr index 1d34dab228a7..f237cde86b50 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_to_rollup_accumulated_data.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/accumulated_data/private_to_rollup_accumulated_data.nr @@ -16,10 +16,6 @@ pub struct PrivateToRollupAccumulatedData { pub private_logs: [PrivateLog; MAX_PRIVATE_LOGS_PER_TX], pub contract_class_logs_hashes: [ScopedLogHash; MAX_CONTRACT_CLASS_LOGS_PER_TX], - - // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the - // variable-length data. - pub contract_class_log_preimages_length: Field, } impl Empty for PrivateToRollupAccumulatedData { @@ -30,7 +26,6 @@ impl Empty for PrivateToRollupAccumulatedData { l2_to_l1_msgs: [ScopedL2ToL1Message::empty(); MAX_L2_TO_L1_MSGS_PER_TX], private_logs: [PrivateLog::empty(); MAX_PRIVATE_LOGS_PER_TX], contract_class_logs_hashes: [ScopedLogHash::empty(); MAX_CONTRACT_CLASS_LOGS_PER_TX], - contract_class_log_preimages_length: 0, } } } @@ -51,7 +46,6 @@ impl Serialize for PrivateToRollupAcc for i in 0..self.contract_class_logs_hashes.len() { fields.extend_from_array(self.contract_class_logs_hashes[i].serialize()); } - fields.push(self.contract_class_log_preimages_length); assert_eq(fields.len(), PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH); @@ -80,7 +74,6 @@ impl Deserialize for PrivateToRollupA ScopedLogHash::deserialize, [ScopedLogHash::empty(); MAX_CONTRACT_CLASS_LOGS_PER_TX], ), - contract_class_log_preimages_length: reader.read(), }; reader.finish(); item @@ -94,10 +87,6 @@ impl Eq for PrivateToRollupAccumulatedData { & (self.l2_to_l1_msgs == other.l2_to_l1_msgs) & (self.private_logs == other.private_logs) & (self.contract_class_logs_hashes == other.contract_class_logs_hashes) - & ( - self.contract_class_log_preimages_length - == other.contract_class_log_preimages_length - ) } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr new file mode 100644 index 000000000000..bd1699d7a5dc --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr @@ -0,0 +1,30 @@ +use crate::{ + abis::{log::Log, log_hash::ScopedLogHash}, + constants::CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + hash::{poseidon2_hash, silo_contract_class_log}, + traits::is_empty, + utils::arrays::validate_trailing_zeroes, +}; + +// TODO(MW): add new constant for this - the below is just the largest combination atm +pub type ContractClassLog = Log; + +pub fn validate_and_silo_contract_class_log( + log: ContractClassLog, + log_hash: ScopedLogHash, +) -> ContractClassLog { + // Validate length + let length = validate_trailing_zeroes(log.fields); + assert_eq(log_hash.log_hash.length, length, "mismatched contract class log length"); + if length == 0 { + assert(is_empty(log_hash), "mismatched contract class log hash"); + } else { + // Validate hash + let hashed_log = poseidon2_hash(log.fields); + assert_eq(log_hash.log_hash.value, hashed_log, "mismatched contract class log hash"); + } + + // Silo log + silo_contract_class_log(log, log_hash.contract_address) +} + diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr index 483bc3e39f94..9253823aa62f 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr @@ -9,7 +9,7 @@ use crate::{ pub struct LogHash { pub value: Field, pub counter: u32, - pub length: Field, + pub length: u32, // TODO(MW): is this still required? } impl Ordered for LogHash { @@ -40,13 +40,13 @@ impl Empty for LogHash { impl Serialize for LogHash { fn serialize(self) -> [Field; LOG_HASH_LENGTH] { - [self.value, self.counter as Field, self.length] + [self.value, self.counter as Field, self.length as Field] } } impl Deserialize for LogHash { fn deserialize(values: [Field; LOG_HASH_LENGTH]) -> Self { - Self { value: values[0], counter: values[1] as u32, length: values[2] } + Self { value: values[0], counter: values[1] as u32, length: values[2] as u32 } } } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr index 8f2b3c321206..3ed14a990ae4 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/mod.nr @@ -21,6 +21,7 @@ pub mod read_request; pub mod log; pub mod private_log; pub mod public_log; +pub mod contract_class_log; pub mod log_hash; pub mod note_hash; pub mod nullifier; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 57675a3d2bda..2618f77f4f23 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -254,6 +254,9 @@ pub global PRIVATE_LOG_DATA_LENGTH: u32 = PRIVATE_LOG_SIZE_IN_FIELDS + 1 /* note_hash_counter */ + 1 /* counter */; pub global SCOPED_PRIVATE_LOG_DATA_LENGTH: u32 = PRIVATE_LOG_DATA_LENGTH + 1; +// TODO(MW): add new constant for this - the below is just the largest combination atm +pub global CONTRACT_CLASS_LOG_SIZE_IN_FIELDS: u32 = MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS + + REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS; pub global LOG_HASH_LENGTH: u32 = 3; pub global SCOPED_LOG_HASH_LENGTH: u32 = LOG_HASH_LENGTH + 1; pub global NOTE_HASH_LENGTH: u32 = 2; @@ -350,8 +353,7 @@ pub global PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH: u32 = MAX_NOTE_HASHES_PER_ + MAX_NULLIFIERS_PER_TX + (MAX_L2_TO_L1_MSGS_PER_TX * SCOPED_L2_TO_L1_MESSAGE_LENGTH) + (PRIVATE_LOG_SIZE_IN_FIELDS * MAX_PRIVATE_LOGS_PER_TX) - + (SCOPED_LOG_HASH_LENGTH * MAX_CONTRACT_CLASS_LOGS_PER_TX) - + 1 /* contract_class_log_preimages_length */; + + (SCOPED_LOG_HASH_LENGTH * MAX_CONTRACT_CLASS_LOGS_PER_TX); pub global TX_CONSTANT_DATA_LENGTH: u32 = BLOCK_HEADER_LENGTH + TX_CONTEXT_LENGTH @@ -663,6 +665,7 @@ pub global L2_GAS_PER_L1_TO_L2_MSG_READ_REQUEST: u32 = pub global L2_GAS_PER_LOG_BYTE: u32 = 4; // Zero gas because we don't have to hash and validate the private logs pub global L2_GAS_PER_PRIVATE_LOG: u32 = 0; +pub global L2_GAS_PER_CONTRACT_CLASS_LOG: u32 = 0; // Gas for writing message to L1 portal pub global L2_GAS_PER_L2_TO_L1_MSG: u32 = 200; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr index 78f1b38318c7..4147e749e8c4 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr @@ -1,8 +1,8 @@ use crate::{ abis::{ contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage, + contract_class_log::ContractClassLog, function_selector::FunctionSelector, - log_hash::{LogHash, ScopedLogHash}, note_hash::ScopedNoteHash, nullifier::ScopedNullifier, private_log::{PrivateLog, PrivateLogData}, @@ -16,7 +16,7 @@ use crate::{ merkle_tree::root::root_from_sibling_path, messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message}, poseidon2::Poseidon2Sponge, - traits::{FromField, Hash, is_empty, ToField}, + traits::{FromField, Hash, ToField}, utils::field::field_from_bytes_32_trunc, }; use super::{constants::TWO_POW_64, utils::{arrays::array_concat, field::field_from_bytes}}; @@ -117,15 +117,23 @@ pub fn silo_private_log(private_log: Scoped) -> PrivateLog { } } -fn compute_siloed_contract_class_log_hash(address: AztecAddress, log_hash: Field) -> Field { - accumulate_sha256([address.to_field(), log_hash]) +fn compute_siloed_contract_class_log_field( + contract_address: AztecAddress, + first_field: Field, +) -> Field { + poseidon2_hash([contract_address.to_field(), first_field]) } -pub fn silo_contract_class_log_hash(log_hash: ScopedLogHash) -> Field { - if log_hash.contract_address.is_zero() { - 0 +pub fn silo_contract_class_log( + contract_class_log: ContractClassLog, + contract_address: AztecAddress, +) -> ContractClassLog { + if contract_address.is_zero() { + contract_class_log } else { - compute_siloed_contract_class_log_hash(log_hash.contract_address, log_hash.value()) + let mut log = contract_class_log; + log.fields[0] = compute_siloed_contract_class_log_field(contract_address, log.fields[0]); + log } } @@ -203,29 +211,6 @@ pub fn accumulate_sha256(input: [Field; 2]) -> Field { sha256_to_field(hash_input_flattened) } -// Computes the final logs hash for a tx. -pub fn compute_tx_logs_hash(logs: [LogHash; N]) -> Field { - // Convert each field element into a byte array and append the bytes to `hash_input_flattened` - let mut hash_input_flattened = [0; N * 32]; - for offset in 0..N { - // TODO: This is not checking that the decomposition is smaller than P - let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256); - for byte_index in 0..32 { - hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index]; - } - } - // Ideally we would push to a slice then hash, but there is no sha_slice - // Hardcode to 256 bytes for now - let mut hash = sha256_to_field(hash_input_flattened); - // Not having a 0 value hash for empty logs causes issues with empty txs - // used for padding. Returning early is currently unsupported. - // We always provide sorted logs here, so 0 being empty means all are empty. - if is_empty(logs[0]) { - hash = 0; - } - hash -} - pub fn verification_key_hash(key: [Field; N]) -> Field { crate::hash::poseidon2_hash(key) } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr index 69911eb8241a..8dc0cd547164 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/tests/fixture_builder.nr @@ -134,7 +134,6 @@ pub struct FixtureBuilder { pub private_logs: BoundedVec, MAX_PRIVATE_LOGS_PER_TX>, pub public_logs: BoundedVec, pub contract_class_logs_hashes: BoundedVec, - pub contract_class_log_preimages_length: Field, pub public_data_writes: BoundedVec, pub private_call_requests: BoundedVec, pub public_call_requests: BoundedVec, MAX_ENQUEUED_CALLS_PER_TX>, @@ -573,7 +572,6 @@ impl FixtureBuilder { contract_class_logs_hashes: self.contract_class_logs_hashes.storage().map( |l: ScopedLogHash| l.expose_to_public(), ), - contract_class_log_preimages_length: self.contract_class_log_preimages_length, } } @@ -1012,10 +1010,9 @@ impl FixtureBuilder { } } - pub fn add_contract_class_log_hash(&mut self, hash: Field, length: Field) { + pub fn add_contract_class_log_hash(&mut self, hash: Field, length: u32) { let log_hash = LogHash { value: hash, counter: self.next_counter(), length }; self.contract_class_logs_hashes.push(log_hash.scope(self.contract_address)); - self.contract_class_log_preimages_length += length; } pub fn add_private_call_request_for_private_call(&mut self, private_call: PrivateCallData) { @@ -1235,7 +1232,6 @@ impl Empty for FixtureBuilder { private_logs: BoundedVec::new(), public_logs: BoundedVec::new(), contract_class_logs_hashes: BoundedVec::new(), - contract_class_log_preimages_length: 0, public_data_writes: BoundedVec::new(), private_call_requests: BoundedVec::new(), public_call_requests: BoundedVec::new(), diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr index 67b27f858c09..4a41af5a82dd 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr @@ -81,6 +81,25 @@ pub unconstrained fn find_index_hint( index } +// As above, but counts from the end of the array. +// Useful for finding trailing zeroes in arrays which may have valid empty values. +// e.g. removing trailing 0s from [1, 0, 2, 0, 0, 0] -> [1, 0, 2] +pub unconstrained fn find_index_hint_from_end( + array: [T; N], + find: fn[Env](T) -> bool, +) -> u32 { + let mut index = 0; + for i in 0..N { + let j = N - i - 1; + // We check `index == 0` to ensure that we only update the index if we haven't found a match yet. + if (index == 0) & find(array[j]) { + // Since we are looking from the end of the array, the index at which find() is false is the next one: + index = j + 1; + } + } + index +} + // Routine which validates that all zero values of an array form a contiguous region at the end, i.e., // of the form: [*,*,*...,0,0,0,0] where any * is non-zero. Note that a full array of non-zero values is // valid. @@ -101,6 +120,29 @@ where length } +// Routine which validates that zero values of an array form a contiguous region at the end, i.e., +// of the form: [*,*,*...,0,0,0,0] where * is any value (zeroes allowed). +pub fn validate_trailing_zeroes(array: [T; N]) -> u32 +where + T: Empty + Eq, +{ + /// Safety: this value is constrained in the below loop. + let length = unsafe { find_index_hint_from_end(array, |elem: T| !is_empty(elem)) }; + // Check the elt just before length is non-zero: + if length != 0 { + assert(!is_empty(array[length - 1]), "invalid array"); + } + // Check all beyond length are zero: + let mut check_zero = false; + for i in 0..N { + check_zero |= i == length; + if check_zero { + assert(is_empty(array[i]), "invalid array"); + } + } + length +} + // Helper function to count the number of non-empty elements in a validated array. // Important: Only use it for validated arrays where validate_array(array) returns true, // which ensures that: @@ -230,6 +272,30 @@ fn smoke_validate_array() { assert(validate_array(valid_array) == 3); } +#[test] +fn smoke_validate_array_trailing() { + let valid_array: [Field; 0] = []; + assert(validate_trailing_zeroes(valid_array) == 0); + + let valid_array = [0]; + assert(validate_trailing_zeroes(valid_array) == 0); + + let valid_array = [3]; + assert(validate_trailing_zeroes(valid_array) == 1); + + let valid_array = [1, 0, 3]; + assert(validate_trailing_zeroes(valid_array) == 3); + + let valid_array = [1, 0, 3, 0]; + assert(validate_trailing_zeroes(valid_array) == 3); + + let valid_array = [1, 2, 3, 0, 0]; + assert(validate_trailing_zeroes(valid_array) == 3); + + let valid_array = [0, 0, 3, 0, 0]; + assert(validate_trailing_zeroes(valid_array) == 3); +} + #[test(should_fail_with = "invalid array")] fn smoke_validate_array_invalid_case0() { let invalid_array = [0, 1]; diff --git a/yarn-project/archiver/src/archiver/archiver.test.ts b/yarn-project/archiver/src/archiver/archiver.test.ts index 82d8b32072d0..be17b569aab6 100644 --- a/yarn-project/archiver/src/archiver/archiver.test.ts +++ b/yarn-project/archiver/src/archiver/archiver.test.ts @@ -569,19 +569,13 @@ describe('Archiver', () => { */ async function makeRollupTx(l2Block: L2Block) { const header = toHex(l2Block.header.toBuffer()); - const body = toHex(l2Block.body.toBuffer()); const blobInput = Blob.getEthBlobEvaluationInputs(await Blob.getBlobs(l2Block.body.toBlobFields())); const archive = toHex(l2Block.archive.root.toBuffer()); const blockHash = toHex((await l2Block.header.hash()).toBuffer()); const rollupInput = encodeFunctionData({ abi: RollupAbi, functionName: 'propose', - args: [ - { header, archive, blockHash, oracleInput: { feeAssetPriceModifier: 0n }, txHashes: [] }, - [], - body, - blobInput, - ], + args: [{ header, archive, blockHash, oracleInput: { feeAssetPriceModifier: 0n }, txHashes: [] }, [], blobInput], }); const forwarderInput = encodeFunctionData({ diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index c78c257a3d54..89d5b823be7b 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -17,7 +17,6 @@ import { type TxHash, type TxReceipt, type TxScopedL2Log, - type UnencryptedL2Log, getEpochNumberAtTimestamp, getSlotAtTimestamp, getSlotRangeForEpoch, @@ -25,6 +24,7 @@ import { } from '@aztec/circuit-types'; import { type BlockHeader, + type ContractClassLog, type ContractClassPublic, type ContractDataSource, type ContractInstanceWithAddress, @@ -900,10 +900,10 @@ class ArchiverStoreHelper * Extracts and stores contract classes out of ContractClassRegistered events emitted by the class registerer contract. * @param allLogs - All logs emitted in a bunch of blocks. */ - async #updateRegisteredContractClasses(allLogs: UnencryptedL2Log[], blockNum: number, operation: Operation) { + async #updateRegisteredContractClasses(allLogs: ContractClassLog[], blockNum: number, operation: Operation) { const contractClassRegisteredEvents = allLogs - .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data)) - .map(log => ContractClassRegisteredEvent.fromLog(log.data)); + .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log)) + .map(log => ContractClassRegisteredEvent.fromLog(log)); const contractClasses = await Promise.all(contractClassRegisteredEvents.map(e => e.toContractClassPublic())); if (contractClasses.length > 0) { @@ -976,14 +976,14 @@ class ArchiverStoreHelper * @param _blockNum - The block number * @returns */ - async #storeBroadcastedIndividualFunctions(allLogs: UnencryptedL2Log[], _blockNum: number) { + async #storeBroadcastedIndividualFunctions(allLogs: ContractClassLog[], _blockNum: number) { // Filter out private and unconstrained function broadcast events const privateFnEvents = allLogs - .filter(log => PrivateFunctionBroadcastedEvent.isPrivateFunctionBroadcastedEvent(log.data)) - .map(log => PrivateFunctionBroadcastedEvent.fromLog(log.data)); + .filter(log => PrivateFunctionBroadcastedEvent.isPrivateFunctionBroadcastedEvent(log)) + .map(log => PrivateFunctionBroadcastedEvent.fromLog(log)); const unconstrainedFnEvents = allLogs - .filter(log => UnconstrainedFunctionBroadcastedEvent.isUnconstrainedFunctionBroadcastedEvent(log.data)) - .map(log => UnconstrainedFunctionBroadcastedEvent.fromLog(log.data)); + .filter(log => UnconstrainedFunctionBroadcastedEvent.isUnconstrainedFunctionBroadcastedEvent(log)) + .map(log => UnconstrainedFunctionBroadcastedEvent.fromLog(log)); // Group all events by contract class id for (const [classIdString, classEvents] of Object.entries( @@ -1035,9 +1035,7 @@ class ArchiverStoreHelper this.store.addLogs(blocks.map(block => block.data)), // Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them ...blocks.map(async block => { - const contractClassLogs = block.data.body.txEffects - .flatMap(txEffect => (txEffect ? [txEffect.contractClassLogs] : [])) - .flatMap(txLog => txLog.unrollLogs()); + const contractClassLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.contractClassLogs); // ContractInstanceDeployed event logs are broadcast in privateLogs. const privateLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.privateLogs); const publicLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.publicLogs); @@ -1069,10 +1067,7 @@ class ArchiverStoreHelper const opResults = await Promise.all([ // Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them ...blocks.map(async block => { - const contractClassLogs = block.data.body.txEffects - .flatMap(txEffect => (txEffect ? [txEffect.contractClassLogs] : [])) - .flatMap(txLog => txLog.unrollLogs()); - + const contractClassLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.contractClassLogs); // ContractInstanceDeployed event logs are broadcast in privateLogs. const privateLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.privateLogs); const publicLogs = block.data.body.txEffects.flatMap(txEffect => txEffect.publicLogs); diff --git a/yarn-project/archiver/src/archiver/data_retrieval.ts b/yarn-project/archiver/src/archiver/data_retrieval.ts index e832e0befd93..d76861abec3c 100644 --- a/yarn-project/archiver/src/archiver/data_retrieval.ts +++ b/yarn-project/archiver/src/archiver/data_retrieval.ts @@ -216,8 +216,7 @@ async function getBlockFromRollupTx( throw new Error(`Unexpected rollup method called ${rollupFunctionName}`); } - // TODO(#9101): 'bodyHex' will be removed from below - const [decodedArgs, , bodyHex, blobInputs] = rollupArgs! as readonly [ + const [decodedArgs, , blobInputs] = rollupArgs! as readonly [ { header: Hex; archive: Hex; @@ -229,7 +228,6 @@ async function getBlockFromRollupTx( }, ViemSignature[], Hex, - Hex, ]; const header = BlockHeader.fromBuffer(Buffer.from(hexToBytes(decodedArgs.header))); @@ -238,8 +236,6 @@ async function getBlockFromRollupTx( throw new NoBlobBodiesFoundError(Number(l2BlockNum)); } - // TODO(#9101): Once calldata is removed, we can remove this field encoding and update - // Body.fromBlobFields to accept blob buffers directly let blockFields: Fr[]; try { blockFields = Blob.toEncodedFields(blobBodies); @@ -252,22 +248,10 @@ async function getBlockFromRollupTx( throw err; } - // TODO(#9101): Retreiving the block body from calldata is a temporary soln before we have - // either a beacon chain client or link to some blob store. Web2 is ok because we will - // verify the block body vs the blob as below. - const blockBody = Body.fromBuffer(Buffer.from(hexToBytes(bodyHex))); - - // TODO(#9101): The below reconstruction is currently redundant, but once we extract blobs will be the way to construct blocks. - // The blob source will give us blockFields, and we must construct the body from them: - // TODO(#8954): When logs are refactored into fields, we won't need to inject them here. - const reconstructedBlock = Body.fromBlobFields(blockFields, blockBody.contractClassLogs); - - if (!reconstructedBlock.toBuffer().equals(blockBody.toBuffer())) { - // TODO(#9101): Remove below check (without calldata there will be nothing to check against) - throw new Error(`Block reconstructed from blob fields does not match`); - } + // The blob source gives us blockFields, and we must construct the body from them: + const blockBody = Body.fromBlobFields(blockFields); - // TODO(#9101): Once we stop publishing calldata, we will still need the blobCheck below to ensure that the block we are building does correspond to the blob fields + // TODO: Will this ever throw now that we do not get blocks from calldata at all? const blobCheck = await Blob.getBlobs(blockFields); if (Blob.getEthBlobEvaluationInputs(blobCheck) !== blobInputs) { // NB: We can just check the blobhash here, which is the first 32 bytes of blobInputs diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts index 2c9d6d8a04a7..2615d8a08118 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts @@ -1,16 +1,14 @@ import { - ContractClass2BlockL2Logs, + ExtendedContractClassLog, ExtendedPublicLog, - ExtendedUnencryptedL2Log, type GetContractClassLogsResponse, type GetPublicLogsResponse, type L2Block, type LogFilter, LogId, TxScopedL2Log, - UnencryptedL2Log, } from '@aztec/circuit-types'; -import { type Fr, PrivateLog, PublicLog } from '@aztec/circuits.js'; +import { ContractClassLog, type Fr, PrivateLog, PublicLog } from '@aztec/circuits.js'; import { INITIAL_L2_BLOCK_NUM, MAX_NOTE_HASHES_PER_TX, @@ -173,8 +171,18 @@ export class LogStore { ) .flat(); + const contractClassLogsInBlock = block.body.txEffects + .map((txEffect, txIndex) => + [ + numToUInt32BE(txIndex), + numToUInt32BE(txEffect.contractClassLogs.length), + txEffect.contractClassLogs.map(log => log.toBuffer()), + ].flat(), + ) + .flat(); + await this.#publicLogsByBlock.set(block.number, Buffer.concat(publicLogsInBlock)); - await this.#contractClassLogsByBlock.set(block.number, block.body.contractClassLogs.toBuffer()); + await this.#contractClassLogsByBlock.set(block.number, Buffer.concat(contractClassLogsInBlock)); } return true; @@ -345,13 +353,22 @@ export class LogStore { if (typeof blockNumber !== 'number' || typeof txIndex !== 'number') { return { logs: [], maxLogsHit: false }; } - const contractClassLogsBuffer = await this.#contractClassLogsByBlock.getAsync(blockNumber); - const contractClassLogsInBlock = contractClassLogsBuffer - ? ContractClass2BlockL2Logs.fromBuffer(contractClassLogsBuffer) - : new ContractClass2BlockL2Logs([]); - const txLogs = contractClassLogsInBlock.txLogs[txIndex].unrollLogs(); + const contractClassLogsBuffer = (await this.#contractClassLogsByBlock.getAsync(blockNumber)) ?? Buffer.alloc(0); + const contractClassLogsInBlock: [ContractClassLog[]] = [[]]; + + const reader = new BufferReader(contractClassLogsBuffer); + while (reader.remainingBytes() > 0) { + const indexOfTx = reader.readNumber(); + const numLogsInTx = reader.readNumber(); + contractClassLogsInBlock[indexOfTx] = []; + for (let i = 0; i < numLogsInTx; i++) { + contractClassLogsInBlock[indexOfTx].push(reader.readObject(ContractClassLog)); + } + } - const logs: ExtendedUnencryptedL2Log[] = []; + const txLogs = contractClassLogsInBlock[txIndex]; + + const logs: ExtendedContractClassLog[] = []; const maxLogsHit = this.#accumulateLogs(logs, blockNumber, txIndex, txLogs, filter); return { logs, maxLogsHit }; @@ -369,16 +386,25 @@ export class LogStore { }; } - const logs: ExtendedUnencryptedL2Log[] = []; + const logs: ExtendedContractClassLog[] = []; let maxLogsHit = false; loopOverBlocks: for await (const [blockNumber, logBuffer] of this.#contractClassLogsByBlock.entriesAsync({ start, end, })) { - const contractClassLogsInBlock = ContractClass2BlockL2Logs.fromBuffer(logBuffer); - for (let txIndex = filter.afterLog?.txIndex ?? 0; txIndex < contractClassLogsInBlock.txLogs.length; txIndex++) { - const txLogs = contractClassLogsInBlock.txLogs[txIndex].unrollLogs(); + const contractClassLogsInBlock: [ContractClassLog[]] = [[]]; + const reader = new BufferReader(logBuffer); + while (reader.remainingBytes() > 0) { + const indexOfTx = reader.readNumber(); + const numLogsInTx = reader.readNumber(); + contractClassLogsInBlock[indexOfTx] = []; + for (let i = 0; i < numLogsInTx; i++) { + contractClassLogsInBlock[indexOfTx].push(reader.readObject(ContractClassLog)); + } + } + for (let txIndex = filter.afterLog?.txIndex ?? 0; txIndex < contractClassLogsInBlock.length; txIndex++) { + const txLogs = contractClassLogsInBlock[txIndex]; maxLogsHit = this.#accumulateLogs(logs, blockNumber, txIndex, txLogs, filter); if (maxLogsHit) { this.#log.debug(`Max logs hit at block ${blockNumber}`); @@ -391,19 +417,20 @@ export class LogStore { } #accumulateLogs( - results: (ExtendedUnencryptedL2Log | ExtendedPublicLog)[], + results: (ExtendedContractClassLog | ExtendedPublicLog)[], blockNumber: number, txIndex: number, - txLogs: (UnencryptedL2Log | PublicLog)[], + txLogs: (ContractClassLog | PublicLog)[], filter: LogFilter, ): boolean { let maxLogsHit = false; let logIndex = typeof filter.afterLog?.logIndex === 'number' ? filter.afterLog.logIndex + 1 : 0; for (; logIndex < txLogs.length; logIndex++) { const log = txLogs[logIndex]; - if (!filter.contractAddress || log.contractAddress.equals(filter.contractAddress)) { - if (log instanceof UnencryptedL2Log) { - results.push(new ExtendedUnencryptedL2Log(new LogId(blockNumber, txIndex, logIndex), log)); + // TODO(MW): fix hack for contract class + if (!filter.contractAddress || (log instanceof PublicLog && log.contractAddress.equals(filter.contractAddress))) { + if (log instanceof ContractClassLog) { + results.push(new ExtendedContractClassLog(new LogId(blockNumber, txIndex, logIndex), log)); } else { results.push(new ExtendedPublicLog(new LogId(blockNumber, txIndex, logIndex), log)); } diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index c5b0381a38e7..f749adcfb4b7 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -1,7 +1,6 @@ import { - type ContractClass2BlockL2Logs, + ExtendedContractClassLog, ExtendedPublicLog, - ExtendedUnencryptedL2Log, type GetContractClassLogsResponse, type GetPublicLogsResponse, type InBlock, @@ -18,6 +17,7 @@ import { } from '@aztec/circuit-types'; import { type BlockHeader, + type ContractClassLog, type ContractClassPublic, type ContractClassPublicWithBlockNumber, type ContractInstanceUpdateWithAddress, @@ -30,11 +30,17 @@ import { PUBLIC_LOG_DATA_SIZE_IN_FIELDS, type PrivateLog, type PublicLog, + REGISTERER_CONTRACT_ADDRESS, type UnconstrainedFunctionWithMembershipProof, } from '@aztec/circuits.js'; import { FunctionSelector } from '@aztec/foundation/abi'; -import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { AztecAddress } from '@aztec/foundation/aztec-address'; import { createLogger } from '@aztec/foundation/log'; +import { + REGISTERER_CONTRACT_CLASS_REGISTERED_TAG, + REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG, + REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG, +} from '@aztec/protocol-contracts'; import { type ArchiverDataStore, type ArchiverL1SynchPoint } from '../archiver_store.js'; import { type DataRetrieval } from '../structs/data_retrieval.js'; @@ -65,7 +71,7 @@ export class MemoryArchiverStore implements ArchiverDataStore { private publicLogsPerBlock: Map = new Map(); - private contractClassLogsPerBlock: Map = new Map(); + private contractClassLogsPerBlock: Map = new Map(); private blockScopedNullifiers: Map = new Map(); @@ -355,7 +361,10 @@ export class MemoryArchiverStore implements ArchiverDataStore { this.#storeTaggedLogsFromPublic(block); this.privateLogsPerBlock.set(block.number, block.body.txEffects.map(txEffect => txEffect.privateLogs).flat()); this.publicLogsPerBlock.set(block.number, block.body.txEffects.map(txEffect => txEffect.publicLogs).flat()); - this.contractClassLogsPerBlock.set(block.number, block.body.contractClassLogs); + this.contractClassLogsPerBlock.set( + block.number, + block.body.txEffects.map(txEffect => txEffect.contractClassLogs).flat(), + ); }); return Promise.resolve(true); } @@ -703,34 +712,44 @@ export class MemoryArchiverStore implements ArchiverDataStore { const contractAddress = filter.contractAddress; - const logs: ExtendedUnencryptedL2Log[] = []; + const logs: ExtendedContractClassLog[] = []; for (; fromBlock < toBlock; fromBlock++) { const block = this.l2Blocks[fromBlock - INITIAL_L2_BLOCK_NUM]; const blockLogs = this.contractClassLogsPerBlock.get(fromBlock); if (blockLogs) { - for (; txIndexInBlock < blockLogs.txLogs.length; txIndexInBlock++) { - const txLogs = blockLogs.txLogs[txIndexInBlock].unrollLogs(); - for (; logIndexInTx < txLogs.length; logIndexInTx++) { - const log = txLogs[logIndexInTx]; - if ( - (!txHash || block.data.body.txEffects[txIndexInBlock].txHash.equals(txHash)) && - (!contractAddress || log.contractAddress.equals(contractAddress)) - ) { - logs.push(new ExtendedUnencryptedL2Log(new LogId(block.data.number, txIndexInBlock, logIndexInTx), log)); - if (logs.length === this.maxLogs) { - return Promise.resolve({ - logs, - maxLogsHit: true, - }); - } + for (let logIndex = 0; logIndex < blockLogs.length; logIndex++) { + const log = blockLogs[logIndex]; + // TODO(MW): this is a hack + const thisContractAddress = [ + REGISTERER_CONTRACT_CLASS_REGISTERED_TAG, + REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG, + REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG, + ].includes(log.fields[0]) + ? AztecAddress.fromNumber(REGISTERER_CONTRACT_ADDRESS) + : AztecAddress.ZERO; + const thisTxEffect = block.data.body.txEffects.filter(effect => effect.contractClassLogs.includes(log))[0]; + const thisTxIndexInBlock = block.data.body.txEffects.indexOf(thisTxEffect); + const thisLogIndexInTx = thisTxEffect.contractClassLogs.indexOf(log); + if ( + (!txHash || thisTxEffect.txHash.equals(txHash)) && + (!contractAddress || thisContractAddress.equals(contractAddress)) && + thisTxIndexInBlock >= txIndexInBlock && + thisLogIndexInTx >= logIndexInTx + ) { + logs.push( + new ExtendedContractClassLog(new LogId(block.data.number, thisTxIndexInBlock, thisLogIndexInTx), log), + ); + if (logs.length === this.maxLogs) { + return Promise.resolve({ + logs, + maxLogsHit: true, + }); } } - logIndexInTx = 0; } } - txIndexInBlock = 0; } return Promise.resolve({ diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 53aae9e7a654..1f06103a233c 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -67,7 +67,6 @@ export { Body, Capsule, Comparator, - ContractClass2BlockL2Logs, EncryptedLogPayload, EventMetadata, EventType, @@ -92,7 +91,6 @@ export { TxHash, TxReceipt, TxStatus, - UnencryptedL2Log, UniqueNote, type LogFilter, type PartialAddress, diff --git a/yarn-project/builder/src/contract-interface-gen/typescript.ts b/yarn-project/builder/src/contract-interface-gen/typescript.ts index c27d4550010e..0631cd2725fa 100644 --- a/yarn-project/builder/src/contract-interface-gen/typescript.ts +++ b/yarn-project/builder/src/contract-interface-gen/typescript.ts @@ -347,7 +347,6 @@ import { Point, type PublicKey, PublicKeys, - type UnencryptedL2Log, type Wallet, type U128Like, type WrappedFieldLike, diff --git a/yarn-project/circuit-types/src/body.test.ts b/yarn-project/circuit-types/src/body.test.ts index d6cfbbccf946..fe4fa5fd0cc3 100644 --- a/yarn-project/circuit-types/src/body.test.ts +++ b/yarn-project/circuit-types/src/body.test.ts @@ -12,8 +12,7 @@ describe('Body', () => { it('converts to and from fields', async () => { const body = await Body.random(); const fields = body.toBlobFields(); - // TODO(#8954): When logs are refactored into fields, we won't need to inject them here - expect(Body.fromBlobFields(fields, body.contractClassLogs)).toEqual(body); + expect(Body.fromBlobFields(fields)).toEqual(body); }); it('converts empty to and from fields', () => { diff --git a/yarn-project/circuit-types/src/body.ts b/yarn-project/circuit-types/src/body.ts index b5fe1577e7d5..e1289ca9e46b 100644 --- a/yarn-project/circuit-types/src/body.ts +++ b/yarn-project/circuit-types/src/body.ts @@ -1,4 +1,4 @@ -import { type Fr } from '@aztec/circuits.js'; +import { BLOBS_PER_BLOCK, FIELDS_PER_BLOB, type Fr } from '@aztec/circuits.js'; import { timesParallel } from '@aztec/foundation/collection'; import { type ZodFor } from '@aztec/foundation/schemas'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; @@ -6,7 +6,6 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { inspect } from 'util'; import { z } from 'zod'; -import { ContractClass2BlockL2Logs } from './logs/index.js'; import { TxEffect } from './tx_effect.js'; export class Body { @@ -52,15 +51,21 @@ export class Body { this.txEffects.forEach((effect: TxEffect) => { flattened = flattened.concat(effect.toBlobFields()); }); + if (flattened.length > BLOBS_PER_BLOCK * FIELDS_PER_BLOB) { + throw new Error( + `Attempted to overfill block's blobs with ${flattened.length} elements. The maximum is ${ + BLOBS_PER_BLOCK * FIELDS_PER_BLOB + }`, + ); + } + return flattened; } /** * Decodes a block from blob fields. - * TODO(#8954): When logs are refactored into fields, we won't need to inject them here, instead just reading from fields in TxEffect.fromBlobFields. - * Logs are best input by gathering from the getters below, as they don't remove empty log arrays. */ - static fromBlobFields(fields: Fr[], contractClassLogs?: ContractClass2BlockL2Logs) { + static fromBlobFields(fields: Fr[]) { const txEffectsFields: Fr[][] = []; let checkedFields = 0; while (checkedFields !== fields.length) { @@ -71,9 +76,7 @@ export class Body { txEffectsFields.push(fields.slice(checkedFields, checkedFields + len)); checkedFields += len; } - const txEffects = txEffectsFields - .filter(effect => effect.length) - .map((effect, i) => TxEffect.fromBlobFields(effect, contractClassLogs?.txLogs[i])); + const txEffects = txEffectsFields.filter(effect => effect.length).map(effect => TxEffect.fromBlobFields(effect)); return new this(txEffects); } @@ -83,12 +86,6 @@ export class Body { }`; } - get contractClassLogs(): ContractClass2BlockL2Logs { - const logs = this.txEffects.map(txEffect => txEffect.contractClassLogs); - - return new ContractClass2BlockL2Logs(logs); - } - static async random(txsPerBlock = 4, numPublicCallsPerTx = 3, numPublicLogsPerCall = 1) { const txEffects = await timesParallel(txsPerBlock, () => TxEffect.random(numPublicCallsPerTx, numPublicLogsPerCall), diff --git a/yarn-project/circuit-types/src/interfaces/archiver.test.ts b/yarn-project/circuit-types/src/interfaces/archiver.test.ts index d5e2bd76d417..f16070398a1e 100644 --- a/yarn-project/circuit-types/src/interfaces/archiver.test.ts +++ b/yarn-project/circuit-types/src/interfaces/archiver.test.ts @@ -25,8 +25,8 @@ import { EmptyL1RollupConstants, type L1RollupConstants } from '../epoch-helpers import { type InBlock, randomInBlock } from '../in_block.js'; import { L2Block } from '../l2_block.js'; import { type L2Tips } from '../l2_block_source.js'; +import { ExtendedContractClassLog } from '../logs/extended_contract_class_log.js'; import { ExtendedPublicLog } from '../logs/extended_public_log.js'; -import { ExtendedUnencryptedL2Log } from '../logs/extended_unencrypted_l2_log.js'; import { type GetContractClassLogsResponse, type GetPublicLogsResponse, @@ -179,7 +179,7 @@ describe('ArchiverApiSchema', () => { txHash: TxHash.random(), contractAddress: await AztecAddress.random(), }); - expect(result).toEqual({ logs: [expect.any(ExtendedUnencryptedL2Log)], maxLogsHit: true }); + expect(result).toEqual({ logs: [expect.any(ExtendedContractClassLog)], maxLogsHit: true }); }); it('getPublicFunction', async () => { @@ -337,10 +337,10 @@ class MockArchiver implements ArchiverApi { expect(filter.contractAddress).toBeInstanceOf(AztecAddress); return { logs: [await ExtendedPublicLog.random()], maxLogsHit: true }; } - async getContractClassLogs(filter: LogFilter): Promise { + getContractClassLogs(filter: LogFilter): Promise { expect(filter.txHash).toBeInstanceOf(TxHash); expect(filter.contractAddress).toBeInstanceOf(AztecAddress); - return { logs: [await ExtendedUnencryptedL2Log.random()], maxLogsHit: true }; + return Promise.resolve({ logs: [ExtendedContractClassLog.random()], maxLogsHit: true }); } getPublicFunction(address: AztecAddress, selector: FunctionSelector): Promise { expect(address).toBeInstanceOf(AztecAddress); diff --git a/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts b/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts index 605909330f7e..c39ff21b2ef6 100644 --- a/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts +++ b/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts @@ -32,8 +32,8 @@ import { resolve } from 'path'; import { type InBlock, randomInBlock } from '../in_block.js'; import { L2Block } from '../l2_block.js'; import { type L2Tips } from '../l2_block_source.js'; +import { ExtendedContractClassLog } from '../logs/extended_contract_class_log.js'; import { ExtendedPublicLog } from '../logs/extended_public_log.js'; -import { ExtendedUnencryptedL2Log } from '../logs/extended_unencrypted_l2_log.js'; import { type GetContractClassLogsResponse, type GetPublicLogsResponse, @@ -243,7 +243,7 @@ describe('AztecNodeApiSchema', () => { it('getContractClassLogs', async () => { const response = await context.client.getContractClassLogs({ contractAddress: await AztecAddress.random() }); - expect(response).toEqual({ logs: [expect.any(ExtendedUnencryptedL2Log)], maxLogsHit: true }); + expect(response).toEqual({ logs: [expect.any(ExtendedContractClassLog)], maxLogsHit: true }); }); it('getLogsByTags', async () => { @@ -524,9 +524,9 @@ class MockAztecNode implements AztecNode { expect(filter.contractAddress).toBeInstanceOf(AztecAddress); return { logs: [await ExtendedPublicLog.random()], maxLogsHit: true }; } - async getContractClassLogs(filter: LogFilter): Promise { + getContractClassLogs(filter: LogFilter): Promise { expect(filter.contractAddress).toBeInstanceOf(AztecAddress); - return { logs: [await ExtendedUnencryptedL2Log.random()], maxLogsHit: true }; + return Promise.resolve({ logs: [ExtendedContractClassLog.random()], maxLogsHit: true }); } getLogsByTags(tags: Fr[]): Promise { expect(tags).toHaveLength(1); diff --git a/yarn-project/circuit-types/src/interfaces/pxe.test.ts b/yarn-project/circuit-types/src/interfaces/pxe.test.ts index 8cb9f8d958da..ec693d3f4663 100644 --- a/yarn-project/circuit-types/src/interfaces/pxe.test.ts +++ b/yarn-project/circuit-types/src/interfaces/pxe.test.ts @@ -33,8 +33,8 @@ import { AuthWitness } from '../auth_witness.js'; import { type InBlock } from '../in_block.js'; import { L2Block } from '../l2_block.js'; import { + ExtendedContractClassLog, ExtendedPublicLog, - ExtendedUnencryptedL2Log, type GetContractClassLogsResponse, type GetPublicLogsResponse, type LogFilter, @@ -262,7 +262,7 @@ describe('PXESchema', () => { it('getContractClassLogs', async () => { const result = await context.client.getContractClassLogs({ contractAddress: address }); - expect(result).toEqual({ logs: [expect.any(ExtendedUnencryptedL2Log)], maxLogsHit: true }); + expect(result).toEqual({ logs: [expect.any(ExtendedContractClassLog)], maxLogsHit: true }); }); it('getBlockNumber', async () => { @@ -489,9 +489,9 @@ class MockPXE implements PXE { expect(filter.contractAddress).toEqual(this.address); return { logs: [await ExtendedPublicLog.random()], maxLogsHit: true }; } - async getContractClassLogs(filter: LogFilter): Promise { + getContractClassLogs(filter: LogFilter): Promise { expect(filter.contractAddress).toEqual(this.address); - return { logs: [await ExtendedUnencryptedL2Log.random()], maxLogsHit: true }; + return Promise.resolve({ logs: [ExtendedContractClassLog.random()], maxLogsHit: true }); } getBlockNumber(): Promise { return Promise.resolve(1); diff --git a/yarn-project/circuit-types/src/l2_block.ts b/yarn-project/circuit-types/src/l2_block.ts index 805a204042ff..876d08bc8889 100644 --- a/yarn-project/circuit-types/src/l2_block.ts +++ b/yarn-project/circuit-types/src/l2_block.ts @@ -184,11 +184,12 @@ export class L2Block { privateLogCount: this.body.txEffects.reduce((logCount, txEffect) => logCount + txEffect.privateLogs.length, 0), publicLogCount: this.body.txEffects.reduce((logCount, txEffect) => logCount + txEffect.publicLogs.length, 0), contractClassLogCount: this.body.txEffects.reduce( - (logCount, txEffect) => logCount + txEffect.contractClassLogs.getTotalLogCount(), + (logCount, txEffect) => logCount + txEffect.contractClassLogs.length, 0, ), contractClassLogSize: this.body.txEffects.reduce( - (logCount, txEffect) => logCount + txEffect.contractClassLogs.getSerializedLength(), + (totalLogSize, txEffect) => + totalLogSize + txEffect.contractClassLogs.reduce((logSize, log) => logSize + log.getEmittedLength(), 0), 0, ), }; diff --git a/yarn-project/circuit-types/src/logs/extended_unencrypted_l2_log.ts b/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts similarity index 50% rename from yarn-project/circuit-types/src/logs/extended_unencrypted_l2_log.ts rename to yarn-project/circuit-types/src/logs/extended_contract_class_log.ts index 686463146123..6d3a2c9efe54 100644 --- a/yarn-project/circuit-types/src/logs/extended_unencrypted_l2_log.ts +++ b/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts @@ -1,3 +1,4 @@ +import { ContractClassLog } from '@aztec/circuits.js'; import { BufferReader } from '@aztec/foundation/serialize'; import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; import { type FieldsOf } from '@aztec/foundation/types'; @@ -6,35 +7,33 @@ import isEqual from 'lodash.isequal'; import { z } from 'zod'; import { LogId } from './log_id.js'; -import { UnencryptedL2Log } from './unencrypted_l2_log.js'; /** - * Represents an individual unencrypted log entry extended with info about the block and tx it was emitted in. - * TODO(#8945): Currently only used for contract class logs. When these are fields, delete this class. + * Represents an individual contract class log entry extended with info about the block and tx it was emitted in. */ -export class ExtendedUnencryptedL2Log { +export class ExtendedContractClassLog { constructor( /** Globally unique id of the log. */ public readonly id: LogId, /** The data contents of the log. */ - public readonly log: UnencryptedL2Log, + public readonly log: ContractClassLog, ) {} - static async random() { - return new ExtendedUnencryptedL2Log(LogId.random(), await UnencryptedL2Log.random()); + static random() { + return new ExtendedContractClassLog(LogId.random(), ContractClassLog.random()); } static get schema() { return z .object({ id: LogId.schema, - log: UnencryptedL2Log.schema, + log: ContractClassLog.schema, }) - .transform(ExtendedUnencryptedL2Log.from); + .transform(ExtendedContractClassLog.from); } - static from(fields: FieldsOf) { - return new ExtendedUnencryptedL2Log(fields.id, fields.log); + static from(fields: FieldsOf) { + return new ExtendedContractClassLog(fields.id, fields.log); } /** @@ -54,19 +53,11 @@ export class ExtendedUnencryptedL2Log { } /** - * Serializes log to a human readable string. - * @returns A human readable representation of the log. - */ - public toHumanReadable(): string { - return `${this.id.toHumanReadable()}, ${this.log.toHumanReadable()}`; - } - - /** - * Checks if two ExtendedUnencryptedL2Log objects are equal. - * @param other - Another ExtendedUnencryptedL2Log object to compare with. + * Checks if two ExtendedContractClassLog objects are equal. + * @param other - Another ExtendedContractClassLog object to compare with. * @returns True if the two objects are equal, false otherwise. */ - public equals(other: ExtendedUnencryptedL2Log): boolean { + public equals(other: ExtendedContractClassLog): boolean { return isEqual(this, other); } @@ -75,21 +66,21 @@ export class ExtendedUnencryptedL2Log { * @param buffer - The buffer or buffer reader containing the log. * @returns Deserialized instance of `Log`. */ - public static fromBuffer(buffer: Buffer | BufferReader): ExtendedUnencryptedL2Log { + public static fromBuffer(buffer: Buffer | BufferReader): ExtendedContractClassLog { const reader = BufferReader.asReader(buffer); const logId = LogId.fromBuffer(reader); - const log = UnencryptedL2Log.fromBuffer(reader); + const log = ContractClassLog.fromBuffer(reader); - return new ExtendedUnencryptedL2Log(logId, log); + return new ExtendedContractClassLog(logId, log); } /** - * Deserializes `ExtendedUnencryptedL2Log` object from a hex string representation. + * Deserializes `ExtendedContractClassLog` object from a hex string representation. * @param data - A hex string representation of the log. - * @returns An `ExtendedUnencryptedL2Log` object. + * @returns An `ExtendedContractClassLog` object. */ - public static fromString(data: string): ExtendedUnencryptedL2Log { - return ExtendedUnencryptedL2Log.fromBuffer(hexToBuffer(data)); + public static fromString(data: string): ExtendedContractClassLog { + return ExtendedContractClassLog.fromBuffer(hexToBuffer(data)); } } diff --git a/yarn-project/circuit-types/src/logs/function_l2_logs.test.ts b/yarn-project/circuit-types/src/logs/function_l2_logs.test.ts deleted file mode 100644 index 61e976890e12..000000000000 --- a/yarn-project/circuit-types/src/logs/function_l2_logs.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { jsonStringify } from '@aztec/foundation/json-rpc'; - -import { UnencryptedFunctionL2Logs } from './function_l2_logs.js'; - -function shouldBehaveLikeFunctionL2Logs(FunctionL2Logs: typeof UnencryptedFunctionL2Logs) { - describe(FunctionL2Logs.name, () => { - it('can encode L2Logs to buffer and back', async () => { - const l2Logs = await FunctionL2Logs.random(1); - - const buffer = l2Logs.toBuffer(); - const recovered = FunctionL2Logs.fromBuffer(buffer); - - expect(recovered).toEqual(l2Logs); - }); - - it('can encode L2Logs to JSON and back', async () => { - const l2Logs = await FunctionL2Logs.random(1); - - const buffer = jsonStringify(l2Logs); - const recovered = FunctionL2Logs.schema.parse(JSON.parse(buffer)); - - expect(recovered).toEqual(l2Logs); - }); - - it('getSerializedLength returns the correct length', async () => { - const l2Logs = await FunctionL2Logs.random(1); - - const buffer = l2Logs.toBuffer(); - const recovered = FunctionL2Logs.fromBuffer(buffer); - if (FunctionL2Logs.name == 'EncryptedFunctionL2Logs') { - // For event logs, we don't 'count' the maskedContractAddress as part of the - // log length, since it's just for siloing later on - expect(recovered.getSerializedLength()).toEqual(buffer.length - 3 * 32); - } else { - expect(recovered.getSerializedLength()).toEqual(buffer.length); - } - }); - - it('getKernelLength returns the correct length', async () => { - const l2Logs = await FunctionL2Logs.random(1); - - const expectedLength = l2Logs.logs.map(l => l.length).reduce((a, b) => a + b + 4, 0); - - expect(l2Logs.getKernelLength()).toEqual(expectedLength); - }); - }); -} - -shouldBehaveLikeFunctionL2Logs(UnencryptedFunctionL2Logs); diff --git a/yarn-project/circuit-types/src/logs/function_l2_logs.ts b/yarn-project/circuit-types/src/logs/function_l2_logs.ts deleted file mode 100644 index ad406b7b9a33..000000000000 --- a/yarn-project/circuit-types/src/logs/function_l2_logs.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { MAX_CONTRACT_CLASS_LOGS_PER_CALL } from '@aztec/circuits.js'; -import { sha256Trunc } from '@aztec/foundation/crypto'; -import { BufferReader, prefixBufferWithLength } from '@aztec/foundation/serialize'; - -import { z } from 'zod'; - -import { UnencryptedL2Log } from './unencrypted_l2_log.js'; - -/** - * Data container of logs emitted in 1 function invocation (corresponds to 1 kernel iteration). - */ -export class UnencryptedFunctionL2Logs { - constructor( - /** An array of logs. */ - public readonly logs: UnencryptedL2Log[], - ) {} - - /** - * Serializes all function logs into a buffer. - * @returns A buffer containing the serialized logs. - * @remarks Each log is prefixed with 4 bytes for its length, then all the serialized logs are concatenated and - * the resulting buffer is prefixed with 4 bytes for its total length. - */ - public toBuffer(): Buffer { - const serializedLogs = this.logs.map(log => prefixBufferWithLength(log.toBuffer())); - return prefixBufferWithLength(Buffer.concat(serializedLogs)); - } - - /** - * Get the total length of all serialized data - * @returns Total length of serialized data. - */ - public getSerializedLength(): number { - // adding 4 for the resulting buffer length. - return this.getKernelLength() + 4; - } - - /** - * Get the total length of all chargable data (raw log data + 4 for each log) - * TODO: Rename this? getChargableLength? getDALength? - * @returns Total length of data. - */ - public getKernelLength(): number { - // Adding 4 to each log's length to account for the size stored in the serialized buffer - return this.logs.reduce((acc, log) => acc + log.length + 4, 0); - } - - /** - * Calculates hash of serialized logs. - * @returns Buffer containing 248 bits of information of sha256 hash. - */ - public hash(): Buffer { - // Truncated SHA hash of the concatenation of the hash of each inner log - // Changed in resolving #5017 to mimic logs hashing in kernels - const preimage = Buffer.concat(this.logs.map(l => l.hash())); - return sha256Trunc(preimage); - } - - static get schema() { - return z - .object({ logs: z.array(UnencryptedL2Log.schema) }) - .transform(({ logs }) => new UnencryptedFunctionL2Logs(logs)); - } - - /** - * Creates an empty L2Logs object with no logs. - * @returns A new FunctionL2Logs object with no logs. - */ - public static empty(): UnencryptedFunctionL2Logs { - return new UnencryptedFunctionL2Logs([]); - } - - /** - * Deserializes logs from a buffer. - * @param buf - The buffer containing the serialized logs. - * @param isLengthPrefixed - Whether the buffer is prefixed with 4 bytes for its total length. - * @returns Deserialized instance of `FunctionL2Logs`. - */ - public static fromBuffer(buf: Buffer, isLengthPrefixed = true): UnencryptedFunctionL2Logs { - const reader = new BufferReader(buf, 0); - - // If the buffer is length prefixed use the length to read the array. Otherwise, the entire buffer is consumed. - const logsBufLength = isLengthPrefixed ? reader.readNumber() : -1; - const logs = reader.readBufferArray(logsBufLength); - - return new UnencryptedFunctionL2Logs(logs.map(UnencryptedL2Log.fromBuffer)); - } - - /** - * Creates a new L2Logs object with `numLogs` logs. - * @param numLogs - The number of logs to create. - * @returns A new UnencryptedFunctionL2Logs object. - */ - public static async random(numLogs: number): Promise { - if (numLogs > MAX_CONTRACT_CLASS_LOGS_PER_CALL) { - throw new Error(`Trying to create ${numLogs} logs for one call (max: ${MAX_CONTRACT_CLASS_LOGS_PER_CALL})`); - } - const logs: UnencryptedL2Log[] = []; - for (let i = 0; i < numLogs; i++) { - logs.push(await UnencryptedL2Log.random()); - } - return new UnencryptedFunctionL2Logs(logs); - } -} diff --git a/yarn-project/circuit-types/src/logs/get_logs_response.ts b/yarn-project/circuit-types/src/logs/get_logs_response.ts index 2beb84805049..a27f05c5fc1b 100644 --- a/yarn-project/circuit-types/src/logs/get_logs_response.ts +++ b/yarn-project/circuit-types/src/logs/get_logs_response.ts @@ -5,19 +5,19 @@ import { BufferReader, boolToBuffer, numToUInt32BE } from '@aztec/foundation/ser import { z } from 'zod'; import { TxHash } from '../tx/tx_hash.js'; +import { ExtendedContractClassLog } from './extended_contract_class_log.js'; import { ExtendedPublicLog } from './extended_public_log.js'; -import { ExtendedUnencryptedL2Log } from './extended_unencrypted_l2_log.js'; /** Response for the getContractClassLogs archiver call. */ export type GetContractClassLogsResponse = { - /** An array of ExtendedUnencryptedL2Log elements. */ - logs: ExtendedUnencryptedL2Log[]; + /** An array of ExtendedContractClassLog elements. */ + logs: ExtendedContractClassLog[]; /** Indicates if a limit has been reached. */ maxLogsHit: boolean; }; export const GetContractClassLogsResponseSchema = z.object({ - logs: z.array(ExtendedUnencryptedL2Log.schema), + logs: z.array(ExtendedContractClassLog.schema), maxLogsHit: z.boolean(), }) satisfies ZodFor; diff --git a/yarn-project/circuit-types/src/logs/index.ts b/yarn-project/circuit-types/src/logs/index.ts index 97dd524ca9b6..529eba44c21a 100644 --- a/yarn-project/circuit-types/src/logs/index.ts +++ b/yarn-project/circuit-types/src/logs/index.ts @@ -1,12 +1,8 @@ export * from './event_metadata.js'; export * from './get_logs_response.js'; -export * from './function_l2_logs.js'; -export * from './l2_block_l2_logs.js'; export * from './l2_logs_source.js'; export * from './log_id.js'; export * from './log_filter.js'; export * from './l1_payload/index.js'; -export * from './tx_l2_logs.js'; -export * from './unencrypted_l2_log.js'; -export * from './extended_unencrypted_l2_log.js'; export * from './extended_public_log.js'; +export * from './extended_contract_class_log.js'; diff --git a/yarn-project/circuit-types/src/logs/l2_block_l2_logs.test.ts b/yarn-project/circuit-types/src/logs/l2_block_l2_logs.test.ts deleted file mode 100644 index 5d8e30f3f329..000000000000 --- a/yarn-project/circuit-types/src/logs/l2_block_l2_logs.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { jsonStringify } from '@aztec/foundation/json-rpc'; - -import { ContractClass2BlockL2Logs } from './l2_block_l2_logs.js'; - -function shouldBehaveLikeL2BlockL2Logs(L2BlockL2Logs: typeof ContractClass2BlockL2Logs) { - describe(L2BlockL2Logs.name, () => { - it('can encode L2Logs to buffer and back', async () => { - const l2Logs = await L2BlockL2Logs.random(3, 1, 1); - const buffer = l2Logs.toBuffer(); - const recovered = L2BlockL2Logs.fromBuffer(buffer); - - expect(recovered).toEqual(l2Logs); - }); - - it('getSerializedLength returns the correct length', async () => { - const l2Logs = await L2BlockL2Logs.random(3, 1, 1); - const buffer = l2Logs.toBuffer(); - const recovered = L2BlockL2Logs.fromBuffer(buffer); - expect(recovered.getSerializedLength()).toEqual(buffer.length); - }); - - it('serializes to and from JSON via schema', async () => { - const l2Logs = await L2BlockL2Logs.random(3, 1, 1); - const json = jsonStringify(l2Logs); - const recovered = L2BlockL2Logs.schema.parse(JSON.parse(json)); - expect(recovered).toEqual(l2Logs); - expect(recovered).toBeInstanceOf(L2BlockL2Logs); - }); - }); -} - -shouldBehaveLikeL2BlockL2Logs(ContractClass2BlockL2Logs); diff --git a/yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts b/yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts deleted file mode 100644 index f9f41f325ba4..000000000000 --- a/yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { BufferReader, prefixBufferWithLength } from '@aztec/foundation/serialize'; -import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; - -import isEqual from 'lodash.isequal'; -import { z } from 'zod'; - -import { ContractClassTxL2Logs, type TxL2Logs } from './tx_l2_logs.js'; -import { type UnencryptedL2Log } from './unencrypted_l2_log.js'; - -/** - * Data container of logs emitted in all txs in a given L2 block. - */ -abstract class L2BlockL2Logs { - constructor( - /** - * An array containing logs emitted in individual function invocations in this tx. - */ - public readonly txLogs: TxL2Logs[], - ) {} - - /** - * Serializes logs into a buffer. - * @returns A buffer containing the serialized logs. - */ - public toBuffer(): Buffer { - const serializedTxLogs = this.txLogs.map(logs => logs.toBuffer()); - // Concatenate all serialized function logs into a single buffer and prefix it with 4 bytes for its total length. - return prefixBufferWithLength(Buffer.concat(serializedTxLogs)); - } - - /** - * Get the total length of serialized data. - * @returns Total length of serialized data. - */ - public getSerializedLength(): number { - return this.txLogs.reduce((acc, logs) => acc + logs.getSerializedLength(), 0) + 4; - } - - /** - * Gets the total number of logs emitted from all the TxL2Logs. - */ - public getTotalLogCount(): number { - return this.txLogs.reduce((acc, logs) => acc + logs.getTotalLogCount(), 0); - } - - /** - * Seralizes logs into a string. - * @returns A string representation of the serialized logs. - */ - public toString(): string { - return bufferToHex(this.toBuffer()); - } - - /** - * Checks if two L2BlockL2Logs objects are equal. - * @param other - Another L2BlockL2Logs object to compare with. - * @returns True if the two objects are equal, false otherwise. - */ - public equals(other: L2BlockL2Logs): boolean { - return isEqual(this, other); - } - - /** - * Returns the total number of log entries across an array of L2BlockL2Logs. - * @param l2BlockL2logs - L2BlockL2Logs to sum over. - * @returns Total sum of log entries. - */ - public static getTotalLogCount(l2BlockL2logs: L2BlockL2Logs[]): number { - return l2BlockL2logs.reduce((sum, log) => sum + log.getTotalLogCount(), 0); - } -} - -export class ContractClass2BlockL2Logs extends L2BlockL2Logs { - // This class is identical in methods to UnencryptedL2BlockL2Logs, but its - // consistuent ContractClassTxL2Logs must be treated differently, hence new class. - static get schema() { - return z - .object({ txLogs: z.array(ContractClassTxL2Logs.schema) }) - .transform(({ txLogs }) => new ContractClass2BlockL2Logs(txLogs)); - } - - public get type() { - return 'ContractClass'; - } - - /** - * Deserializes logs from a buffer. - * @param buffer - The buffer containing the serialized logs. - * @returns A new `L2BlockL2Logs` object. - */ - public static fromBuffer(buffer: Buffer | BufferReader): ContractClass2BlockL2Logs { - const reader = BufferReader.asReader(buffer); - - const logsBufLength = reader.readNumber(); - const serializedTxLogs = reader.readBufferArray(logsBufLength); - - const txLogs = serializedTxLogs.map(logs => ContractClassTxL2Logs.fromBuffer(logs, false)); - return new ContractClass2BlockL2Logs(txLogs); - } - - /** - * Deserializes logs from a string. - * @param data - The string containing the serialized logs. - * @returns A new `L2BlockL2Logs` object. - */ - public static fromString(data: string): ContractClass2BlockL2Logs { - return ContractClass2BlockL2Logs.fromBuffer(hexToBuffer(data)); - } - - /** - * Creates a new `L2BlockL2Logs` object with `numCalls` function logs and `numLogsPerCall` logs in each function - * call. - * @param numTxs - The number of txs in the block. - * @param numCalls - The number of function calls in the tx. - * @param numLogsPerCall - The number of logs emitted in each function call. - * @returns A new `L2BlockL2Logs` object. - */ - public static async random( - numTxs: number, - numCalls: number, - numLogsPerCall: number, - ): Promise { - const txLogs: ContractClassTxL2Logs[] = []; - for (let i = 0; i < numTxs; i++) { - txLogs.push(await ContractClassTxL2Logs.random(numCalls, numLogsPerCall)); - } - return new ContractClass2BlockL2Logs(txLogs); - } - - /** - * Unrolls logs from a set of blocks. - * @param blockLogs - Input logs from a set of blocks. - * @returns Unrolled logs. - */ - public static unrollLogs(blockLogs: (ContractClass2BlockL2Logs | undefined)[]): UnencryptedL2Log[] { - const logs: UnencryptedL2Log[] = []; - for (const blockLog of blockLogs) { - if (blockLog) { - for (const txLog of blockLog.txLogs) { - logs.push(...txLog.unrollLogs()); - } - } - } - return logs; - } -} diff --git a/yarn-project/circuit-types/src/logs/tx_l2_logs.test.ts b/yarn-project/circuit-types/src/logs/tx_l2_logs.test.ts deleted file mode 100644 index a81e5b3da8db..000000000000 --- a/yarn-project/circuit-types/src/logs/tx_l2_logs.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { jsonStringify } from '@aztec/foundation/json-rpc'; - -import { ContractClassTxL2Logs } from './tx_l2_logs.js'; - -function shouldBehaveLikeTxL2Logs(TxL2Logs: typeof ContractClassTxL2Logs) { - describe(TxL2Logs.name, () => { - it('can encode TxL2Logs to buffer and back', async () => { - const l2Logs = await TxL2Logs.random(1, 1); - const buffer = l2Logs.toBuffer(); - const recovered = TxL2Logs.fromBuffer(buffer); - - expect(recovered).toEqual(l2Logs); - }); - - it('can encode TxL2Logs to JSON and back', async () => { - const l2Logs = await TxL2Logs.random(1, 1); - const buffer = jsonStringify(l2Logs); - const recovered = TxL2Logs.schema.parse(JSON.parse(buffer)); - - expect(recovered).toEqual(l2Logs); - }); - - it('getSerializedLength returns the correct length', async () => { - const l2Logs = await TxL2Logs.random(1, 1); - const buffer = l2Logs.toBuffer(); - const recovered = TxL2Logs.fromBuffer(buffer); - expect(recovered.getSerializedLength()).toEqual(buffer.length); - }); - - it('getKernelLength returns the correct length', async () => { - const l2Logs = await TxL2Logs.random(1, 1); - const expectedLength = l2Logs.functionLogs.map(l => l.getKernelLength()).reduce((a, b) => a + b, 0); - - expect(l2Logs.getKernelLength()).toEqual(expectedLength); - }); - }); -} - -shouldBehaveLikeTxL2Logs(ContractClassTxL2Logs); diff --git a/yarn-project/circuit-types/src/logs/tx_l2_logs.ts b/yarn-project/circuit-types/src/logs/tx_l2_logs.ts deleted file mode 100644 index e1becac450ec..000000000000 --- a/yarn-project/circuit-types/src/logs/tx_l2_logs.ts +++ /dev/null @@ -1,216 +0,0 @@ -import { Fr, type LogHash, MAX_CONTRACT_CLASS_LOGS_PER_TX, type ScopedLogHash } from '@aztec/circuits.js'; -import { sha256Trunc } from '@aztec/foundation/crypto'; -import { BufferReader, prefixBufferWithLength } from '@aztec/foundation/serialize'; - -import isEqual from 'lodash.isequal'; -import { z } from 'zod'; - -import { UnencryptedFunctionL2Logs } from './function_l2_logs.js'; -import { type UnencryptedL2Log } from './unencrypted_l2_log.js'; - -/** - * Data container of logs emitted in 1 tx. - * TODO(#8945): Currently only used for contract class logs. When these are fields, delete this class. - */ -export abstract class TxL2Logs { - abstract hash(): Buffer; - - constructor( - /** An array containing logs emitted in individual function invocations in this tx. */ - public readonly functionLogs: UnencryptedFunctionL2Logs[], - ) {} - - /** - * Serializes logs into a buffer. - * @returns A buffer containing the serialized logs. - */ - public toBuffer(): Buffer { - const serializedFunctionLogs = this.functionLogs.map(logs => logs.toBuffer()); - // Concatenate all serialized function logs into a single buffer and prefix it with 4 bytes for its total length. - return prefixBufferWithLength(Buffer.concat(serializedFunctionLogs)); - } - - /** - * Get the total length of serialized data. - * @returns Total length of serialized data. - */ - public getSerializedLength(): number { - return this.functionLogs.reduce((acc, logs) => acc + logs.getSerializedLength(), 0) + 4; - } - - /** - * Get the total length of all chargable data (raw log data + 4 for each log) - * TODO: Rename this? getChargableLength? getDALength? - * @returns Total length of data. - */ - public getKernelLength(): number { - return this.functionLogs.reduce((acc, logs) => acc + logs.getKernelLength(), 0); - } - - /** Gets the total number of logs. */ - public getTotalLogCount() { - return this.functionLogs.reduce((acc, logs) => acc + logs.logs.length, 0); - } - - /** - * Adds function logs to the existing logs. - * @param functionLogs - The function logs to add - * @remarks Used by sequencer to append unencrypted logs emitted in public function calls. - */ - public addFunctionLogs(functionLogs: UnencryptedFunctionL2Logs[]) { - this.functionLogs.push(...functionLogs); - } - - /** - * Unrolls logs from this tx. - * @returns Unrolled logs. - */ - public unrollLogs(): UnencryptedL2Log[] { - return this.functionLogs.flatMap(functionLog => functionLog.logs); - } - - /** - * Checks if two TxL2Logs objects are equal. - * @param other - Another TxL2Logs object to compare with. - * @returns True if the two objects are equal, false otherwise. - */ - public equals(other: TxL2Logs): boolean { - return isEqual(this, other); - } - - /** - * Filter the logs from functions from this TxL2Logs that - * appear in the provided logHashes - * @param logHashes hashes we want to keep - * @param output our aggregation - * @returns our aggregation - */ - public filter(logHashes: LogHash[], output: TxL2Logs): TxL2Logs { - for (const fnLogs of this.functionLogs) { - let include = false; - for (const log of fnLogs.logs) { - if (logHashes.findIndex(lh => lh.value.equals(Fr.fromBuffer(log.getSiloedHash()))) !== -1) { - include = true; - } - } - if (include) { - output.addFunctionLogs([fnLogs]); - } - } - return output; - } - - /** - * Filter the logs from functions from this TxL2Logs that - * appear in the provided scopedLogHashes - * @param logHashes hashes we want to keep - * @param output our aggregation - * @returns our aggregation - */ - public filterScoped(scopedLogHashes: ScopedLogHash[], output: TxL2Logs): TxL2Logs { - for (const fnLogs of this.functionLogs) { - let include = false; - for (const log of fnLogs.logs) { - let contractAddress: any; - if ('contractAddress' in log) { - contractAddress = log.contractAddress; - } else { - throw new Error("Can't run filterScoped in logs without contractAddress or maskedContractAddress"); - } - if ( - scopedLogHashes.findIndex( - slh => slh.contractAddress.equals(contractAddress) && slh.value.equals(Fr.fromBuffer(log.hash())), - ) != -1 - ) { - include = true; - } - } - if (include) { - output.addFunctionLogs([fnLogs]); - } - } - return output; - } -} - -export class ContractClassTxL2Logs extends TxL2Logs { - static get schema() { - return z - .object({ functionLogs: z.array(UnencryptedFunctionL2Logs.schema) }) - .transform(({ functionLogs }) => new ContractClassTxL2Logs(functionLogs)); - } - - /** Creates an empty instance. */ - public static empty() { - return new ContractClassTxL2Logs([]); - } - - /** - * Deserializes logs from a buffer. - * @param buf - The buffer containing the serialized logs. - * @param isLengthPrefixed - Whether the buffer is prefixed with 4 bytes for its total length. - * @returns A new L2Logs object. - */ - public static fromBuffer(buf: Buffer | BufferReader, isLengthPrefixed = true): ContractClassTxL2Logs { - const reader = BufferReader.asReader(buf); - - // If the buffer is length prefixed use the length to read the array. Otherwise, the entire buffer is consumed. - const logsBufLength = isLengthPrefixed ? reader.readNumber() : -1; - const serializedFunctionLogs = reader.readBufferArray(logsBufLength); - - const functionLogs = serializedFunctionLogs.map(logs => UnencryptedFunctionL2Logs.fromBuffer(logs, false)); - return new ContractClassTxL2Logs(functionLogs); - } - - /** - * Creates a new `TxL2Logs` object with `numCalls` function logs and `numLogsPerCall` logs in each invocation. - * @param numCalls - The number of function calls in the tx. - * @param numLogsPerCall - The number of logs emitted in each function call. - * @returns A new `TxL2Logs` object. - */ - public static async random(numCalls: number, numLogsPerCall: number): Promise { - if (numCalls * numLogsPerCall > MAX_CONTRACT_CLASS_LOGS_PER_TX) { - throw new Error( - `Trying to create ${numCalls * numLogsPerCall} logs for one tx (max: ${MAX_CONTRACT_CLASS_LOGS_PER_TX})`, - ); - } - const functionLogs: UnencryptedFunctionL2Logs[] = []; - for (let i = 0; i < numCalls; i++) { - functionLogs.push(await UnencryptedFunctionL2Logs.random(numLogsPerCall)); - } - return new ContractClassTxL2Logs(functionLogs); - } - - /** - * @param logs - Logs to be hashed. - * @returns The hash of the logs. - * Note: This is a TS implementation of `computeKernelUnencryptedLogsHash` function in Decoder.sol. See that function documentation - * for more details. - */ - public override hash(): Buffer { - const unrolledLogs = this.unrollLogs(); - return ContractClassTxL2Logs.hashSiloedLogs(unrolledLogs.map(log => log.getSiloedHash())); - } - - /** - * Hashes siloed contract class logs as in the same way as the base rollup would. - * @param siloedLogHashes - The siloed log hashes - * @returns The hash of the logs. - */ - public static hashSiloedLogs(siloedLogHashes: Buffer[]): Buffer { - if (siloedLogHashes.length == 0) { - return Buffer.alloc(32); - } - - let allSiloedLogHashes = Buffer.alloc(0); - for (const siloedLogHash of siloedLogHashes) { - allSiloedLogHashes = Buffer.concat([allSiloedLogHashes, siloedLogHash]); - } - // pad the end of logs with 0s - for (let i = 0; i < MAX_CONTRACT_CLASS_LOGS_PER_TX - siloedLogHashes.length; i++) { - allSiloedLogHashes = Buffer.concat([allSiloedLogHashes, Buffer.alloc(32)]); - } - - return sha256Trunc(allSiloedLogHashes); - } -} diff --git a/yarn-project/circuit-types/src/logs/unencrypted_l2_log.test.ts b/yarn-project/circuit-types/src/logs/unencrypted_l2_log.test.ts deleted file mode 100644 index 079202f1bce2..000000000000 --- a/yarn-project/circuit-types/src/logs/unencrypted_l2_log.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { jsonStringify } from '@aztec/foundation/json-rpc'; - -import { UnencryptedL2Log } from './unencrypted_l2_log.js'; - -describe('UnencryptedL2Log', () => { - it('can encode L2Logs to buffer and back', async () => { - const l2Logs = await UnencryptedL2Log.random(); - - const buffer = l2Logs.toBuffer(); - const recovered = UnencryptedL2Log.fromBuffer(buffer); - - expect(recovered).toEqual(l2Logs); - }); - - it('can encode to JSON and back', async () => { - const l2Logs = await UnencryptedL2Log.random(); - - const buffer = jsonStringify(l2Logs); - const recovered = UnencryptedL2Log.schema.parse(JSON.parse(buffer)); - - expect(recovered).toEqual(l2Logs); - }); -}); diff --git a/yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts b/yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts deleted file mode 100644 index 449befe8bf36..000000000000 --- a/yarn-project/circuit-types/src/logs/unencrypted_l2_log.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { AztecAddress } from '@aztec/circuits.js'; -import { randomBytes, sha256Trunc } from '@aztec/foundation/crypto'; -import { schemas } from '@aztec/foundation/schemas'; -import { BufferReader, prefixBufferWithLength, toHumanReadable } from '@aztec/foundation/serialize'; - -import { z } from 'zod'; - -/** - * Represents an individual unencrypted log entry. - * TODO(#8945): Currently only used for contract class logs. When these are fields, delete this class. - */ -export class UnencryptedL2Log { - constructor( - /** - * Address of the contract that emitted the event - * NOTE: It would make sense to have the address only in `FunctionL2Logs` because contract address is shared for all - * function logs. I didn't do this because it would require us to have 2 FunctionL2Logs classes (one with contract - * address and one without) for unencrypted and encrypted because encrypted logs can't expose the address in an - * unencrypted form. For this reason separating the classes seems like a premature optimization. - * TODO: Optimize this once it makes sense. - */ - public readonly contractAddress: AztecAddress, - /** The data contents of the log. */ - public readonly data: Buffer, - ) {} - - get length(): number { - // This +4 is because we prefix the log length - see toBuffer below - return this.data.length + AztecAddress.SIZE_IN_BYTES + 4; - } - - /** - * Serializes log to a buffer. - * @returns A buffer containing the serialized log. - */ - public toBuffer(): Buffer { - return Buffer.concat([this.contractAddress.toBuffer(), prefixBufferWithLength(this.data)]); - } - - /** - * Serializes log to a human readable string. - * Outputs the log data as ascii if all bytes are valid ascii characters between 32 and 126, or as hex otherwise. - * @returns A human readable representation of the log. - */ - public toHumanReadable(): string { - const payload = toHumanReadable(this.data); - return `UnencryptedL2Log(contractAddress: ${this.contractAddress.toString()}, data: ${payload})`; - } - - static get schema() { - return z - .object({ contractAddress: schemas.AztecAddress, data: schemas.Buffer }) - .transform(({ contractAddress, data }) => new UnencryptedL2Log(contractAddress, data)); - } - - /** - * Deserializes log from a buffer. - * @param buffer - The buffer or buffer reader containing the log. - * @returns Deserialized instance of `Log`. - */ - public static fromBuffer(buffer: Buffer | BufferReader): UnencryptedL2Log { - const reader = BufferReader.asReader(buffer); - const contractAddress = AztecAddress.fromBuffer(reader); - const data = reader.readBuffer(); - return new UnencryptedL2Log(contractAddress, data); - } - - /** - * Calculates hash of serialized logs. - * @returns Buffer containing 248 bits of information of sha256 hash. - */ - public hash(): Buffer { - const preimage = this.toBuffer(); - return sha256Trunc(preimage); - } - - /** - * Calculates siloed hash of serialized logs. - * In the kernels, we use the storage contract address and not the one encoded here. - * They should match, so it seems fine to use the existing info here. - * @returns Buffer containing 248 bits of information of sha256 hash. - */ - public getSiloedHash(): Buffer { - const hash = this.hash(); - return sha256Trunc(Buffer.concat([this.contractAddress.toBuffer(), hash])); - } - - /** - * Crates a random log. - * @returns A random log. - */ - public static async random(): Promise { - const contractAddress = await AztecAddress.random(); - const dataLength = randomBytes(1)[0]; - const data = randomBytes(dataLength); - return new UnencryptedL2Log(contractAddress, data); - } -} diff --git a/yarn-project/circuit-types/src/mocks.ts b/yarn-project/circuit-types/src/mocks.ts index 68710913c229..3346cffc46ab 100644 --- a/yarn-project/circuit-types/src/mocks.ts +++ b/yarn-project/circuit-types/src/mocks.ts @@ -22,7 +22,7 @@ import { times } from '@aztec/foundation/collection'; import { randomBytes } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { ContractClassTxL2Logs, Note } from './logs/index.js'; +import { Note } from './logs/index.js'; import { ExtendedNote, UniqueNote } from './notes/index.js'; import { CountedPublicExecutionRequest, @@ -150,13 +150,7 @@ export const mockTx = async ( .build(); } - const tx = new Tx( - data, - ClientIvcProof.empty(), - ContractClassTxL2Logs.empty(), - enqueuedPublicFunctionCalls, - publicTeardownFunctionCall, - ); + const tx = new Tx(data, ClientIvcProof.empty(), [], enqueuedPublicFunctionCalls, publicTeardownFunctionCall); return tx; }; diff --git a/yarn-project/circuit-types/src/private_execution_result.ts b/yarn-project/circuit-types/src/private_execution_result.ts index 1f1a9b7e3216..6050a0142a7b 100644 --- a/yarn-project/circuit-types/src/private_execution_result.ts +++ b/yarn-project/circuit-types/src/private_execution_result.ts @@ -1,4 +1,4 @@ -import { type IsEmpty, PrivateCircuitPublicInputs, sortByCounter } from '@aztec/circuits.js'; +import { ContractClassLog, type IsEmpty, PrivateCircuitPublicInputs, sortByCounter } from '@aztec/circuits.js'; import { NoteSelector } from '@aztec/foundation/abi'; import { timesParallel } from '@aztec/foundation/collection'; import { randomBytes, randomInt } from '@aztec/foundation/crypto'; @@ -8,7 +8,7 @@ import { type FieldsOf } from '@aztec/foundation/types'; import { z } from 'zod'; -import { Note, UnencryptedFunctionL2Logs, UnencryptedL2Log } from './logs/index.js'; +import { Note } from './logs/index.js'; import { PublicExecutionRequest } from './public_execution_request.js'; /** @@ -44,23 +44,23 @@ export class NoteAndSlot { } export class CountedContractClassLog implements IsEmpty { - constructor(public log: UnencryptedL2Log, public counter: number) {} + constructor(public log: ContractClassLog, public counter: number) {} static get schema() { return z .object({ - log: UnencryptedL2Log.schema, + log: ContractClassLog.schema, counter: schemas.Integer, }) .transform(CountedContractClassLog.from); } - static from(fields: { log: UnencryptedL2Log; counter: number }) { + static from(fields: { log: ContractClassLog; counter: number }) { return new CountedContractClassLog(fields.log, fields.counter); } isEmpty(): boolean { - return !this.log.data.length && !this.counter; + return this.log.isEmpty() && !this.counter; } } @@ -199,7 +199,7 @@ export class PrivateCallExecutionResult { await timesParallel(nested, () => PrivateCallExecutionResult.random(0)), [await CountedPublicExecutionRequest.random()], await PublicExecutionRequest.random(), - [new CountedContractClassLog(await UnencryptedL2Log.random(), randomInt(10))], + [new CountedContractClassLog(ContractClassLog.random(), randomInt(10))], ); } } @@ -241,10 +241,10 @@ function collectContractClassLogs(execResult: PrivateCallExecutionResult): Count * @param execResult - The topmost execution result. * @returns All contract class logs. */ -export function collectSortedContractClassLogs(execResult: PrivateExecutionResult): UnencryptedFunctionL2Logs { +export function collectSortedContractClassLogs(execResult: PrivateExecutionResult): ContractClassLog[] { const allLogs = collectContractClassLogs(execResult.entrypoint); const sortedLogs = sortByCounter(allLogs); - return new UnencryptedFunctionL2Logs(sortedLogs.map(l => l.log)); + return sortedLogs.map(l => l.log); } function collectEnqueuedCountedPublicExecutionRequests( diff --git a/yarn-project/circuit-types/src/stats/stats.ts b/yarn-project/circuit-types/src/stats/stats.ts index 9c9e8ec4076a..0cd7493098c7 100644 --- a/yarn-project/circuit-types/src/stats/stats.ts +++ b/yarn-project/circuit-types/src/stats/stats.ts @@ -222,7 +222,7 @@ export type TxStats = { privateLogCount: number; /** How many classes were registered through the canonical class registerer. */ classRegisteredCount: number; - /** Serialized size of contract class logs. */ + /** Serialized size of contract class logs in fields. */ contractClassLogSize: number; /** How this tx pays for its fee */ feePaymentMethod: 'fee_juice' | 'fpc_public' | 'fpc_private'; diff --git a/yarn-project/circuit-types/src/tx/processed_tx.ts b/yarn-project/circuit-types/src/tx/processed_tx.ts index 1272594371fc..a25c4cc607ea 100644 --- a/yarn-project/circuit-types/src/tx/processed_tx.ts +++ b/yarn-project/circuit-types/src/tx/processed_tx.ts @@ -1,7 +1,7 @@ import { type ClientIvcProof, CombinedConstantData, - Fr, + type Fr, Gas, type GlobalVariables, type PrivateKernelTailCircuitPublicInputs, @@ -97,8 +97,7 @@ export async function makeProcessedTxFromPrivateOnlyTx( [feePaymentPublicDataWrite], data.end.privateLogs.filter(l => !l.isEmpty()), [], - data.end.contractClassLogPreimagesLength, - tx.contractClassLogs, + await tx.filterContractClassLogs(tx.data.getNonEmptyContractClassLogsHashes(), true), ); const gasUsed = { @@ -143,7 +142,10 @@ export async function makeProcessedTxFromTxWithPublicCalls( ...(revertCode.isOK() ? tx.data.forPublic!.revertibleAccumulatedData.privateLogs : []), ].filter(l => !l.isEmpty()); - const contractClassLogPreimagesLength = tx.contractClassLogs.getKernelLength(); + const contractClassLogs = [ + ...(await tx.getSplitContractClassLogs(false, true)), + ...(revertCode.isOK() ? await tx.getSplitContractClassLogs(false, true) : []), + ].filter(l => !l.isEmpty()); const txEffect = new TxEffect( revertCode, @@ -157,8 +159,7 @@ export async function makeProcessedTxFromTxWithPublicCalls( publicDataWrites, privateLogs, avmPublicInputs.accumulatedData.publicLogs.filter(l => !l.isEmpty()), - new Fr(contractClassLogPreimagesLength), - tx.contractClassLogs, + contractClassLogs, ); return { diff --git a/yarn-project/circuit-types/src/tx/simulated_tx.ts b/yarn-project/circuit-types/src/tx/simulated_tx.ts index b68a90ab53b7..1ea1503042af 100644 --- a/yarn-project/circuit-types/src/tx/simulated_tx.ts +++ b/yarn-project/circuit-types/src/tx/simulated_tx.ts @@ -7,7 +7,6 @@ import { type PrivateKernelProverProfileResult, PrivateKernelProverProfileResultSchema, } from '../interfaces/private_kernel_prover.js'; -import { ContractClassTxL2Logs } from '../logs/tx_l2_logs.js'; import { type PrivateCallExecutionResult, PrivateExecutionResult, @@ -30,7 +29,7 @@ export class PrivateSimulationResult { } toSimulatedTx(): Tx { - const contractClassLogs = new ContractClassTxL2Logs([collectSortedContractClassLogs(this.privateExecutionResult)]); + const contractClassLogs = collectSortedContractClassLogs(this.privateExecutionResult); const enqueuedPublicFunctions = collectEnqueuedPublicFunctionCalls(this.privateExecutionResult); const teardownPublicFunction = collectPublicTeardownFunctionCall(this.privateExecutionResult); @@ -119,7 +118,7 @@ export class TxProvingResult { ) {} toTx(): Tx { - const contractClassLogs = new ContractClassTxL2Logs([collectSortedContractClassLogs(this.privateExecutionResult)]); + const contractClassLogs = collectSortedContractClassLogs(this.privateExecutionResult); const enqueuedPublicFunctions = collectEnqueuedPublicFunctionCalls(this.privateExecutionResult); const teardownPublicFunction = collectPublicTeardownFunctionCall(this.privateExecutionResult); diff --git a/yarn-project/circuit-types/src/tx/tx.ts b/yarn-project/circuit-types/src/tx/tx.ts index 50deb357c465..257063569784 100644 --- a/yarn-project/circuit-types/src/tx/tx.ts +++ b/yarn-project/circuit-types/src/tx/tx.ts @@ -1,11 +1,13 @@ import { ClientIvcProof, + ContractClassLog, Fr, type GasSettings, PrivateKernelTailCircuitPublicInputs, PrivateLog, - type PrivateToPublicAccumulatedData, + ScopedLogHash, } from '@aztec/circuits.js'; +import { siloContractClassLog } from '@aztec/circuits.js/hash'; import { Buffer32 } from '@aztec/foundation/buffer'; import { arraySerializedSizeOfNonEmpty } from '@aztec/foundation/collection'; import { BufferReader, serializeArrayOfBufferableToVector, serializeToBuffer } from '@aztec/foundation/serialize'; @@ -15,7 +17,6 @@ import { z } from 'zod'; import { type GetPublicLogsResponse } from '../logs/get_logs_response.js'; import { type L2LogsSource } from '../logs/l2_logs_source.js'; -import { ContractClassTxL2Logs } from '../logs/tx_l2_logs.js'; import { Gossipable } from '../p2p/gossipable.js'; import { TopicType, createTopicString } from '../p2p/topic_type.js'; import { PublicExecutionRequest } from '../public_execution_request.js'; @@ -44,7 +45,7 @@ export class Tx extends Gossipable { /** * Contract class logs generated by the tx. */ - public contractClassLogs: ContractClassTxL2Logs, + public contractClassLogs: ContractClassLog[], /** * Enqueued public functions from the private circuit to be run by the sequencer. */ @@ -99,7 +100,7 @@ export class Tx extends Gossipable { return new Tx( reader.readObject(PrivateKernelTailCircuitPublicInputs), reader.readObject(ClientIvcProof), - reader.readObject(ContractClassTxL2Logs), + reader.readVectorUint8Prefix(ContractClassLog), reader.readVectorUint8Prefix(PublicExecutionRequest), reader.readObject(PublicExecutionRequest), ); @@ -112,7 +113,7 @@ export class Tx extends Gossipable { return new Tx( data, ClientIvcProof.empty(), - ContractClassTxL2Logs.empty(), + [], [], publicTeardownExecutionRequest ? publicTeardownExecutionRequest : PublicExecutionRequest.empty(), ); @@ -126,7 +127,7 @@ export class Tx extends Gossipable { return serializeToBuffer([ this.data, this.clientIvcProof, - this.contractClassLogs, + serializeArrayOfBufferableToVector(this.contractClassLogs, 1), serializeArrayOfBufferableToVector(this.enqueuedPublicFunctionCalls, 1), this.publicTeardownFunctionCall, ]); @@ -137,7 +138,7 @@ export class Tx extends Gossipable { .object({ data: PrivateKernelTailCircuitPublicInputs.schema, clientIvcProof: ClientIvcProof.schema, - contractClassLogs: ContractClassTxL2Logs.schema, + contractClassLogs: z.array(ContractClassLog.schema), enqueuedPublicFunctionCalls: z.array(PublicExecutionRequest.schema), publicTeardownFunctionCall: PublicExecutionRequest.schema, }) @@ -163,6 +164,40 @@ export class Tx extends Gossipable { return logsSource.getPublicLogs({ txHash: await this.getTxHash() }); } + /** + * Gets either revertible or non revertible contract class logs emitted by this tx. + * @param revertible - true for revertible only logs, false for non reverible only logs. + * @returns The requested logs. + */ + async getSplitContractClassLogs(revertible: boolean, silo: boolean = false): Promise { + // Should only be called on txs with public calls + if (!this.data.forPublic) { + return []; + } + const contractClassLogsHashes = revertible + ? this.data.forPublic.revertibleAccumulatedData.contractClassLogsHashes.filter(h => !h.isEmpty()) + : this.data.forPublic.nonRevertibleAccumulatedData.contractClassLogsHashes.filter(h => !h.isEmpty()); + return await this.filterContractClassLogs(contractClassLogsHashes, silo); + } + + /** + * Filters contract class logs emitted by this tx. + * @param logHashes - logs to keep represented by their hashes. + * @param silo - whether to silo the logs before returning them. + * @returns The requested logs. + */ + async filterContractClassLogs(logHashes: ScopedLogHash[], silo: boolean = false): Promise { + const contractClassLogs = []; + for (const log of this.contractClassLogs) { + const hashedLog = await log.hash(); + const logHash = logHashes.find(hash => hash.value.equals(hashedLog)); + if (logHash) { + contractClassLogs.push(silo ? await siloContractClassLog(log, logHash.contractAddress) : log); + } + } + return contractClassLogs; + } + /** * Computes (if necessary) & return transaction hash. * @returns The hash of the public inputs of the private kernel tail circuit. @@ -195,6 +230,8 @@ export class Tx extends Gossipable { noteHashCount: this.data.getNonEmptyNoteHashes().length, nullifierCount: this.data.getNonEmptyNullifiers().length, privateLogCount: this.data.getNonEmptyPrivateLogs().length, + classRegisteredCount: this.data.getNonEmptyContractClassLogsHashes().length, + contractClassLogSize: this.data.getNonEmptyContractClassLogsLength(), proofSize: this.clientIvcProof.clientIvcProofBuffer.length, size: this.toBuffer().length, @@ -207,8 +244,6 @@ export class Tx extends Gossipable { ? 'fpc_public' : 'fpc_private' : 'fee_juice', - classRegisteredCount: this.contractClassLogs.unrollLogs().length, - contractClassLogSize: this.contractClassLogs.getSerializedLength(), }; } @@ -216,7 +251,7 @@ export class Tx extends Gossipable { return ( this.data.getSize() + this.clientIvcProof.clientIvcProofBuffer.length + - this.contractClassLogs.getSerializedLength() + + arraySerializedSizeOfNonEmpty(this.contractClassLogs) + arraySerializedSizeOfNonEmpty(this.enqueuedPublicFunctionCalls) + arraySerializedSizeOfNonEmpty([this.publicTeardownFunctionCall]) ); @@ -228,10 +263,10 @@ export class Tx extends Gossipable { */ getEstimatedPrivateTxEffectsSize() { return ( - this.contractClassLogs.getSerializedLength() + this.data.getNonEmptyNoteHashes().length * Fr.SIZE_IN_BYTES + this.data.getNonEmptyNullifiers().length * Fr.SIZE_IN_BYTES + - this.data.getNonEmptyPrivateLogs().length * PrivateLog.SIZE_IN_BYTES + this.data.getNonEmptyPrivateLogs().length * PrivateLog.SIZE_IN_BYTES + + this.data.getNonEmptyContractClassLogsLength() * Fr.SIZE_IN_BYTES ); } @@ -261,7 +296,7 @@ export class Tx extends Gossipable { static clone(tx: Tx): Tx { const publicInputs = PrivateKernelTailCircuitPublicInputs.fromBuffer(tx.data.toBuffer()); const clientIvcProof = ClientIvcProof.fromBuffer(tx.clientIvcProof.toBuffer()); - const contractClassLogs = ContractClassTxL2Logs.fromBuffer(tx.contractClassLogs.toBuffer()); + const contractClassLogs = tx.contractClassLogs.map(x => ContractClassLog.fromBuffer(x.toBuffer())); const enqueuedPublicFunctionCalls = tx.enqueuedPublicFunctionCalls.map(x => PublicExecutionRequest.fromBuffer(x.toBuffer()), ); @@ -284,7 +319,7 @@ export class Tx extends Gossipable { return new Tx( PrivateKernelTailCircuitPublicInputs.emptyWithNullifier(), ClientIvcProof.empty(), - await ContractClassTxL2Logs.random(1, 1), + [ContractClassLog.random()], [await PublicExecutionRequest.random()], await PublicExecutionRequest.random(), ); @@ -304,11 +339,8 @@ export class Tx extends Gossipable { * @param logHashes the individual log hashes we want to keep * @param out the output to put passing logs in, to keep this function abstract */ - public filterRevertedLogs(privateNonRevertible: PrivateToPublicAccumulatedData) { - this.contractClassLogs = this.contractClassLogs.filterScoped( - privateNonRevertible.contractClassLogsHashes, - ContractClassTxL2Logs.empty(), - ); + public async filterRevertedLogs() { + this.contractClassLogs = await this.getSplitContractClassLogs(false); } } diff --git a/yarn-project/circuit-types/src/tx_effect.test.ts b/yarn-project/circuit-types/src/tx_effect.test.ts index d6bbcf9cd19e..306e0ae88852 100644 --- a/yarn-project/circuit-types/src/tx_effect.test.ts +++ b/yarn-project/circuit-types/src/tx_effect.test.ts @@ -12,8 +12,7 @@ describe('TxEffect', () => { it('converts to and from fields', async () => { const txEffect = await TxEffect.random(); const fields = txEffect.toBlobFields(); - // TODO(#8954): When logs are refactored into fields, we won't need to inject them here - expect(TxEffect.fromBlobFields(fields, txEffect.contractClassLogs)).toEqual(txEffect); + expect(TxEffect.fromBlobFields(fields)).toEqual(txEffect); }); it('converts empty to and from fields', () => { @@ -33,8 +32,7 @@ describe('TxEffect', () => { fields = txEffect.toBlobFields(); // Add an extra field fields.push(new Fr(7)); - // TODO(#8954): When logs are refactored into fields, we won't need to inject them here - expect(() => TxEffect.fromBlobFields(fields, txEffect.contractClassLogs)).toThrow('Too many fields'); + expect(() => TxEffect.fromBlobFields(fields)).toThrow('Too many fields'); txEffect = await TxEffect.random(); fields = txEffect.toBlobFields(); @@ -44,7 +42,6 @@ describe('TxEffect', () => { // Add an extra field which looks like a valid prefix const fakePrefix = new Fr(buf); fields.push(fakePrefix); - // TODO(#8954): When logs are refactored into fields, we won't need to inject them here - expect(() => TxEffect.fromBlobFields(fields, txEffect.contractClassLogs)).toThrow('Invalid fields'); + expect(() => TxEffect.fromBlobFields(fields)).toThrow('Invalid fields'); }); }); diff --git a/yarn-project/circuit-types/src/tx_effect.ts b/yarn-project/circuit-types/src/tx_effect.ts index 5ad060395853..7341f807b8e4 100644 --- a/yarn-project/circuit-types/src/tx_effect.ts +++ b/yarn-project/circuit-types/src/tx_effect.ts @@ -1,7 +1,10 @@ import { CONTRACT_CLASS_LOGS_PREFIX, + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + ContractClassLog, Fr, L2_L1_MSGS_PREFIX, + MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, @@ -25,7 +28,6 @@ import { type FieldsOf, makeTuple, makeTupleAsync } from '@aztec/foundation/arra import { toBufferBE } from '@aztec/foundation/bigint-buffer'; import { padArrayEnd } from '@aztec/foundation/collection'; import { sha256Trunc } from '@aztec/foundation/crypto'; -import { jsonStringify } from '@aztec/foundation/json-rpc'; import { schemas } from '@aztec/foundation/schemas'; import { BufferReader, @@ -38,7 +40,6 @@ import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; import { inspect } from 'util'; import { z } from 'zod'; -import { ContractClassTxL2Logs, type TxL2Logs } from './logs/index.js'; import { TxHash } from './tx/tx_hash.js'; export { RevertCodeEnum } from '@aztec/circuits.js'; @@ -90,10 +91,9 @@ export class TxEffect { */ public publicLogs: PublicLog[], /** - * The logs and logs lengths of the txEffect + * The contract class logs. */ - public contractClassLogsLength: Fr, - public contractClassLogs: ContractClassTxL2Logs, + public contractClassLogs: ContractClassLog[], ) { // TODO(#4638): Clean this up once we have isDefault() everywhere --> then we don't have to deal with 2 different // functions (isZero and isEmpty) @@ -156,8 +156,7 @@ export class TxEffect { serializeArrayOfBufferableToVector(this.publicDataWrites, 1), serializeArrayOfBufferableToVector(this.privateLogs, 1), serializeArrayOfBufferableToVector(this.publicLogs, 1), - this.contractClassLogsLength, - this.contractClassLogs, + serializeArrayOfBufferableToVector(this.contractClassLogs, 1), ]); } @@ -184,8 +183,7 @@ export class TxEffect { reader.readVectorUint8Prefix(PublicDataWrite), reader.readVectorUint8Prefix(PrivateLog), reader.readVectorUint8Prefix(PublicLog), - Fr.fromBuffer(reader), - reader.readObject(ContractClassTxL2Logs), + reader.readVectorUint8Prefix(ContractClassLog), ); } @@ -218,7 +216,6 @@ export class TxEffect { } static async random(numPublicCallsPerTx = 3, numPublicLogsPerCall = 1): Promise { - const contractClassLogs = await ContractClassTxL2Logs.random(1, 1); return new TxEffect( RevertCode.random(), TxHash.random(), @@ -229,25 +226,12 @@ export class TxEffect { makeTuple(MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, () => new PublicDataWrite(Fr.random(), Fr.random())), makeTuple(MAX_PRIVATE_LOGS_PER_TX, () => new PrivateLog(makeTuple(PRIVATE_LOG_SIZE_IN_FIELDS, Fr.random))), await makeTupleAsync(numPublicCallsPerTx * numPublicLogsPerCall, PublicLog.random), - new Fr(contractClassLogs.getKernelLength()), - contractClassLogs, + makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, () => ContractClassLog.random()), ); } static empty(): TxEffect { - return new TxEffect( - RevertCode.OK, - TxHash.zero(), - Fr.ZERO, - [], - [], - [], - [], - [], - [], - Fr.ZERO, - ContractClassTxL2Logs.empty(), - ); + return new TxEffect(RevertCode.OK, TxHash.zero(), Fr.ZERO, [], [], [], [], [], [], []); } isEmpty(): boolean { @@ -379,11 +363,13 @@ export class TxEffect { flattened.push(this.toPrefix(PUBLIC_LOGS_PREFIX, this.publicLogs.length * PUBLIC_LOG_SIZE_IN_FIELDS)); flattened.push(...this.publicLogs.map(l => l.toFields()).flat()); } - // TODO(#8954): When logs are refactored into fields, we will append the values here - // Currently appending the single log hash as an interim solution - if (this.contractClassLogs.unrollLogs().length) { - flattened.push(this.toPrefix(CONTRACT_CLASS_LOGS_PREFIX, this.contractClassLogs.unrollLogs().length)); - flattened.push(...this.contractClassLogs.unrollLogs().map(log => Fr.fromBuffer(log.getSiloedHash()))); + if (this.contractClassLogs.length) { + const totalLogLen = this.contractClassLogs.reduce( + (total, log) => total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 1), + 0, + ); + flattened.push(this.toPrefix(CONTRACT_CLASS_LOGS_PREFIX, totalLogLen)); + flattened.push(...this.contractClassLogs.flatMap(l => [new Fr(l.getEmittedLength()), ...l.getEmittedFields()])); } // The first value appended to each list of fields representing a tx effect is: @@ -396,9 +382,8 @@ export class TxEffect { /** * Decodes a flat packed array of prefixed fields to TxEffect - * TODO(#8954): When logs are refactored into fields, we won't need to inject them here, instead just reading from fields as below */ - static fromBlobFields(fields: Fr[] | FieldReader, contractClassLogs?: ContractClassTxL2Logs) { + static fromBlobFields(fields: Fr[] | FieldReader) { const ensureEmpty = (arr: Array) => { if (arr.length) { throw new Error('Invalid fields given to TxEffect.fromBlobFields(): Attempted to assign property twice.'); @@ -462,43 +447,29 @@ export class TxEffect { } break; } - // TODO(#8954): When logs are refactored into fields, we will append the read fields here - case CONTRACT_CLASS_LOGS_PREFIX: - // effect.contractClassLogs = ContractClassTxL2Logs.fromFields(reader.readFieldArray(length)); - ensureEmpty(effect.contractClassLogs.functionLogs); - if (!contractClassLogs) { - throw new Error(`Tx effect has contractClassLogs logs, but they were not passed raw to .fromBlobFields()`); + case CONTRACT_CLASS_LOGS_PREFIX: { + ensureEmpty(effect.contractClassLogs); + const flatContractClassLogs = reader.readFieldArray(length); + let i = 0; + while (i < length) { + const logLen = flatContractClassLogs[i++].toNumber(); + const logFields = flatContractClassLogs.slice(i, (i += logLen)); + effect.contractClassLogs.push( + ContractClassLog.fromFields( + logFields.concat(new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - logLen).fill(Fr.ZERO)), + ), + ); } - this.checkInjectedLogs(contractClassLogs, reader.readFieldArray(length)); - effect.contractClassLogs = contractClassLogs; - effect.contractClassLogsLength = new Fr(contractClassLogs.getKernelLength()); break; + } case REVERT_CODE_PREFIX: default: throw new Error(`Too many fields to decode given to TxEffect.fromBlobFields()`); } } - - // If the input fields have no logs, ensure we match the original struct by reassigning injected logs - effect.contractClassLogs = - !effect.contractClassLogs.getTotalLogCount() && contractClassLogs ? contractClassLogs : effect.contractClassLogs; return effect; } - // TODO(#8954): Remove below when logs are refactored into fields - private static checkInjectedLogs(injected: TxL2Logs, expectedHashes: Fr[]) { - injected.unrollLogs().forEach((log, i) => { - const logHash = log.getSiloedHash(); - if (!Fr.fromBuffer(logHash).equals(expectedHashes[i])) { - throw new Error( - `Log hash mismatch when reconstructing tx effect. Expected: ${Fr.fromBuffer(logHash)}, Got: ${ - expectedHashes[i] - }`, - ); - } - }); - } - static from(fields: FieldsOf) { return new TxEffect( fields.revertCode, @@ -510,7 +481,6 @@ export class TxEffect { fields.publicDataWrites, fields.privateLogs, fields.publicLogs, - fields.contractClassLogsLength, fields.contractClassLogs, ); } @@ -527,8 +497,7 @@ export class TxEffect { publicDataWrites: z.array(PublicDataWrite.schema), privateLogs: z.array(PrivateLog.schema), publicLogs: z.array(PublicLog.schema), - contractClassLogsLength: schemas.Fr, - contractClassLogs: ContractClassTxL2Logs.schema, + contractClassLogs: z.array(ContractClassLog.schema), }) .transform(TxEffect.from); } @@ -544,8 +513,7 @@ export class TxEffect { publicDataWrites: [${this.publicDataWrites.map(h => h.toString()).join(', ')}], privateLogs: [${this.privateLogs.map(l => l.toString()).join(', ')}], publicLogs: [${this.publicLogs.map(l => l.toString()).join(', ')}], - contractClassLogsLength: ${this.contractClassLogsLength}, - contractClassLogs: ${jsonStringify(this.contractClassLogs)} + contractClassLogs: [${this.contractClassLogs.map(l => l.toString()).join(', ')}], }`; } diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 347ef462283d..274d6b158688 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -91,16 +91,11 @@ export const MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; export const MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; -export const REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = - 11121068431693264234253912047066709627593769337094408533543930778360n; -export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = - 2889881020989534926461066592611988634597302675057895885580456197069n; -export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = - 24399338136397901754495080759185489776044879232766421623673792970137n; -export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = - 14061769416655647708490531650437236735160113654556896985372298487345n; -export const DEPLOYER_CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE = - 1534834688047131268740281708431107902615560100979874281215533519862n; +export const REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = 11121068431693264234253912047066709627593769337094408533543930778360n; +export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = 2889881020989534926461066592611988634597302675057895885580456197069n; +export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 24399338136397901754495080759185489776044879232766421623673792970137n; +export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 14061769416655647708490531650437236735160113654556896985372298487345n; +export const DEPLOYER_CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE = 1534834688047131268740281708431107902615560100979874281215533519862n; export const MAX_PROTOCOL_CONTRACTS = 7; export const CANONICAL_AUTH_REGISTRY_ADDRESS = 1; export const DEPLOYER_CONTRACT_ADDRESS = 2; @@ -149,6 +144,7 @@ export const READ_REQUEST_LENGTH = 2; export const TREE_LEAF_READ_REQUEST_LENGTH = 2; export const PRIVATE_LOG_DATA_LENGTH = 20; export const SCOPED_PRIVATE_LOG_DATA_LENGTH = 21; +export const CONTRACT_CLASS_LOG_SIZE_IN_FIELDS = 3019; export const LOG_HASH_LENGTH = 3; export const SCOPED_LOG_HASH_LENGTH = 4; export const NOTE_HASH_LENGTH = 2; @@ -179,7 +175,7 @@ export const IPA_CLAIM_LENGTH = 10; export const SCOPED_READ_REQUEST_LEN = 3; export const PUBLIC_DATA_READ_LENGTH = 3; export const PRIVATE_VALIDATION_REQUESTS_LENGTH = 772; -export const PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH = 741; +export const PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH = 740; export const TX_CONSTANT_DATA_LENGTH = 37; export const COMBINED_CONSTANT_DATA_LENGTH = 46; export const PRIVATE_ACCUMULATED_DATA_LENGTH = 1412; @@ -189,7 +185,7 @@ export const PRIVATE_TO_AVM_ACCUMULATED_DATA_LENGTH = 160; export const NUM_PRIVATE_TO_AVM_ACCUMULATED_DATA_ARRAYS = 3; export const AVM_ACCUMULATED_DATA_LENGTH = 400; export const PRIVATE_TO_PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 1847; -export const PRIVATE_TO_ROLLUP_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 783; +export const PRIVATE_TO_ROLLUP_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 782; export const AVM_CIRCUIT_PUBLIC_INPUTS_LENGTH = 1091; export const CONSTANT_ROLLUP_DATA_LENGTH = 13; export const BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = 52; @@ -274,6 +270,7 @@ export const L2_GAS_PER_NULLIFIER_READ_REQUEST = 1440; export const L2_GAS_PER_L1_TO_L2_MSG_READ_REQUEST = 1404; export const L2_GAS_PER_LOG_BYTE = 4; export const L2_GAS_PER_PRIVATE_LOG = 0; +export const L2_GAS_PER_CONTRACT_CLASS_LOG = 0; export const L2_GAS_PER_L2_TO_L1_MSG = 200; export const AVM_ADD_BASE_L2_GAS = 27; export const AVM_SUB_BASE_L2_GAS = 27; @@ -411,4 +408,4 @@ export enum GeneratorIndex { SYMMETRIC_KEY_2 = 55, PUBLIC_TX_HASH = 56, PRIVATE_TX_HASH = 57, -} +} \ No newline at end of file diff --git a/yarn-project/circuits.js/src/hash/hash.ts b/yarn-project/circuits.js/src/hash/hash.ts index 4489e00f87a3..f9b59f942462 100644 --- a/yarn-project/circuits.js/src/hash/hash.ts +++ b/yarn-project/circuits.js/src/hash/hash.ts @@ -3,6 +3,7 @@ import { poseidon2Hash, poseidon2HashWithSeparator, sha256Trunc } from '@aztec/f import { Fr } from '@aztec/foundation/fields'; import { GeneratorIndex } from '../constants.gen.js'; +import { type ContractClassLog } from '../index.js'; import { type ScopedL2ToL1Message } from '../structs/l2_to_l1_message.js'; /** @@ -131,3 +132,12 @@ export function siloL2ToL1Message(l2ToL1Message: ScopedL2ToL1Message, version: F ]); return Fr.fromBuffer(sha256Trunc(preimage)); } + +export async function siloContractClassLog(log: ContractClassLog, contract: AztecAddress): Promise { + const innerLog = log.clone(); + if (contract.isZero()) { + return innerLog; + } + innerLog.fields[0] = await poseidon2Hash([contract, innerLog.fields[0]]); + return innerLog; +} diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.test.ts b/yarn-project/circuits.js/src/structs/contract_class_log.test.ts new file mode 100644 index 000000000000..6b845900433b --- /dev/null +++ b/yarn-project/circuits.js/src/structs/contract_class_log.test.ts @@ -0,0 +1,45 @@ +import { Fr } from '@aztec/foundation/fields'; + +import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '../constants.gen.js'; +import { ContractClassLog } from './contract_class_log.js'; + +describe('PublicLog', () => { + let log: ContractClassLog; + + beforeAll(() => { + log = ContractClassLog.random(); + }); + + it('serializes to buffer and deserializes it back', () => { + const buffer = log.toBuffer(); + const res = ContractClassLog.fromBuffer(buffer); + expect(res).toEqual(log); + }); + + it('serializes to field array and deserializes it back', () => { + const fieldArray = log.toFields(); + const res = ContractClassLog.fromFields(fieldArray); + expect(res).toEqual(log); + }); + + it('number of fields matches constant', () => { + const fields = log.toFields(); + expect(fields.length).toBe(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS); + }); + + it('number of emitted fields is correct', () => { + const smallLogFields = [new Fr(1), new Fr(2), new Fr(3)]; + const smallLog = new ContractClassLog( + smallLogFields.concat(new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - smallLogFields.length).fill(Fr.ZERO)), + ); + expect(smallLog.getEmittedFields()).toEqual(smallLogFields); + expect(smallLog.getEmittedLength()).toBe(smallLogFields.length); + + const largeLogFields = Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - smallLogFields.length }, () => + Fr.random(), + ); + const largeLog = new ContractClassLog(largeLogFields.concat(new Array(smallLogFields.length).fill(Fr.ZERO))); + expect(largeLog.getEmittedFields()).toEqual(largeLogFields); + expect(largeLog.getEmittedLength()).toBe(largeLogFields.length); + }); +}); diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.ts b/yarn-project/circuits.js/src/structs/contract_class_log.ts new file mode 100644 index 000000000000..fb5b87f64a89 --- /dev/null +++ b/yarn-project/circuits.js/src/structs/contract_class_log.ts @@ -0,0 +1,104 @@ +import { poseidon2Hash } from '@aztec/foundation/crypto'; +import { Fr } from '@aztec/foundation/fields'; +import { schemas } from '@aztec/foundation/schemas'; +import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; + +import { inspect } from 'util'; +import { z } from 'zod'; + +import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '../constants.gen.js'; + +export class ContractClassLog { + static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * CONTRACT_CLASS_LOG_SIZE_IN_FIELDS; + + // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' + // public fields: Tuple + constructor(public fields: Fr[]) { + if (fields.length !== CONTRACT_CLASS_LOG_SIZE_IN_FIELDS) { + throw new Error( + `Invalid number of fields for ContractClassLog. Expected ${CONTRACT_CLASS_LOG_SIZE_IN_FIELDS}, got ${fields.length}`, + ); + } + } + + toFields(): Fr[] { + return this.fields; + } + + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' + // return new ContractClassLog(reader.readFieldArray(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS)); + return new ContractClassLog(Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS }, () => reader.readField())); + } + + isEmpty() { + return this.fields.every(f => f.isZero()); + } + + static empty() { + return new ContractClassLog(new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS).fill(Fr.ZERO)); + } + + toBuffer(): Buffer { + return serializeToBuffer(this.fields); + } + + static fromBuffer(buffer: Buffer | BufferReader) { + const reader = BufferReader.asReader(buffer); + // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' + // reader.readArray(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, Fr); + const fields = Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS }, () => + reader.remainingBytes() == 0 ? Fr.ZERO : Fr.fromBuffer(reader), + ); + return new ContractClassLog(fields); + } + + clone() { + return ContractClassLog.fromBuffer(this.toBuffer()); + } + + static random() { + // TODO(MW): Lazily used /2 instead of CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, because this keeps overfilling block blobs + // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' + // makeTuple(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, Fr.random); + const fields = Array.from({ length: Math.ceil(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS / 2) }, () => Fr.random()); + return new ContractClassLog( + fields.concat(Array.from({ length: Math.floor(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS / 2) }, () => Fr.ZERO)), + ); + } + + getEmittedLength() { + // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back. + return this.getEmittedFields().length; + } + + getEmittedFields() { + let lastZeroIndex = 0; + for (let i = this.fields.length - 1; i >= 0; i--) { + if (!this.fields[i].isZero() && lastZeroIndex == 0) { + lastZeroIndex = i + 1; + break; + } + } + return this.fields.slice(0, lastZeroIndex); + } + + async hash() { + return await poseidon2Hash(this.fields); + } + + static get schema() { + return z + .object({ + fields: z.array(schemas.Fr), + }) + .transform(({ fields }) => ContractClassLog.fromFields(fields)); + } + + [inspect.custom](): string { + return `ContractClassLog { + fields: [${this.fields.map((x: Fr) => inspect(x)).join(', ')}], + }`; + } +} diff --git a/yarn-project/circuits.js/src/structs/index.ts b/yarn-project/circuits.js/src/structs/index.ts index f27cd4a22d12..379037337f09 100644 --- a/yarn-project/circuits.js/src/structs/index.ts +++ b/yarn-project/circuits.js/src/structs/index.ts @@ -7,6 +7,7 @@ export * from './client_ivc_proof.js'; export * from './complete_address.js'; export * from './content_commitment.js'; export * from './context/private_context_inputs.js'; +export * from './contract_class_log.js'; export * from './contract_storage_read.js'; export * from './contract_storage_update_request.js'; export * from './function_data.js'; diff --git a/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts index 9b389874bde4..ed0edbfc956d 100644 --- a/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_circuit_public_inputs.ts @@ -243,6 +243,20 @@ export class PrivateKernelTailCircuitPublicInputs { return privateLogs.filter(n => !n.isEmpty()); } + getNonEmptyContractClassLogsHashes() { + const contractClassLogsHashes = this.forPublic + ? mergeAccumulatedData( + this.forPublic.nonRevertibleAccumulatedData.contractClassLogsHashes, + this.forPublic.revertibleAccumulatedData.contractClassLogsHashes, + ) + : this.forRollup!.end.contractClassLogsHashes; + return contractClassLogsHashes.filter(h => !h.isEmpty()); + } + + getNonEmptyContractClassLogsLength() { + return this.getNonEmptyContractClassLogsHashes().reduce((total, log) => total + log.logHash.length, 0); + } + static fromBuffer(buffer: Buffer | BufferReader): PrivateKernelTailCircuitPublicInputs { const reader = BufferReader.asReader(buffer); const isForPublic = reader.readBoolean(); diff --git a/yarn-project/circuits.js/src/structs/kernel/private_to_rollup_accumulated_data.ts b/yarn-project/circuits.js/src/structs/kernel/private_to_rollup_accumulated_data.ts index 7d511c61ca91..b2eef8f7d488 100644 --- a/yarn-project/circuits.js/src/structs/kernel/private_to_rollup_accumulated_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/private_to_rollup_accumulated_data.ts @@ -45,10 +45,6 @@ export class PrivateToRollupAccumulatedData { * Note: Truncated to 31 bytes to fit in Fr. */ public contractClassLogsHashes: Tuple, - /** - * Total accumulated length of the contract class log preimages emitted in all the previous kernel iterations - */ - public contractClassLogPreimagesLength: Fr, ) {} getSize() { @@ -57,8 +53,7 @@ export class PrivateToRollupAccumulatedData { arraySerializedSizeOfNonEmpty(this.nullifiers) + arraySerializedSizeOfNonEmpty(this.l2ToL1Msgs) + arraySerializedSizeOfNonEmpty(this.privateLogs) + - arraySerializedSizeOfNonEmpty(this.contractClassLogsHashes) + - this.contractClassLogPreimagesLength.size + arraySerializedSizeOfNonEmpty(this.contractClassLogsHashes) ); } @@ -69,7 +64,6 @@ export class PrivateToRollupAccumulatedData { fields.l2ToL1Msgs, fields.privateLogs, fields.contractClassLogsHashes, - fields.contractClassLogPreimagesLength, ] as const; } @@ -106,7 +100,6 @@ export class PrivateToRollupAccumulatedData { reader.readArray(MAX_L2_TO_L1_MSGS_PER_TX, ScopedL2ToL1Message), reader.readArray(MAX_PRIVATE_LOGS_PER_TX, PrivateLog), reader.readArray(MAX_CONTRACT_CLASS_LOGS_PER_TX, ScopedLogHash), - Fr.fromBuffer(reader), ); } @@ -126,7 +119,6 @@ export class PrivateToRollupAccumulatedData { makeTuple(MAX_L2_TO_L1_MSGS_PER_TX, ScopedL2ToL1Message.empty), makeTuple(MAX_PRIVATE_LOGS_PER_TX, PrivateLog.empty), makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, ScopedLogHash.empty), - Fr.zero(), ); } @@ -162,7 +154,6 @@ export class PrivateToRollupAccumulatedData { .filter(x => !x.isEmpty()) .map(x => inspect(x)) .join(', ')}], - contractClassLogPreimagesLength: ${this.contractClassLogPreimagesLength.toString()}, }`; } } diff --git a/yarn-project/circuits.js/src/structs/log_hash.ts b/yarn-project/circuits.js/src/structs/log_hash.ts index de06c7c02b4f..a1424f1a3f80 100644 --- a/yarn-project/circuits.js/src/structs/log_hash.ts +++ b/yarn-project/circuits.js/src/structs/log_hash.ts @@ -1,5 +1,4 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { sha256Trunc } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; @@ -8,23 +7,23 @@ import { inspect } from 'util'; import { type Ordered } from '../interfaces/index.js'; export class LogHash implements Ordered { - constructor(public value: Fr, public counter: number, public length: Fr) {} + constructor(public value: Fr, public counter: number, public length: number) {} toFields(): Fr[] { - return [this.value, new Fr(this.counter), this.length]; + return [this.value, new Fr(this.counter), new Fr(this.length)]; } static fromFields(fields: Fr[] | FieldReader) { const reader = FieldReader.asReader(fields); - return new LogHash(reader.readField(), reader.readU32(), reader.readField()); + return new LogHash(reader.readField(), reader.readU32(), reader.readU32()); } isEmpty() { - return this.value.isZero() && this.length.isZero() && !this.counter; + return this.value.isZero() && !this.length && !this.counter; } static empty() { - return new LogHash(Fr.zero(), 0, Fr.zero()); + return new LogHash(Fr.zero(), 0, 0); } toBuffer(): Buffer { @@ -33,7 +32,7 @@ export class LogHash implements Ordered { static fromBuffer(buffer: Buffer | BufferReader) { const reader = BufferReader.asReader(buffer); - return new LogHash(Fr.fromBuffer(reader), reader.readNumber(), Fr.fromBuffer(reader)); + return new LogHash(Fr.fromBuffer(reader), reader.readNumber(), reader.readNumber()); } toString(): string { @@ -89,8 +88,4 @@ export class ScopedLogHash implements Ordered { toString(): string { return `logHash=${this.logHash} contractAddress=${this.contractAddress}`; } - - getSiloedHash(): Buffer { - return sha256Trunc(Buffer.concat([this.contractAddress.toBuffer(), this.value.toBuffer()])); - } } diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index bceafef8ddab..eaeeb3264387 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -175,7 +175,7 @@ import { AppendOnlyTreeSnapshot } from '../structs/trees/append_only_tree_snapsh * @returns A side effect object. */ function makeLogHash(seed: number) { - return new LogHash(fr(seed), seed + 1, fr(seed + 2)); + return new LogHash(fr(seed), seed + 1, seed + 2); } function makeScopedLogHash(seed: number) { @@ -321,7 +321,6 @@ export function makePrivateToRollupAccumulatedData(seed = 1, full = false): Priv tupleGenerator(MAX_L2_TO_L1_MSGS_PER_TX, makeScopedL2ToL1Message, seed + 0x600, ScopedL2ToL1Message.empty), tupleGenerator(MAX_PRIVATE_LOGS_PER_TX, makePrivateLog, seed + 0x700, PrivateLog.empty), tupleGenerator(MAX_CONTRACT_CLASS_LOGS_PER_TX, makeScopedLogHash, seed + 0xa00, ScopedLogHash.empty), // contract class logs - fr(seed + 0xe00), // contract_class_log_preimages_length ); } diff --git a/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts b/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts index 60df5bd7770b..8613be0f9842 100644 --- a/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/composed/integration_l1_publisher.test.ts @@ -498,8 +498,6 @@ describe('L1Publisher integration', () => { txHashes: [], }, [], - // TODO(#9101): Extract blobs from beacon chain => calldata will only contain what's needed to verify blob: - `0x${block.body.toBuffer().toString('hex')}`, Blob.getEthBlobEvaluationInputs(blobs), ], }); diff --git a/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts b/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts index 3e208137b638..7ba95ad89471 100644 --- a/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts +++ b/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts @@ -114,7 +114,7 @@ describe('e2e_deploy_contract contract class registration', () => { const tx = await (await broadcastPrivateFunction(wallet, artifact, selector)).send().wait(); const logs = await pxe.getContractClassLogs({ txHash: tx.txHash }); - const logData = logs.logs[0].log.data; + const logData = logs.logs[0].log.toBuffer(); writeTestData('yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex', logData); const fetchedClass = await aztecNode.getContractClass(contractClass.id); @@ -128,7 +128,7 @@ describe('e2e_deploy_contract contract class registration', () => { const selector = await FunctionSelector.fromNameAndParameters(functionArtifact); const tx = await (await broadcastUnconstrainedFunction(wallet, artifact, selector)).send().wait(); const logs = await pxe.getContractClassLogs({ txHash: tx.txHash }); - const logData = logs.logs[0].log.data; + const logData = logs.logs[0].log.toBuffer(); writeTestData('yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex', logData); const fetchedClass = await aztecNode.getContractClass(contractClass.id); diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts index c28c65d50bc4..814332e3a417 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts @@ -114,6 +114,7 @@ import { mapHeaderFromNoir, mapHeaderToNoir, mapL2ToL1MessageToNoir, + mapLogHashToNoir, mapMaxBlockNumberFromNoir, mapMaxBlockNumberToNoir, mapMembershipWitnessToNoir, @@ -133,6 +134,8 @@ import { mapPublicDataTreePreimageToNoir, mapScopedL2ToL1MessageFromNoir, mapScopedL2ToL1MessageToNoir, + mapScopedLogHashFromNoir, + mapScopedLogHashToNoir, mapTupleFromNoir, mapTxContextFromNoir, mapTxContextToNoir, @@ -253,56 +256,6 @@ function mapScopedPrivateLogDataFromNoir(data: ScopedPrivateLogDataNoir) { ); } -/** - * Maps a LogHash to a noir LogHash. - * @param logHash - The LogHash. - * @returns The noir log hash. - */ -function mapLogHashToNoir(logHash: LogHash): LogHashNoir { - return { - value: mapFieldToNoir(logHash.value), - counter: mapNumberToNoir(logHash.counter), - length: mapFieldToNoir(logHash.length), - }; -} - -/** - * Maps a noir LogHash to a LogHash. - * @param logHash - The noir LogHash. - * @returns The TS log hash. - */ -function mapLogHashFromNoir(logHash: LogHashNoir): LogHash { - return new LogHash( - mapFieldFromNoir(logHash.value), - mapNumberFromNoir(logHash.counter), - mapFieldFromNoir(logHash.length), - ); -} - -/** - * Maps a ts ScopedLogHash to a noir ScopedLogHash. - * @param logHash - The ts LogHash. - * @returns The noir log hash. - */ -function mapScopedLogHashToNoir(scopedLogHash: ScopedLogHash): ScopedLogHashNoir { - return { - log_hash: mapLogHashToNoir(scopedLogHash.logHash), - contract_address: mapAztecAddressToNoir(scopedLogHash.contractAddress), - }; -} - -/** - * Maps a noir ScopedLogHash to a ts ScopedLogHash. - * @param logHash - The noir LogHash. - * @returns The TS log hash. - */ -function mapScopedLogHashFromNoir(scopedLogHash: ScopedLogHashNoir): ScopedLogHash { - return new ScopedLogHash( - mapLogHashFromNoir(scopedLogHash.log_hash), - mapAztecAddressFromNoir(scopedLogHash.contract_address), - ); -} - /** * Maps a noir ReadRequest to ReadRequest. * @param readRequest - The noir ReadRequest. diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/common.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/common.ts index ce24f4d31075..3b2616deceff 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/common.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/common.ts @@ -647,11 +647,11 @@ export function mapMembershipWitnessToNoir(witness: Membership * @param logHash - The LogHash. * @returns The noir log hash. */ -function mapLogHashToNoir(logHash: LogHash): LogHashNoir { +export function mapLogHashToNoir(logHash: LogHash): LogHashNoir { return { value: mapFieldToNoir(logHash.value), counter: mapNumberToNoir(logHash.counter), - length: mapFieldToNoir(logHash.length), + length: mapNumberToNoir(logHash.length), }; } @@ -664,7 +664,7 @@ function mapLogHashFromNoir(logHash: LogHashNoir): LogHash { return new LogHash( mapFieldFromNoir(logHash.value), mapNumberFromNoir(logHash.counter), - mapFieldFromNoir(logHash.length), + mapNumberFromNoir(logHash.length), ); } @@ -685,7 +685,7 @@ export function mapScopedLogHashToNoir(scopedLogHash: ScopedLogHash): ScopedLogH * @param logHash - The noir LogHash. * @returns The TS log hash. */ -function mapScopedLogHashFromNoir(scopedLogHash: ScopedLogHashNoir): ScopedLogHash { +export function mapScopedLogHashFromNoir(scopedLogHash: ScopedLogHashNoir): ScopedLogHash { return new ScopedLogHash( mapLogHashFromNoir(scopedLogHash.log_hash), mapAztecAddressFromNoir(scopedLogHash.contract_address), @@ -716,7 +716,6 @@ export function mapPrivateToRollupAccumulatedDataToNoir( privateToRollupAccumulatedData.contractClassLogsHashes, mapScopedLogHashToNoir, ), - contract_class_log_preimages_length: mapFieldToNoir(privateToRollupAccumulatedData.contractClassLogPreimagesLength), }; } @@ -743,7 +742,6 @@ export function mapPrivateToRollupAccumulatedDataFromNoir( MAX_CONTRACT_CLASS_LOGS_PER_TX, mapScopedLogHashFromNoir, ), - mapFieldFromNoir(privateToRollupAccumulatedData.contract_class_log_preimages_length), ); } diff --git a/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex b/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex index e6d5bc08ad41..5dbace9d23ef 100644 --- a/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex +++ b/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex @@ -1 +1 @@ -000000006999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f81c9a43d08a1af21c35e4201262a49497a488b0686209370a70f2434af643b4f70000000000000000000000000000000000000000000000000000000000000001072dce903b1a299d6820eeed695480fe9ec46658b1101885816aed6dd86037f015b6f9aad3bac28ee9abb5d28ce58c47a78097c271106637d1d27723c75f91a100000000000000000000000000000000000000000000000000000000000069d200000000032b1eb6a600000021a91f8b08000000000000ffed9d679454c795c7005fcf107b1a248132481a320c33d03d8924a001011239e73c33c4818161c839008aa06c5992654956b0244b969cb32de79c6dd972926dd972d0d9fdb0bb5ff600ecd9fdb275dfabebfe4fcda37b1e5435d550ef9c7bbaeabe57757fb75e55bd005455fd9ee779e55eb0150bb9c36bbbc5e46f5afe262f6d4b69cc2b6992335600209c4505c2595c209c1d0a84b3638170762a10cece05c2d9a54038bb6ae42400b622aff5a69b376ea05c753396788571ee1305c2d9ad4038bb1708e73505c200796d81705e57209c3d0a84b36781705e5f209c371408e78d05c279538170de005c209cb71408e7ad05c2d9ab40387b1708e76d05c2797b8170dea191b33f700096cadf3ef2b7affced277ff9d801f277a0fc1d247f074b5f3bc8f81021654200867ac1fb57dac7055321649890e152472f4c2b855409a9165223a456c808210023858c12325ac81821770a192b649c90f1b22c26089928649290bb844c16320045c85421770bb947c83421d385cc103253c82c21b385cc113257c83c21f385002c10b250c822218b852c11b254c83221cb85ac90be944a5f560a592564b590003542d60a5927a44e48bd900621eb856c10b251c826219b856c11d22864ab90006d429a846c17b24348b3909d425a84ec12b25bc81e217b85ec13b25fc80121000795323f24e4b09023428e2a9cc7841c177242c84921a7849c1672af90334200ce0a3927e4bc90fb84dc2fe401210f0a7948c8c3421e11f23e218f0a79bf9000c7843c2ee409211f10f2a4900f0a794ac8d3429e11f22121cf7aadcfff7342009e17f282900f0b7951c84b425e16f21121af087955c84785bc26e475211f1300f271219f10f249219f12f269219f11f259219f13f279215f10f245215f12f20065215f11f28690af0af99a90af0bf986906f0af996906f0bf98e90ef0af99e0090ef0bf981901f0af991901f0bf989909f0af999909f4b5ff85dcd2f84fc5200d1bd29e45732fc6bf9fb96fcfd8d72ec6f85fc4e867f2f7fff207fdf96bf7f0094bf7f92bf7f96bfefc8dfbfc8dfbfcadf77e5efdfe4efdfe5ef3fe4ef3fe500ef7b42569604e1ce5e664bcbdfe4a56cd50da3e8fd2d57ce52aff5168732e0006348572c5531d071fd2e025d47a92b065d27ce0e74ec5747d07591ba4ea0eb002a759d411797ba2ea093c5e575953aca3f217569f99bbc94ad3ab996f2eca600334ff9eeafbbcc2b01fe5c2375dd4077add47507dd7552770de87a48ddb5a000eb2975d781ee7aa9eb01ba1ba4ae27e86e94baeb417793d4dd00ba9ba5ee4600d0dd22753781ee56a9bb1974bda4ee16d0f596ba5b41779bd4f502dded52d7001b74fc3df136d0954addeda0e3ebea1d524775f50d0fd2487d11e8fa485d3100e8fa4a5d07d0f593918ea0eb0f76583700ea2ceb064a5d17d00d92baaea01b000cbe701ec365382d7f9397b255578ea23c933af314b9529e957af3f4dfd557007999f24d838d24944fb55ebb29b41b93c236585f0ce1d15e66ab8630f7619500104f851c87e1e14a9a04ec4f19f6b91238d210675b1d80cf40bdacd75f2fab00925773bdbcdbcb6c58c7f89a7725d5cbb1c0a0b75ed618a897955775bd5ce4006536ac637c8f7425d5cbe9c0a0b75e8ea877d7f1ac5be47a59ef6536ac637c004f7e25d5cba5c0a0b75e8e4cb9fe32eb16b95e367b990deb183f035e49f572000330e8ad976b53eefe32eb16b95e1ef5321bd6317ee77025d5cb5dc0a0b75e00d61ba897c9caabb95e3ee06536ac63fc8eeb4aaa9727804173bdac72f532eb0016b95e3ee56536ac63fc4ef54aaa970fcb30bdc7fcb57ca7d90b746f495d6f00d0fd46ea6e037ecd757aa4abd359b7c875fa752fb361fde477f857529d7e5e0086a9aefe5ef9de46ba3f485d1fd0bd2d757d41f747a9eb07ba3f495d7fd0fd0059ea0680ee1da91b08babf48dd20d0fd55ea0683ee5da91b02babf495d19e800fe2e754341f70fa92b07dd3fa5ae0274ef49dd30a9a3773afccde50752d7190018d2f23779699bffdd8d7de52da6c4d3101e628e25990016b43354af9d2af200b9cc6bbfcf4381a55cb3cf71c8bf3d2ce5c052a197c5bf9f1ea6374fff9c960029e518073b65e08fd66b96ec9f8679adcb91e36c2b013a6ca3c343f8745fff00626087f3e57812f8585761aeacfc7ad857291bea7ede029b9adba17fade67600ce73e998816d15c3313d4b325c3c16250efbf9fa5102e907838ecf2ff6d9790038cfa9f69c67e2e3f33b3cbf7c95ede553dbcee56ab364b7ca805db50cb80e005519b69b52ec562876e3701e78cb768dc07b3ecdf7d72903f7917e3f5023f300e27b76b6817d5ead81b2af81f28c810dd61743f87fbdcc560b61ee579899da004a55c871184e2a6912b0bfcab0cff8ec908638dba2fef53f8041739d6ff58c00c6f972bc02f4d521e55505e5c5fb87808efb7bbcbe972979c4211fec574d3e0013aa7ee279675d0af8aa43f86af4f25566ab0b35c0c7ba4ac36595eb59f26a00b4abbbed61fe382e09df51f0fe778a32c7f5886598343f7754e2f3006fd9ae006f784dd07b4f5ae9df0757446031f86c983271cf4d799669ce93f218e2b53d003fcc9e80fdd89fe97e9711f35a3f4ba7218e7c8ed5b13a56c7ea581dab637500ac8ed5b13a56c7ea581dab6375ac8ed5b13a56c75a28ac388605c794f171c3002ce0631d8e5fd2fd6edb5f6b40e6c579d3b78b17e0db85de77f495feb74c2e0073fa765d0a0cb8ae3b1ff3d95886eb65192e81fd7cae2e74fe34bfbbcf7afe00d8168e9dc1ef1d9acf9fcf52aeb05cb9762bebf4b7c7ca64372f581783ebd30010c50f1cfb3440d1519d7cb728e3afeeef5951bfad615fa199c51f9758116200476ffb0afa072e7b2ada522fd33f18b86ea4384076792c04f54b7dbcb6fd7200311cf3757922ba7be6ae1317fade3d04ca61b05ebbadc6187ab2fcf99b378e00f156c71dabf3084abdb6630a713cfff7a15fdf026d48735fe57f2bc7be8a5900714b4318fb2fdd7d4dd4b1cb789e755fc74c8c4737511f298faa90f383f74a00bc7f3094978971874394f3c471e473ac8ed5b13a56c7ea581dab6375ac8ed500b13a56c7ea581dab6375ac8ed5b13ad642612516f5db1eae21506e015f1ec60015f8efee79cd1ccedb5fdf14be5d98fc16c6df54fa2bbe16c3318f1765b85600ca7089d7762cc185ce9fe677f759cf1fae3351a694aba9ef69650acb956b3700f856aeb73d66be95737daa52fce0738adf8a5987dff9707c048edf2853749700eb7c609bc1311d1cc6f9b4bacb18e798f3da0efcfd9b6de19ce35db24cf93b00b4de79d7c17ac8bafb75ca83e7cb77f0dad6275c43623ff469076538acffa200fde743f6f396ed3b2bce1f1fa1d757ff7c8e9479f1f91c116277945ebb29b400cb6b75b00dd61743f85c51a63c466582ff2a5f66a676501b721c868728691200b0bfd6b0cf2380230d71b645f5e408d4a9f370fdd67dfd437fb15cfa41b9f0007ebc7731711f55031ca55edb3e05c7443227aeab817df2e5586305d7d5c0710028ec07f627387ef16a1d9ff4345c17c2c6f470dafec0aca9feb762ae5298d5007b051c13f4bc722d33713f7aa13155069fb35a9d3b2e7f751d115c63878f5500ef054abdb6cf3f782ff02af46b6fe7b8ff1face84cf53be8771ae26c0befab00d0efc117f01bd73433b9fe504785836d617dfd8cd2c6d435b998390569f99800cf435acf6bdd3ff3ba4b783f5aa51ca7ff5ea532f45e85fb8711e0031ff38600d25e476ae631703fe69f0abc17280bf18ff77f13dad3b7e1de92cf018e997f0033643f6fd9ee3db9ccc8d7317a7df5cfe79d322f3e9f6342ec8ed56b37857600f9de936db0be18c2bf847bcfb199e0bfca9799a91d8c0e390ec3354a9a04ec001f6dd8e731c0918638dba27af23da8536fc2bda7ee7b2af417cba53f940bef000f7bd7c7c7537de6f680d70added129f4f385f8e677b8ec06b9dfefbbdb6f3003d4abdb6efe0f0dd20f6094bcd3d5b24713e02be6379d7e0f30c954537cf6b00758eba290c57a35dddefa8f0fe8cb7f68c13c7f51c8b804f779b88fa7ea50c00f8f05985f974cf4fc27789ede1c3398a38b787f94ccceb191a81af1cf8385d0047e0d3bdae79d4391315c0c7e93a019fe635d223cf8b1a067cf8ee967f75af00c91c757dc6b0b5d5bb009feef5b5719decf6f085adadde15f85206f82e66fd00e604a48b039fee359de35eeb35a873f1e1ff8c70ba12837cd9ae5bb826ade600e77d7fae15be5fc9552e78df8965441bbe0f31bd8e6e95c2c7f1b03587bb190064892b2cb9ca2f8caf3bf0695eff3885ef83dbc317b626f235c0a7fb9927ea00b337be5be674d7029fee679cb8d7fa7b402e3e7ceee174d7019fdef72d01df0088087c23818fd3f5003edddf77e260b33d7ca3808fd3f504bed106f84645e0001b0d7c9cee7ae0d3fc3ec8e71b1d810fdfa170ba1b80ef4e037c6322f0dd09007c9cee46e0d3fd8e270e36dbc33716f838dd4dc037ce00dfd8087ce3808fd300dd0c7ce30df08d8bc0371ef838dd2dc09736c0373e025f1af838ddadc037c100005f3a02df04e0637d2fe09b68806f4204be89c0c7e97a03df24037c1323f0004d023e4e87ff19799701be4911f8ee023e4e773bf04d36c0775704bec9c0c700e9ee00be2906f82647e09b027c9c0e9f6ba71ae09b12816f2af071ba01c07700b75e3efff96d6a04bebb81659a5e96ea38e4df1e9669c0728f5e969401fffc006f9bd335e74979ccf0da9e1f664fc0fee9505e333497570c6c72be1c473ec7007a75b312cb5485330ec74db5808f75f71864892b2cb465ebebc2f8f05cce3400c0372302df4ce00bab6bb3f4f2f9d7ad9911f86601cb1cad2c55fe77d959110058e600cb6cad2cc1754baf7fc135666e4859b29d04ecc7733e57b36f31b0c900f9721cf91cab6375ac8ed5b13a56c7ea581dab6375ac8ed5b13a56c7ea581d00ab6375ac8ed5b13a56c7ea581dab6375ac8ed5b13a56c7aa9f9558662a9c7100386ea6057cac9b6d9025aeb0d0966d9c48181f9ecb7906f8e646e09b077c6100756dbe01be7911f8e603dfbc10be0506f8e647e05b007cf343f816eae5f3c7004c2d88c0b71058166b6509fe176f610496c5c0b2482b4b30664aaf7fc198a900252165c97612b01fcff912cdbec5c026e7cb71e473ac8ed5b13a56c7ea581d00ab6375ac8ed5b13a56c7ea581dab6375ac8ed5b13ad642612596050a671c8e005b60011feb161964892b2cb4657bcf1ec687e772a901be2511f896025f585d005b66806f6904be65c0b734846fb95e3eff9bceb2087ccb8165a55e167ffd9600e511585602cb0abd2c2903fef9df7456859425db49c07e3ce7ab34fb16039b009c2fc791cfb15eddacc4b24ce18cc371cb2ce063dd0a832c718585b66cfd5200181f9ecbd506f85645e05b0d7c61756d8d5e3eff1ab33a02df1a6059a79525001837b02602cb3a6059ab9525b8c6e8f52fb8c6d4796dcb92ed24603f9ef33a00cdbec5c026e7cbf13a73767dffeb73f85f1fc2519f47ff91afbdacd30b88d50095ab2b5757aeae5c5db9ba7275e5eacad595ab2b5757aeae5c5db9ba7275e500eacad595ab2b5757aeed672596d50a671c8e5b6d011febd61a64892b2cb465007b771fc687f5aec1005f7d04be06e00b6b17eb0df03544e05b0f7c9c0edbc20006bd7cfe77a2f511f83600cb26ad2cc19afc1b22b06c02968d5a5982ef447a00fd0bbe936c0e294bb69380fd5827376bf62d0636395f8e23df95c85a5740ac00ae0e98617575c0b1ba3ae0585d1d70acae0e385657071cabab038ed5d501c700eaea80637575c0b1ba3ae0585d1d70acae0e385657071cabab038ef572d701006259af70c6e1b8f516f0b16ea34196b8c2425bb67122617c58efb618e0db1c00816f0bf085b58b46037c5b22f03502df9610bead06f81a23f06d053e4e876d00759b5e3e7fccd4d6087cdb8065bb01966d1158b6034b935e969401fffc3153003b42ca92ed24603fd6c91d9a7d8b814dce97e3c85728acc4b255e18cc3715b002de0635d934196b8c2425bb6f613c687e7b2d900df8e087ccdc01756d776ea00e5f3fb9fe6087c3b81659701969d115876014b8b5e969401fffcbe7077485900b29d04ecc773be5bb36f31b0c9f9721cf90a8595589a15ce381cd76c011feb005a0cb2c41516dab2b59f303e3c977b0cf0ed8ec0b707f8c2eada5e037c7b2200f0ed05be3d217cfb0cf0ed8dc0b70ff8385d1cf8f61be0db17816f3ff071ba0012837cc4d24d61e9a6b090dd037aedfad7b5fd5efbcbe500940b96116d71d8008fcc070d94d501858fe307818975dd0cb2c415965ce517c6d71df80e19e03b001881ef10f071ba6b80efb001be4311f80e031fa7bb16f88e18e03b1c81ef0800f071baeb80efa801be2311f88e021fa7eb017cc70cf01d8dc0770cf8385d4f00e03b6e80ef5804bee3c0c7e9ae07be1306f88e47e03b017c9cee06e03b698000ef4404be93c0c7e96e04be5306f84e46e03b057c9cee26e03b6d80ef5404be00d3c0c7e96e06be7b0df09d8ec0772ff071ba5b80ef8c01be7b23f09d013e4e00772bf09d35c0772602df59e0e374bd80ef9c01beb311f8ce011fa7c3e78af3007af9fcfbd37311f8ce03cbfd7a59fcf5cccf4760b91f58eed3cb9232e05f9200f27c40739e94c7835edbf3c3ec09d8ff0094d7839acb2b0636395f8e239f6300bdba5989e59cc21987e3ce59c0c7bafb8045775f403e0f947971de1d84cce9009cb1a9f95ea39afce76b5e27992f33b0ad623866423cc3b5407295c07e3e5700780f83e74ff7bd66cc6b7daf948638db2a015f4e038beefbca98d7fabe286d00995d13f7f951ee534f996349e2bd2fda31f16c18e5d9e68441167c5e423b9a009fd7fd7e6990cc8bf3a6f6bfb9b331dffc7e89cf23f74b83145f8be19801d0002f6d0be9970cb683a4dafe4ac12edbc267ce7b8145f3bb816402388a3c63e70027d5def721bc75b18865bc452ca32c62e96d114b95452c375ac4526111cbb50016b10cb288a5ab452cfd2d6229b688658a452c698b58465bc472d622966a8b00586eb3886598452c3759c432d82296eb2c62895bc4b2d522960e16b12cb3880065aa452c632c62b9dd22961a8b586eb68865b8452c3d2c621962114b89452c00fd2c62e96811cb7a8b58eeb488e50e8b586a2d62b9c52296a4452c3d2d622900b3882561114b378b583a59c4b2c02296be16b198fcd61d9565ac452ca516b1008cb088e5568b585216b1989c4f109565a8452cdd2d62e96c11cb6a8b58665a00c432ce22963e16b18cb488a5d222965e16b1945bc432c022961b2c6219681100cb3516b1c42e334bdc6b3b0e16e7299682eeb80ce3d8c863327c1274452136008a65f838e8f8db19e741cfadf34bda3214419aa3325c1cc2702284f568485a00d3658e76d210675b25c070d402966b2c62196811cb0d16b10cb088a5dc2296005e16b1545ac432d222963e16b18cb38865a6452cab2d62e96c114b778b5886005ac472bd452c298b586eb5886584452ca516b18cb588e594452c7d2d62596000114b278b58ba59c492b088a5cc22969e16b1242d62b9c522965a8b58eeb08800e54e8b58d65bc4d2d122967e16b19458c432c422961e16b10cb788e5668b58006a2c62b9dd22963116b14cb5886599452c1d2c62d96a114bdc2296eb2c6219006c11cb4d16b10cb388e5368b58aa2d62396b11cb688b58d216b14cb188a5d8002296fe16b174b5886590452cd75ac4526111cb8d16b15459c4d2db2296511600b18cb788a58b452c45796239ee65b634c44f805dcdfff9e2af83aef97f6efc003544f9ff6a780d51e6665bc570cc247961e3b11af81f39c7e4ef11381f279400e30cf8908c291c5dc02edbc2ffcbe163291dff975047998e8fe903bef331d300c1f712d00f067ff9bf9386808eff73aa0c74fcdf5d4341c7ff37560e3afe8f00b40ad0f1ffba0d031dff17dd70d0f1ffe62541c7fff597021dffd71f8fa9c300ff07c57910baff3b37e65df83f519b808fffd3733be8385c053a4e530d3afe009fd71ad035ca702de8b6c8f008d06d96e191a0e3ffd21e053afedfefd1a0db0020c36340d720c37782ae5e86c782ae4e86c7816e9d0c8f07dd5a194e836e8d000c4f01dd2a19e6f77b747e57283a3abfcb95fc9297b6f9e797ed70be1c5f0e007c2b657805e8383c1398972a3a625e628079a9c2ccf125c0c7fc4b41c7e10500c0bc58d111f32203cc8b15668e2f023ee65f0c3a0e2f03e6858a8e98e71b60005ea830737c3ef031ff42d071783530cf5374c43cd700f33c8599e373818ff900e7818ec3eb81798ea223e6d90698e728cc1c9f0d7ccc3f07741cde0accb314001d31cf30c03c4b61e6f80ce063fe59a0e3f059c37c3b14be1d0a9f29bb2b1500bb2bf36477b96277799eec2e51ec2ec993dd458add4579b23b5fb13b3f4f7600e72a76e7e6c9ee6cc5eeec3cd9bddaeaf3e5ea37aeb6fa7cb9fa8dcbd58edc0075303f76dd75303f76afb6eb607bdaef34bd76fdffce9ce1b5de624a3c0de10069c0325d731918f0cf7fdd760ff0cf50fc48c0fe23e0db3d9a7d8b814dce9700e3c85728ac71d01d041def3f00babb65783fe826cbf03ed0dd25c37b4137490086f7806ea20cef06dd0419de05ba7332bc0674e7657815e8ee93e195a0e3ff00335c013afedfc9e5a0e3ff5c5c0aba87647809e81e96e1c5a07b44861781ee007d32bc10748fcaf07cd0bd5f86e781ee31199e0bbac765780ee89e90e1d9a000fb800ccf00dd93323c1d741f94e123a07b4a865b40f7b40cef04dd3332dc0c00ba0fc9f00ed03d2bc3db41f79c0c3781ee7919de06ba1764b811741f96e12d00a07b51863783ee2519de04ba97657823e83e22c31b40f78a0c3780ee5519ae0007dd4765b80e74afc9f03ad0bd2ec36b41f731199e053afec6360d743c0e0400db2a8f9bbc1b743cb67f32e878ced75da0e379c99340c7df1927828ec7594c00001d8f4b3c073a1e3b7f1e740919be0f743ce7eb7ed0f1b7ae0740c7eb783c00083a1edbf010e8785ce2c3a0e3f1ea8f808ee731bd0f743ceff751d0f13a1900ef071d8f1d780c743ceeef71d0f178f02740c7f3843e003a9e57fb24e878ed00870f828ebfcd3f053a1e57f734e878bcf533a0e379381f025da90c3f0b3afe000ef71ce8facaf0f3a0eb27c32f808ec7037d1874bcb6c78ba0e375505e02dd0020197e1974fc9def23a0e3ef7caf80ae4c865f05dd5019fe28e8ca65f835d000f177bed741c7dff9b82d523b30f15d9b6cf11c59deb2dd97e1b7eee37a59fc00efd22780210d360681dda39acb806c1d53ec3207db4a4039f1b1d4bff0f50900ff47f3908172e17b1ffe5ecf0c6c0bbf5957cace90fb30d6d37626c487c3ca007171081f86e3d8d649c88fefbf8a200d7e97df0fe1234a1a2ad3d3ca71f89d009ced5099f27d595afe262f654b05f7eb7b819d6dee0136b6bf173876e9e49000758fef2f395faeeb788fc93a3e96aeb3fc3fb3546685f83fd37afbb2cae4a500f46527b5b204cf989afbeaa4fe3eb7ce1f12720ccae494523609d87f1ccaeb0098e6f2c2be9ff3e5f8317376fd211d4773f87f3484e3681efd3f6acc6e8dff0018712487ff474238348f73cbeaff11637647f8c3810ee7f0ff700887e6f16c0059fd3f6ccc6ecabf0e1ecae1ffa1100ecdf73859fd3f64ccee28bffd1fcce100ffc1108e8379f4ffa031bb35fef93f90c3ff03211c07f2e8ff016376d7fbfe00efcfe1fffe108efd79f47fbf31bb35fed0c77d39fcdf17c2b12f8ffeef336600b7d2f77f6f0efff78670eccda3ff7bcdd9f55f05eec9e1ff9e100eadcf633900fcdf63cc6e957fffb33b87ffbb433876e7d17fe46b2febf1cbcc6ac0aedf560077e5f07f5708878967f60bf98f7ced6535fd7e2117ab7ebb0d7ebfd292c3ff0096108e963cfadf62cc6eca9f8eb03387ff3b433876e6d1ff9dc6ecd6f89f93009a73f8df1cc2d19c47ff9b8dd9adf1a78fecc8e1ff8e108e1d79f47f8731bb00297f0ad1f61cfe6f0fe1d89e47ffb71bb35be59fffa61cfe37857098986f750021ff9b8cd9adf5fddf96c3ff6d211cdbf2e8ff366376ebfc7b95c61cfe3786007034e6d17fe46b2febb1cbccaadfee48ff1dc0961cfe6f09e1d89247ff91af00bdac072e33ab7ebbebfda99f9b73f8bf398463731efddf6cccee3affbaba290087ff9b423836e5d1ff4dc6ecaef5a7cd6dcce1ffc6108e8d79f47fa331bbb500fe7565430eff3784706cc8a3ff1b8cd91de94fe96ec8e17f430847431efd6f003066b7daf7bf3e87fff5211cf579f4bf1eeceafec61f83fc792ccc40a50c8a00e1987f57c6c284951da7a7710aa7437ca8d3ea43309e67dd057ca8031ff89800ff021f3a835e178f011ffd71053ca694c6aadc1be21fefffef78e6b8ff91e100389c8333904fe792b6fb79cb36d683cb8c7c5da5d7d724ce4de2f3b92ac4ee000abd765bcd898a49611bac2f46361e10ebb55ea381cb9799714d093c0ec3f5004a9a04ec5f63d8e755c0918638dba27af27f50a7b8cee8ef8f827abec66b5b002e03a15c783f8e7dd2dddea85cd67aadcb45ed5388e59cc249c5c47514c78900ad31c0b74ee1e3f81ae063dd09e0633fb03f990363df783c2eaec9c3636fcb00209f618a8eb2186ec04fb6c3f9721cd7e92997e161f9e5ab6c2f5f85c2472c0029cd6515079bbc65ebc353c092d4cc62c03f1fb112f8872b7e24607f29f85600a9d9b718d8e47c398e6b3de93ebf31c89faf8b7d9532288663ca643fdd5d6100c3b2e3f4b8b670a5e1b2abf05a975d4588dd1a8365c7f9723f5763d86e956200b75cb14bed16eb136dd9da6d15f0566be6a53c6bf5e6e9dfcff19a605c6fd9004639f832d240d98f80f28c810dd617437802dccf8dcc04ff75edc3b5ce6a42008ec3704a499380fd35867dae058e34c4d9165def6be11e4e739df7cf778dc200c0f172d0d78694570d9417ef1f063abe27a9045d9992471cf2c16bbfe67a9d00cae6279e77d655015f6d08df08bd7c95d9eac208e0635d35b098e8075516be00f6603fd857293faaab6f015767bd5cd5389f92b76c7d6f67f8eda4b98c681e0026cf6bac5bdbd83867d7bac64d7553766dab6bd9d4b42d06741da174682b0600c22208a39e8fc599a11d41c733433b81ae48f11a67a976815fb5c4b4561b8200e8e705b7741cefef65ba748a0f50e20395f82025fd71257e52899f56e2679400f839257e9f127f40893fa4c41f51e28f2af1c794f8134afc4925fe94127f4600893fabc45f50e22f29f15794f86b4afce34afc534afcb34afc0b4afccb4afc00ab4afc1b5eebf8b795f8f794f80f95f84f94f8cf95f86f94f81f94f81f95f8009f95f85f94f8bb324ec21befa306438d8f1a1b352e6a4cd468a8b9f3b46aea008669da34ddaad3b4689a064dd39ea93ba069cd348d99a62dd334659a964cd3009069da314d33a669c5348d98a60dd334e13b80e107f2b7d40ba601f7f582b60044ed87da0cb5136a1b7459a5db61ba1cd1ed0e5da6e9b69c2ebdf4a840cf5e007479a5cb2e5dc6e85241dd3675d37429a15b0b1afb4fcbb7d272adb43c2b2d00c74acbafd272ab692f985e3ed10ba6a3d334f5c95eb0c4ea542f98de4ed3de00a779c1b20533bc6089529a324fcb1dd03208b43c022d9b40cb29d052a0b4d400022dc1404b33d0920db494032db749cb3cd0ab2b7a4d47afb26839cb355ef000ba639d17bcbea1d735f43a9fbe7f6df0824f3bf4798b3ef1d1674efa2c4dcb0033d250021a4e41434a68580d0d2da2e15534c48c86d9d1b0481ac64a430e690038330de9a6cfc434b49fa637d0140f9ae672d40b3ef553bf43af62a8bfa1d700e5d4cfd0ab5cea5f68b945ea57687a3df527347d9efa119a1e4ffd074d7fa7007e83a6b7537f41d3d7a99fa0e9e9d43fd0f473ea17687a39f507347d9cfa01009a1efeac174cff7ede0bda3e4de77ed10bdafdcb5e301d9bdafcab5e30bd9a00da3b4d9fa6e9d2d4d63f21e4935ed0ce3f2de4335ed0c63f27e4f35ed0bebf0028e44b5ed0b6bf22e40d2f68d75f13f2752f68d3df14f22d2f68cfdf11f25d002f68cbdff782ba4aedf847427eec056df8a7427ee605edf717427e29e44d2100bf12f26b2fb835a0b6fc5b21bf13f27b2f68cb6f7b411bfe9317b4dd77bca000cdfed50bdaeadf84fc5dc83f84fc53c87b5e6629839897d9be26237d647c6d004b4bc3d6ed2da52d4da55b7735b66cdadeb8af74cfa6968da54dbb1b9ad7370036edc1c42df2f2c9eb034c686e5ebbaf74d3b6fa86bda54dbb5a4a9bd697ae006bdab5ad7e27267aaae8122c3e2713f76e9b786d7dfd85d37d5aa6e31514ee00c9cef8b98b71ec2b17936862d78b48948a5f44a27fbb9844ff7931898694b4003391f7fff9ff659b0d070200122ffb5900000023ff1f8b08000000000000ff00ed9d077c1c35f6c7b5dec44ed64ee8900638092440daae7bfaa6170204482300dd8eedf438c54e2f4eeff4bbe30a9d038eff1dd73b5c3fae72bdf7de7b2fdc00dd5f9ad1637f9627bb9e44da6812cde7f33e2bbd19e97d9f46a3d18e349ac20018638399bfc5b95ccdda6f31f99b96bfc933db521af34a9ae48c4584b32022009cf18870768a0867e78870164684b328229c5d22c2d95523a7602b606d37dd00bc0903e5aa9bb19845e3dc974484b35b4438bb4784f38288705e1811ce8b2200c2797144382f8908e7a511e1bc2c229c974784f38a8870f6880867cf8870f6008a0867ef8870f68908e79511e1bc4a23a760539f33eae6bdda40b9ea662c8d000063df0830f68b0063ff08305e1301c66b23c03820028c0323c0785d0418af008f00e30d11601c1401c6c111601c1201c6a111601c1601c66404185311602c008b00637904182b22c0581901c6aa0830564780b126028cc323c03822028c230023c0382a028ca335325ec332db18f93b56e11d277fc7cbdf09f277a2fc9d24007f274b5f3bc9f8142e53b94ce3325deea342b991cb0c2e3771b999cb2d5c660072b995cb6d5c6ee7328bcb6c2e73b8cce5328fcb1d5ce67359c0652197455c00167359c26529975a2e755c9671a9e7d2c0a591cb722e2bb8ace4b28acb6a2e006bb8ace5b28e4b1397f55c3670d9c8651397662e2d5c3673d9c2652b976d5c00b64b5f4aa52f3bb8ece4b28bcb6e2e7bb8b472d9cb651f97fd5c0e7039c8e5001097c35c8e7039cae51897e35c4e7039c9e54e2e7771b99bcb3d5ceee5721f0097fbb9bc82cb2bb9bc8acb035c5ecde5354a99bf96cbebb83cc8e52185f361002e8f707994cb635c1ee7f20497d7737992cb535c9ee6f2062ecf70f93f2e6f00e4f2262ecf72793397b770792b97b771793b9777707927977771793797f77000792f97f771793f97e7b83ccfe503acedf9ff20970f71f930978f70f928978f0071f9389717b87c82cb27b97c8acba7b97c86cb67b9bcc8e5735c3ecfe50b5c00bec8e54b5cbecce52b5cbecae56b5cbecee51b5cbec9e55b5cbecde53b5cbe00cbe57b5cbecfe5075c7ec8e5475c7ecce5275c7ecae5675c7ecee5175c7ec900e5575c7ecde5375c7ecbe577d2179aebf47b2e7f50747fe4f22719feb3fcfd008bfcfdab72ecdfb8fc5d86ff217fff297fff257fff2d7f5f92bfff91bfff9500bfff93bfd4d8c4e46f81fc8dcbdf4ef2b7b3fc2de4bf2f14fbe12296d9d2f2003779265b65b2bab367d4cf6b0c6bbb25a00ce818a18b932ba0a3fa5d00bace005217075d2165073af2ab33e8ba485d21e8ba4a5d11e81252d70574b2b8585700a913f997485d5afe26cf64ab48d68a3cbbe9cc53ce9deb2ef32a017f2e90ba006ea0bb50eaba83ee22a9bb0074174bdd85a0bb44ea2e02dda5527731e82e9300ba4b4077b9d45d0aba2ba4ee32d0f590bacb41d753eaae005d2fa9eb01bade0052d713747da4ae17e8ae94badea0bb4aeafa808ec6c9ae045da9d45d0575a400afd4a5e56ff24cb68a54a3c8b39fce3ce53ce00fb08c1f63247f01e8c64a5d001c7469a9eb04ba7132d21974e3a5ae107413a08c483751eaba806e92d4750500dd642873ca6398d672aea816792675e6c973157996e9cdd31bb32d6799f24d00838d24944f855ebb29b41b934236481f87f04896d92a204ced6a19c45301c70061789892a604f6a70cfb5c061c6988932d5135b1dc35d7cb3afdf5b23c793e00d7cb692cb3611da3fbf0b9542fc70083de7a596da05e969dd7f5722ecb6c5800c7a8df762ed5cb19c0a0b75e0eaf73f7f1ac5be87ad9c0321bd631fa9f702e00d5cbf9c0a0b95e36baf632eb16ba5e6e62990deb18fd2f3d97eae50a60d05b002feb1a5dff32eb16ba5eee65990deb183d073997eae56660d05b2f1b0cd4cb0064d9f95c2fef62990deb183d773b97eae50160d05b2f1b53ae5e66dd42d7cb00075966c33a46cf79cfa57a79af0c8be7987f96cf347b83ee2f52d707747f9500ba2b815f739dae72753aeb16ba4e3fcb321bd64f1a573897eaf4e3322ceaea003f645d2d05dd3fa5ae2fe8fe2575fd40f76fa9eb0fba97a4ee1ad0fd47eaae0005dd7fa56e00e8fe27750341478314d7812e2675d783ae40ea6e005d5cea060081ae93d40d065d67a91b02ba42a91b2a75e2990e8db97c4aea8a209fb4fc4d009ed9e68d05122f6d31259e86f060732cc91260413b43f5da294f40d977c4e700a1c0a2b55de55b02f2ef08cb3060d1dc1e7bfd9694de3cbd733a4429c704d8001902fe68be1778ed538ab52d478a635b9952ca3601fb91af5c2f5f59b6f6b3001cf882ee5fbaef9bc2e7fe4ad988e6e7eb6053f375e8ddabe93aa7f5b18881006cc5e1989dc519ae6f0397ee365170d17d87f2a5b8c1f6ef7cb3ebd5b96b14003be2dcfe046ceaad73a946ac73a27fb8071882eadc44a873bf90ba62d83f080074941eefebb6b473828fdab7547ef9ca3aca9754f80cdc8f5238f790f2757600f5df4f307f71edd0f54276e2b0ffd30599e35e02a6417a99cac2f6fb06192b009fb264d87e7719b0e8ae2326cebf81fe9257a72a02ce4fd0ffde7228afb3f100bfd7b13a56c7ea581dab6375ac8ed5b13a56c7ea581dab6375ac8ed5b13a5600c7ea58a3c48a63f938c72568acfc6cf191cee4d886f099e616e158f9c958c600a6de67f465de583995b918b72c0506b21587631e8e65b8ee91611cb7c4314a0075dcd2c03c17effce13c9734c4c95631f0e39c1bcdf30e52589694efb96bb7006c9989f78ac4bbb0e2fd7baa4f49c50f9c4b3350d1893af96241c65fdde3590061c7d60c8ebfb699d38676f48e8df9ed03b545a2684b59a67d3070df48514000d8ad94798976a92f6bdf2ec7e19867e489e8ceccdd274e35de5d01e550a9d7006e12e7fb3259fe746d90ad0484e95891ae0acaaf14caaf12ca8f8e791bb4eb00b3e11ad23d6703e7863060c52d0d611c9fd67b4efdb1f2b2102c789e358f4100a70cd4d9a489fa28f2a862edcf0ff695687f25945795e6f252af8b34c491cf00b13a56c7ea581dab6375ac8ed5b13a56c7ea581dab6375ac8ed5b13a56c7ea0058a3c28aef951367028e4b59c097877905deb37b5a7383f21663171360ecc200e458188da90c507c8dc3317b0b325c5364b898b59f4b70aaf3a7f9d97dd6f30047b68ac1171cef30319e56aeb09cbb76fdb172bdd76366ac9cea5395e2079d00531c2b261d8ef3e15a40387fa35cd19dadf381d74c39e8288cefd3ea2e63c100572df3a2759f68fc9b6cc5e19825b24c691cba5a338f89765de45123f3eac400dad7a738ecaf8736ad518683da2fb1bf25603f6dd9c659a9cc84af23f4faea009d4ffa3e009dcf11017647e9b59b42bbb48e17d9207d1cc2cd0599f218950900be5cbec42cae83e101c761b842495302fb871bf6790470a4214eb6443d59090075aa05eedfbaef7fe82f96cbb5502eb41ffb2e26fa5135c051cadab7293827009238c575447514dbe4e106f8aa812f0df1e1c0473a9c87427e607b82f317cf00d7f94987e1be1034a787d20e00664df5bf0d7395c2acf615704ed009e55e6600a23f7aaa395506ff67b5397754fe34a78a6c2558fbff7c6a5fa094b5ffff83007d81fba15d7b01fa5a542fb1ff5fa9e84cb53be8771ae2640bfb5ae877e52900fcc6759cf4f6757c5ee2eaac70902dacaf0f29d7580d30a7817918a4a5631e0085b48cb56d9f69ee29f647ab94e3f4f755ca02fb2ad43e8c001fe898a794eb0075a4661e03fd31afba635fa02cc03fdaff46b89e9e85be259d8372c8e7f98000fdb465eb7b5299095fc7e8f5d53b9ff4ed533a9f6302eca6f5da4da15dea7b0052dea48f43f8b982e0b2a1f22566711d8c0e380ec3354a9a12d83fdab0cf63001426f57c8a7af256a853cf43df53779f0afdc5721900e542fb839ef5d1f1a2003ed3f580f70addd725fe3fa17c299eed7f04deebf4f7f7dabfaf53cada3f8300c36783f81e0d3e1bd4bc065812df471804365f3467d32b0bfa7618e5db4d6100381feddab296313e772b00be2106f80687e01b027c942e0e7cbadf4f3add750091f13f7027e0d3fd0ed9e9ae955c02e93a039feef5931360b3237c49e0a3740085c067e2bda86408be14f0e1dac3f4abf99d93d4e9be7382f7df2ec0a7fb9e0016f63d94a0359c5ffeb634d3ff8c1ec7023ac287e3a6784f263eddcf11c23e005fc67111fc4f678a2fdb7dcbe0738e327caed09172c17e279691d8829e879800fecf4ff952bc1a9848d7cd204b4261c9557e417cdd81afc6005f7508be1ae000a37417009feeff3c61ff7be3b3654a7721f0e9fe8f93606dc70372f1e1ff1e004a7711f0e97ddee2f38d08c13712f828ddc5c0a77b7c27c1da7e6b3b17df2800e0a3749700df68037ca342f08d063e4a7729f0697e1ee4f18d0ec187cf502800dd65c037d600df98107c63818fd25d0e7c69037c6343f0a5818fd25d017ce3000cf0a543f08d033ed2f700bef106f8c685e01b0f7c94ae27f04d30c0373e0400df04e0a374bd806fa201be0921f826021fa5eb0d7c930cf04d0cc13709f828005d1fe09b6c806f5208bec9c047e9f0db74530cf04d0ec13705f828dd55c03700d500df94107c53818fd25d0d7cd30cf04d0dc1370df8281dfeaf9d6e806f5a0008bee9c047e90602df8d7af9bcff6fd343f0dd082c37e965a94840fe1d61b900095866e8654919f0cf1bdbbc59739e228f5b58fbf343ec25b0ff6628af5b340097570c6c52be14473ec77a7eb30a96e90a67028e9b6e011fe966186449282c0062cbd6d605f1e1b99c6980ef96107c33812fa8aeddaa97cfbb6fcd0cc1772b00b0dcae95a5dc1b97bd3504cbedc0729b5616ffbea5d73fff1e332ba02cc94e0009ecc7733e4bb36f31b049f9521cf91cab6375ac8ed5b13a56c7ea581dab630075ac8ed5b13a56c7ea581dab6375ac8ed5b13a56c7ea581dab6375ac8ed5b1003a56c7aa9f55b0cc54381370dc4c0bf848779b419684c222b66cf34482f8f0005cce36c0372b04df6ce00baa6b730cf0cd0ec13707f86607f0cd35c037270400df5ce09b13c0374f2f9f37676a6e08be79c0325f2b8bff5dbc792158e603cb001d5a59fc39537afdf3e74c2d08284bb25302fbf19c2fd0ec5b0c6c52be1447003ec7ea581dab6375ac8ed5b13a56c7ea581dab6375ac8ed5b13a56c7ea581d00ab638d0aab6099ab7026e0b8b916f091ee0e832c0985456cd99eb307f1e1b9005c68806f4108be85c01754d71619e05b18826f11f02d0ce05bac97cf1bd3590014826f31b02cd5cbe2addfb23804cb526059a2972565c03f6f4ca796b52f4b00b25302fbf19cd76af62d0636295f8a239f633dbf5905cb22853301c72db280008f744b0cb2241416b1656b9782f8f05cd619e0ab0dc157077c41756d995e3e00ef1e5317826f19b0346865f1e70d2c0bc1d2002cf55a59fc7b8c5efffc7b4c00634059929d12d88fe7bc51b36f31b049f952bcd19c5dcfffe539fc5f1ec0b1003c8ffe235f47596f8e10ab2b5757aeae5c5db9ba7275e5eacad595ab2b575700aeae5c5db9ba7275e5eacad595ab2b5757aeae5c3bce2a58ea14ce041c576700011fe9ea0db2241416b1657b761fc487f56e8501bee521f856005fd075b1d20000df8a107c2b818fd2e1b5b04a2f9f374eb43204df2a6059a395c55f937f5500089635c0b25a2b8b3f4ea4d73f7f9c646d4059929d12d88f7572ad66df62600093f2a538f29d8bac8d11627575c00cabab038ed5d501c7eaea80637575c0b100ba3ae0585d1d70acae0e385657071cabab038ed5d501c7eaea80637575c0b100ba3ae0585d1d70ac67bb0e0896950a67028e5b69011fe9561b6449282c62cb00364f24880febdd3a037c6b43f0ad03bea0eba2c900dfba107c4dc0b72e806f00bd01bea6107ceb818fd2e1b5ba412f9f37676a7d08be0dc0b2c900cb86102c009b8065a35e969401ffbc3953cd016549764a603fd6c966cdbec5c026e54b7100e48b0aab6059af7026e0b8f516f0916ea3419684c222b66cd74f101f9ecb1600037ccd21f85a802fa8ae6dd6cbe7b53f2d21f83603cb56032c9b43b06c0596002d7a595206fcf3dac26d016549764a603f9ef36d9a7d8b814dca97e2c817150056c1d2a27026e0b8160bf848b7c5204b4261115bb6eb27880fcfe576037cdb0042f06d07bea0bab6c300dff6107c3b806f7b00df4e037c3b42f0ed043e4a970000be5d06f87686e0db057c94aed8209f60e9a6b074535884dddd7aed7af7b5005dace3e5b21bca05cb486c09d88fcc7b0c94d56e858fe27b808974dd0cb2240014965ce517c4d71df85a0df0ed09c1d70a7c94ee02e0db6b80af3504df5ee000a3741702df3e037c7b43f0ed033e4a7711f0ed37c0b72f04df7ee0a374170300df01037cfb43f01d003e4a7709f01d34c0772004df41e0a3749702df21037c000743f01d023e4a7719f01d36c0772804df61e0a3749703df11037c8743f01d00013e4a7705f01d35c0772404df51e0a3743d80ef9801bea321f88e011fa5eb00097cc70df01d0bc1771cf8285d2fe03b6180ef7808be13c047e97a03df4903007c2742f09d043e4a87ff2beed4cbe7f54f4f86e0bb1358eed6cbe2ad677e67000896bb81e52ebd2c2903fe25459ef768ce53e4712f6b7f7e88bd04f6df03e50075afe6f28a814dca97e2c8e758cf6f56c17252e14cc071272de023dd5dc0a200bb2d103e5f27f3a2bc3b71195194b1a9b9af5121fca77b5ea1cc9718c8561c008e599fc8708d915cc5b09fce15f661f0fce9ee6bc658dbbe521ae264ab187c00390a2cbafb9531d6b65f94b6ccae897e7e987eea11732c49ecfba21d13ff0d00c3fcb739649005ff2fa11dcdffd7bd76e97a9917e52daeff5945c67cf3da25003a8fd42e5daff81a87636641bb342fa05d32781d24d5ebaf14ec922dfccf79000c58343f1b489600470133767e521d7d1e42db788b584659c45265114bd22200963e16b10cb088e5728b582eb488a5ab452c718b58a659c432c12296d116b1009cb088a5da229694452c832c62b9d222962b2c62596f11cb4516b1242c62590064114b278b58a65bc432c622961a8b58ca2c62196c11cb5516b1f4b088e562008b58565ac4526c11cb7516b15c6b114b678b58c65ac432dc2296728b58865800c472b5452c3d2d62b9c42296128b58ba59c472bd452c8516b1ccb588e5068b00584c8e758765495bc432c22296fe16b15458c432d42296528b587a59c462f2003d8bb02cdd2d62a9b388a5c822969916b15c6311cb388b58465ac45269114b005f8b58fa59c432cc2296de16b15c6611cb0516b10cb488a58b452cb1b3cc920060ede72ae3bba4a5a0a379be387f95debd3d0cba82001b34ffe920e868ac9500f228e4f25c717b86024843ef22c703180e05b0ee0f486bbaccd14e1ae264ab001818f65bc0d2c522968116b15c6011cb6516b1f4b6886598452cfd2c62e96b00114ba5452c232d62196711cb3516b1ccb488a5c822963a8b58ba5bc472a945002cbd2c6229b58865a8452c1516b1f4b7886584452c698b588e58c47283452c00732d6229b488e57a8b58ba59c4526211cb2516b1f4b488e56a8b588658c452006e11cb708b58c65ac4d2d922966b2d62b9ce2296628b58565ac472b1452c3d002c62b9ca2296c116b19459c4526311cb188b58a65bc4d2c922964516b1242c0062b9c82296f516b15c6111cb9516b10cb2882565114bb5452c272c62196d1100cb048b58a659c412b788a5ab452c175ac472b9452c032c62e963114bd22296002a8b584659c432de2296823cb1e03764d2103f0476f7e9b5eb7d4f60afde3c00bdb5785b655e85325fe2265b713866acbc99d0bc11d28b8de6efee83f371480039ae88e9ff2697f0a11f6b7b3efa39bb67cdaee63aaae59b66fb80cfc437eb00f686e0db639005bf938676347fe7d05b379ce63050dee2d9d4ecae199b7abf0067906a14657a5ce6456d1531047dcfa006d60dbf4372e1bae1ad2cb31d031f00a8cd3a0e79d2fe45d0fee1b707e83fbcd0d17ae4834147734f8680eeb00c0f00051ddd4786818edad524e8e8fe96021dd5f132d0515d28071dd58b0ad0d13900a439bef87d4f7c8f4ff7775863aced7744d310df017cf4fd4bfc762885ab40004769aa4147df6bad011d7d637638e8e8bbb8234047dff01d093afaeef028d000d1778747838ebee93d0674f41df2b1a0a36fa6a74147df791f07ba26191e0f00ba75323c01746b65781ae8d6c8303dcb16e77795a213e77785c2923cb3cd3b00bf6487f2a5f80ae05b2dc3ab4047e199c0bc5cd109e64603cccb15668a3702001ff12f071d85e7027383a213ccf506981b14668ad7031ff137808ec28b80790099a213ccb506989729cc14af053ee25f063a0ad701f3524527989718605eaa0030537c09f011ff52d0517825302f56748279a101e6c50a33c517021ff12f06001d85d703f302452798e71b605ea030537c3ef011ff02d051f88461be5d0adf002e85cf94ddd58addd579b2bb42b1bb224f761b15bb8d79b25bafd8adcf93dd005ac56e6d9eec2e51ec2ec993dd858add8579b27bbed5e7b3d56e9c6ff5f96c00b51b67eb3a72f7c1fcd875f7c1fcd83ddfee831db97ee7e9b5eb7d877a3e6b00bb657b663a0f58eed05c0606fcf3c66ae668ce53e4311bca64be523625b07f000e94d76ccde515039b942fc5912f2aac09d01d031ded3f0aba59328c6be7dc002ec38741779b0ce33a39b7caf001d0dd22c3fb4147df7fdf07ba9b64782de80066c8f01ad0dd28c3ab4137558657816e8a0caf00dd64195e0eba4932dc08ba008932dc003afa0e703de8e87bcfcb4047df58ae051d7d0f7929e8e8bbd54b400047df6c5e0cbafb647821e8ee97e1f9a07b850cdf01ba57caf01cd0bd4a86f70082ee0119de03ba57cbf06ed0bd46867781eeb532bc1374af93e11da07b508600b783ee2119de06ba8765782be81e91e12da07b54863783ee31196e01dde33200dc0cba27647813e85e2fc31b41f7a40c6f00dd5332dc04baa765781de8de2000c30b405720c3f340179761bc56690ef42cd0d13b43b783ae50866f035d910c00df0a3a5a37e916d0d19ca99b4147738c6f021dbd07330374f47ee48da0a3f70037a7828ec6d0a7808ed62a9a0c3a9a3335097434c77822e8e8dd13fc4e37bd001f89df5ea77516ee021dad4b7437e8687ed43da0a339bcf7828ede33b90f7400f42ee4fda0eb25c3af001dad41f44ad0d1fca357818ee6eb3e003a7aa7e4d500a0a3f71e5f03ba52197e2de8facaf0eb404763d90f82aebf0c3f043a5a63e50061d0d17b628f808ee6743d0aba8132fc18e8e8bdaec74147ef1e3f01ba1b6400f8f5a01b24c34f828ec61d9f021d8d3b3e0d3a1a77a46b515c07fac76dfdf100f1e3aced96adaf47f6058bdeefa9fb63c8c780210d366e00bb87b5daf5fb21004714bbc441b64a58fb6f4be398702bf0ed37502ed4dfa0b17575bd84381c3300493686d486915e6c7d037c50e70625207c008e235b7b213fbaef16409afdb0007f37840f2a69700ec86eb0b34bb1a37d6c3be5f7d777023bd9dc016c647f2700706cd3c921eb1ef52b285faaebd8b7201d1dabcee7d03d8f4ed83cc2da6ed900da059c5b77502f8b370fee1030a4c1067eb743ef75e79f9b038a5de2205b2500504e78add0b57014f85a0d940b5d4bd42e1003d98ac331b54abb407ab11d0f00f0419dab9480f05e38ae55860f437e743d17409a56d88fcf35f6296944991e00558ec33925644794295d0f69f99b3c934db60b3b809d6c6e0736b2bf0338b600eae490758fae7fca97ea3afebf201d1d2bda8559459932a3f38afdcea38a4e001c7ec400ff51d6969fe278efa1fb2c5e277adbb2b2e499b465bafb1a06daea00a4fe36b7dc9b7a7500cae488523625b0ff2094d701cde5856d3fe54bf103c600ec367aedc0fe1cfeef0fe030710f3a95fffb8dd9adf0a629eecbe1ffbe008e007d79f47f9f39bbde63b1bd39fcdf1bc0a17b7e7536fff71ab35be93d3e6ccd00e17f6b00476b1efd6f3566b7ca9b8eba2787ff7b023874cf19cfe6bfb9b9ea00296f5af1ee1cfeef0ee0d03c973dabffbb8dd9adf0a62defcae1ffae008e5d0079f47f9731bb75def4f39d39fcdf19c0b1338ffeef3466b7ae4ee4b12387ff003b02384cccc13f95ff3b8cd96df0a6e86fcfe1fff6000eadffc772f8bfdd9800dd2aefd58d6d39fcdf16c061e2f9d0a9fcdf66cc6ebdd7ffd99ac3ffad011c0026fe079fcaffadc6ec56d78a3cb6e4f07f4b00c7963cfabfc598dd06affddb009cc3ffcd011c9bf3e8ff6663762bbdf3df92c3ff96008e963cfadf62ceae7700ff6fcee17f730047731efd6f36667799f7fc63530eff3705706ccaa3ff9b8c00d9adf3daff8d39fcdf18c0b1512b4776ff371ab35be3f57f36e4f07f4300c700863cfabfc198dd5aef95d4a61cfe37057034e5d17fe4eb28eb8eb3ccaadf6e00b9f7ac665d0effd70570accba3ffeb8cd9adf4faea6b73f8bf3680636d1efd00275bfaedd67bcf2a689ea1d882fca7fdc8b1462b4776ffd718b35be3ddab5600e7f07f7500c7ea3cfa8f7c1d656d3dcbacfaed5679fdea5539fc5f15c0b12a008ffeaf3266b7deeb57acc8e1ff8a000e13effe9fcaff15c6ecd679fdeae53900fc5f1ec0b13c8ffe2f3766b7cc3bff8d39fc6f0ce030b18ec2a9fc6f3466b700d61b576cc8e17f430047431efd6f00bbbae722e05a108532dfeb943288c331007de424e6ee0a1b961da5c7f56dd007cdeb5954e0da10aa0ff5e0031dd30f7c002802bd2e1e033e7a7d4a7a0f42cca93916e01fed1f589c39ee7a194ec03938000ef9d404eca72ddb9c142a33e1abe6753392b806059dcf2501764dae7d1193004236481f8770354de8676ddfc7a3f2c5353e96061c87e106254d09ec5f6ad800e753bdc348b6443d190c758aea8c81b94329f417cbe53a2817da8f73b44cac009153cbda968bdaa60896930a27ae8783f3d9961ae03bd57a384b818f748780008ffcc0f66444518675a856567fbe38ad5146d733bd1741b6e270cc54e51e43007ab1f595bf945e1c3a58392e01615c578d6c0d021dad933604d2962b3a512600155acbc43f7f6487f2a538aeb5466bb695e797afaca37c650a5f118435b178006555a6b004d9ad3660572d03aa43d586ed562a76538add049c07dab2ddaf71005dbe2acdbc22cf1abd797a7d005a6f8fda0cb291025f4668f605ed521f806c00903e0ee155d007189109bedcaee03a82d501c761b842495302fbab0dfb5c03001c6988932d718f5802f77dcd75de3bdfd50a03c553a0af0928af6a282fda3f000c74d4de97836e88924702f2c1765573bd4e65f313cf3be9708dcd9a00bee1007af9cab2d585e1c047ba2a60d1dd0e328585eef9d8065ea3949da8a73f916100ec1be03d7fa8528e229f5440d99669f627c6dad6e534c4711d56aabba9fcf2009575942fa9f099e81f2558db7bbed8b2dddf2a804577ffc3807f5e11e23dbe004cf1a304f697826f959a7d8bb1b6fd8834c4b1cf60a2ff4bf9d3fdbdbf5206007138e63ee53f4150d9517aec37571a2ebb246b5b76c900bb26ee216aff90da00b91ac376ab14bbc314bb61fba526ef1f06ee8f49ec0f52bd251bc3c097910600ca7e0494670c6c903e0ee167a05f3a32137cf9de876b59d7041c87e10a254d0009ecaf31ecf370e048439c6c89fbfdc3d02f35f13fe454fd217c2e313ca0bc00b03f47fb53a0a33e4925e882faa579e8f7a54eb7df9780fdc8a7f93f4a59b600ba3002f84887ff974cb4832a0bdd7bb01decaf949fa8ab5f07ae22bd5c15b800b60d6dd9dade22f82dd45c466229005a636659ed9a35335bead6ac5c36b96500ddb2e6954deb6240d7194a476c71202c8030eae9585ca5a733e8bac87021e8000a14af71c5a02ef0ab9698d66a2320c631bf4b47f1f12cd3a48bf804253e5100894f52d23fa2c41f53e24f28f12795f8d34afc1925fe4625feac127f8b127f009b127f87127f97127f8f127f9f127f4e897f40897f58897f4c897f42897f5a0089bfa8c4bfa0c4bfacc4bfa6c4bfa9c4bfa3c4bfafc47fa4c47faac47fa1c4007fadc47fa7c4ffaac4ffa9c4ffadc4ffa3c4ffa7c463313f4e9fa260b04f5c0030e2e213179bb8b8c4c5242e1a71b9d31257a219164b5889aeba58a24a2c49002596a012cd8158624a2c29259690124b468925a27a307f0928b1e49358e249002ce9249670124b365d2dd9fa327fc925d1a48abffc6209a501cc5f22490c6700886507c49224e2962abac2e25624ba3ae2162dbae4e2b62bfe2688bf86e2d6002a6eb9e216266e13a2c9164db4b88d886e85f854c768f0fd53f2579487f81400479af9d7f078e65fabe2fa14d7e464e62fcf3595f99fd398cefc65bd66307f001930b13c9858364c7c8e422c2926961a134b9089a5c9c49265626939f1d9870079cc5f7a4e2c4927963c13c370e2d30a62d8510ccd2d65fed04d1df38777c4007094187e12d31396337f9a8af8448098ae23a62c892966629a9d986a28a65b008aa5f8c51459314d584c9516d3c5c59479f1da80787542bc3e225ea111af110089e9a9e27532f14a9d78ad50bc5ad9cafc576cf731ff556bf1bab978e55e0c00311d66fe340031342786a8c550e809e60f858965c5c4326262d930b14c985800164c2c032696fd12cb7c8965bdc4325e0f307f992eb12c9758864b2cbb259600d912cb6a8965b41e61fe3259a29d7b9cf9ed9b58e64ab46b4f31bf3d13cb54008976ecff98df7ebd89f9edd69b99df5ebd95f9edd4db99df3ebd93f9edd2bb0099df1ebd97f9edd0fb99dffe3ccffc76e7835c3ec4fc36e7235c3ecafcf6e600e35c5e607e5bf349e6d719d1ce7c86cb6799dfc67c8ecbe799dfbe7c91cb970098dfb67c85cb5799dfae88eec13798dfa67c8bcbb799df9e7c97cbf798df9600fc80cb0f99df8efc98f98fbb441bf2332e3f677efbf14b2ebf627edbf11b2e00bf657ebbf17b2e7fe0f2472e7fe2f2672e7f617e1bf2372e7fe7f20fe6b72100ff627edbf112f3db8cff32bfad108d8168230ab8c4b974e2d2994b612cf3f7003cc632db1b64a4af8cd7363737ac5ddf5cdadc54bab6654df3caf56bb6956e0059d9bca2b46973c3c6c6354d5b30f16279dbee29e3e3366eacdd56ba725d7d00c3d6d2a696e6d2a6c6d2baa69675f59b30d1a18233b0785c26eed33e716d7d00fda9d33d28d3d12a7ad3b2333e723a8e3d793a89c6743d8d441313a79168e900e924ea5d7c1a89fa9e4ea229a793e8de8e2662ff0f44890a9f572d0200dbaf0010c3000000240b1f8b08000000000000ffed9d05781c3716c7b5dec44ed64e00ca6da8ad93b469dad0aed9c10d3649296d430d1bc371c00e3353b977d7837200afed518ff97acc773d666666861e48337addbfe5f1ae2791369a44f37def5b00e9cd48eff7341a8d76a4d114c6181bcefc2dcee54ad6718bc9dfb4fc4d9ede0096d29857d224672c229c0511e18c4784b35b4438bb4784b330229c4511e1ec001111ce9e1a39055b016bbfe9e64d182857dd8cc52c1ae7be24229cbd22c2d9003b229ce74584f3fc88705e1011ce0b23c2795144382f8e08e72511e1bc3422009c974584b34f4438fb4684b35f4438fb4784734044382f8f08e7151a39059b00fa9c5137ef9506ca55376369041807468071500418074780f1aa08305e1d0100c6211160bc26028c4323c0786d0418af8b00e3b008300e8f00e38808308e8c0000e3a808302623c0988a0063590418cb23c0581101c6ca0830564580b13a02008c351160ac8d00e3e808308e8900e3d808308ed3c87815cb6ce3e5ef04857700a2fc9d247f27cbdf29f277aafc9d267ded26e3d77399ce65069799721f15ca000d5c6ee47213979bb9dcc26516975bb9dcc6e5762eb3b9cce13297cb3c2ef300b9dcc1650197855c167159cc650997a55c9671a9e352cfa5814b2397262ecd005c967359c1652597555c567359c3652d97755c5ab8ace7b281cb462e9bb8b4007269e3b299cb162e5bb96ce3b25dfa522a7dd9c16527975d5c7673d9c3652f00977d5cf67339c0e52097435c0e7339c2e52897635c8e7339c1e524973bb9dc00c5e56e2ef770b997cb7d5ceee7f20097977079299797717990cbcbb9bc422900f3577279159787b83cac703ec2e5512e8f71799ccb135c9ee4f26a2e4f7179009acb335c5ec3e5b55c5ec7e5f55cdec0e5592e6fe4f2262e6fe6f2162e6fe500f2362e6fe7f20e2eefe4f22e2eefe6f21e2eefe5f23e2ecf71793f6b7ffe3f00c0e5835c3ec4e5c35c3ec2e5a35c3ec6e5e35c3ec1e5935c3ec5e5d35c3ec300e5b35c9ee7f2392e9fe7f2052e5fe4f2252e5fe6f2152e5fe5f2352e5fe7f2000d2edfe4f22d2edfe6f21d2edfe5f23d2edfe7f2032e3fe4f2232e3fe6f213002e3fe5f2332e3fe7f20b2ebfe4f22b2ebfe6f21b2ebfe5f23be90bcd75fa3d00973f28ba3f72f9930cff59fefe45fefe5539f66f5cfe2ec3ff90bfff94bfff0092bfff96bf2fc8dfffc8dfffcadfffc95f6a6c62f2b740fec6e56f37f9db5d00fe16f2df4f14fbe12296d9d2f237793a5b65b2babb67d4cf6b3c6bbf25a00c00e818a18b932ba0a3fa5d00baee5217075d2165073af2ab3be87a485d21e87a004a5d11e81252d70374b2b8584fa913f997485d5afe264f67ab48d6893c7be900cc53ce9deb2df32a017fce93ba5ea03b5fea7a83ee02a93b0f74174addf9a000bb48ea2e00ddc5527721e82e91ba8b4077a9d45d0cbacba4ee12d0f591ba4b0041d757ea2e035d3fa9eb03bafe52d7177403a4ae1fe82e97bafea0bb42ea0600808ec6c92e075da9d45d017564a0d4a5e56ff274b68a54b3c87390ce3ce53c00e0f7b38c1fe3257f01e826485d1c7469a9eb06ba8932d21d7493a4ae10749300a18c483745ea7a806eaad4f504dd342873ca6394d672aea816792675e6c97300157996e9cdd31bb32d6799f24d838d24944f855ebb29b41b934236481f87f0001896d92a204ced6a19c45301c761789492a604f6a70cfb5c061c6988932d510035b1dc35d7cb7afdf5b23c792ed7cb192cb3611da3fbf0d9542fc70383de7a00596da05e969dd3f5721ecb6c58c7a8df7636d5cb1b81416fbdacad77f7f1ac005be87ad9c4321bd631fa9f7036d5cb05c0a0b95e36bbf632eb16ba5e6e6299000deb18fd2f3d9beae50a60d05b2feb9b5dff32eb16ba5eee63990deb183d0700399beae56660d05b2f9b0cd4cb64d9b95c2fef66990deb183d773b9beae5410060d05b2f9b53ae5e66dd42d7cb875866c33a46cf79cfa67a799f0c8be7987f0096cf34fb83ee2f523700747f95bacb815f739dae72753aeb16ba4e3fcb321b00d64f1a57389beaf413322ceaea3f645d2d05dd3fa56e20e8fe25758340f76f00a91b0cba17a4ee2ad0fd47eaae06dd7fa56e08e8fe2775d7808e062986822e002675d782ae40eaae035d5cea8681ae9bd40d075d77a91b01ba42a91b2975e200990e8db97c4aea8a209fb4fc4d9edee68d05122f6d31259e86f070732cc9120060413b23f5da294f40d977c5e791c0a2b55de55b02f2ef0acb2860d1dc1e7b00fd9694de3cbd733a4229c704d81901fe68be1778ed538ab52f478a635b995200ca3601fb91af5c2f5f59b6f6b31cf882ee5fbaef9bc2e7c14ad988e6e7eb600053f375e8ddabe93aa7f5b188816cc5e1985dc519ae6f0397ee365170d17d8700f2a5b8c1f6ef5cb3ebd5b9ab143be2dcfe046ceaad73a966ac73a27fb807180082eadc54a873bf90ba62d83f0c74941eefebb6b473828fdab7547ef9cabaca009754f80cdc8f5238f790f27576f5df4f307f71edd0f54276e2b0ffd30599e3005e00a6617a99cac2f6fb86192b9fb264d87e7719b0e8ae2326cebf81fe925700a72a02ce4fd0ffde7228af33f1bfd7b13a56c7ea581dab6375ac8ed5b13a5600c7ea581dab6375ac8ed5b13a56c7ea58a3c48a63f938c72568acfc4cf191ce00e4d886f099e616e158f99db18c4dbdcfe8cbbcb1722a73316e590a0c642b0e00c73c12cb70dd2bc3386e896394eab8a581792edef9c3792e698893ad62e0c70039379ae71da4b02c29dfb3d76e598389f78ac4bbb0e2fd7baa4f49c50f9c4b00738da21375f2f9828cbfbac7b3c28ead191c7f6d37a70dede81d1bf3db076a008b44d196b24cfb60e0be91a280b05b29f312edd240d6b15d8ec331af9527a2003733779fe86cbcbb02caa152afdd24cef765b2fce9da205b0908d3b1225d1500945f29945f25941f1df31668d7e7c035a47bce06ce0d61c08a5b1ac2383ead00f79cfa63e5652158f03c6b1e834e19a8b34913f551e451c53a9e1fec2bd1fe004a28af2acde5a55e176988239f6375ac8ed5b13a56c7ea581dab6375ac8ed500b13a56c7ea581dab6375ac8ed5b1468515df2b27ce041c97b2802f0ff30abc0067f7b4e606e52dc62e26c3d885c9b1301a5319a2f81a8763f61564b8ae97e10062d6712e4167e74ff3b3fbace78f6c15832f38de61623cad5c61397bedfa6300e57aafc7cc5839d5a72ac50f3aa738564c3a1ce7c3b58070fe46b9a23b53e70003af9972d05118dfa7d55dc682af5ae645eb3ed1f837d98ac3314b6599d2380074b5661e13edbac8a346e6d58d75ac4f71d8df086d5ab30c07b55f627f5bc0007edab28db35299095f47ebf5d53b9ff47d003a9fa303ec8ed56b378576691d002fb241fa38845b0b32e53136137cb17c89595c07b501c761b842495302fb6b000dfb3c1a38d210275ba29eac843ad506f76fddf73ff417cbe56a2817da8f7d001713fda81ae028651ddb149c13499ce23aa23a8a6d72ad01be6ae04b43bc1600f84887f350c80f6c4f70fee2b93a3fe908dc1782e6f450da21c0aca9feb76300ae5298d5be02ce093aa9dccb4cf4473b9b5365f07f56bb7347e54f73aac856008275fccfa7f6054a59c7ff3fd8177800dab58f435f8bea25f6ff2b159da9760007fd4e439c6c615f0bfdaeecc46f5cc7496f5fc7e725aeee0a07d9c2fafab000728dd500731a9847415a3ae63148cb58fbf699e69e627fb44a394e7f5fa52c00b0af42edc368f0818e795ab95ec768e631d01ff3aa3bf605ca02fca3fdaf8700ebe959e85bd23928877c9e0bd84f5bb6be279599f075bc5e5fbdf349df3ea500f3393ec06e5aafdd14daa5be27e54dfa3884df57105c3654bec42cae83710100c761b846495302fbc719f679bcc2a49e4f514fde0c75ea39e87beaee53a1bf00582e43a05c687fd0b33e3a5ed467ba1ef05ea1fbbac4ff27942fc5b3fd8fc0007b9dfefe5ec7f7754a59c76770f86c10dfa3c167839ad7004be2fb08c3c0e600f3e66c7a6541df0ea37c7b290ce7a25d5bd632c6e76e05c037c200dff0107c0023808fd2c5814ff7fb49a7ba2e32fe07ee067cbadf213bd5b5924b205d77e000d3bd7e72026c76852f097c94ae10f84cbc17950cc197023e5c7b987e35bf7300923ad5774ef0fedb03f874dfd3c2be8712b486f38bdf9666fa9fd1e358405700f870dc14efc9c4a7fb3942d8e7cb382e82ffe94cf165bb6f197cce5186cf1500ba522ed8efc432125bd0f310d3fff9295f8a570313e97a196449282cb9ca2f0088af37f0d518e0ab0ec157037c94ee3ce0d3fd9f27ec7f6f7cb64ce9ce073e00ddff7112acfd78402e3efcdf43e92e003ebdcf5b7cbed121f8c6001fa5bb1000f8748fef2458fb6f6de7e21b0b7c94ee22e01b67806f6c08be71c047e92e06003ecdcf833cbe7121f8f0190aa5bb04f82618e01b1f826f02f051ba4b812f6d00806f4208be34f051bacb806fa201be7408be89c047fa3ec037c900dfc4107c0093808fd2f505bec906f82685e09b0c7c94ae1ff04d31c0373904df14e0a37400fd816faa01be2921f8a6021fa51b007cd30cf04d0dc1370df8281d7e9bee7a00037cd342f05d0f7c94ee0ae09b6e80effa107cd3818fd25d097c330cf04d0f00c13703f8281dfeaf9d69806f4608be99c047e9ae01be1bf4f279ffdf6686e000bb01586ed2cb529180fcbbc27213b0dca8972565c03f6f6cf366cd798a3c6e00611dcf0fb197c0fe9ba1bc6ed15c5e31b049f9521cf91cebb9cd2a58662a9c0009386ea6057ca4bbd1204b4261115bb6b62e880fcfe52c037cb784e09b057c004175ed56bd7cde7d6b5608be5b81e576ad2ce5deb8ecad21586e0796dbb4b200f8f72dbdfef9f798d9016549764a603f9ef3d99a7d8b814dca97e2c8e7581d00ab6375ac8ed5b13a56c7ea581dab6375ac8ed5b13a56c7ea581dab6375ac8e00d5b13a56c7ea581dab6375ac8ed5b13a56fdac826596c29980e36659c047ba00db0cb2241416b1659b2712c487e7728e01bed921f8e6005f505d9b6b806f4e0008beb9c03727806f9e01beb921f8e601dfdc00bef97af9bc3953f342f0cd070096055a59fcefe2cd0fc1b20058eed0cae2cf99d2eb9f3f676a614059929d1200d88fe77ca166df626093f2a538f23956c7ea581dab6375ac8ed5b13a56c7ea00581dab6375ac8ed5b13a56c7ea581d6b545805cb3c853301c7cdb3808f747700186449282c62cbf69c3d880fcfe522037c0b43f02d02bea0bab6d800dfa210007c8b816f5100df12bd7cde98cee2107c4b8065995e166ffd962521589601cb0052bd2c2903fe79633a75ac6359929d12d88fe7bc4eb36f31b049f9521cf91c00ebb9cd2a58162b9c09386eb1057ca45b6a9025a1b0882d5bbb14c487e7b2de00005f5d08be7ae00baa6b0d7af9bc7b4c7d08be066069d2cae2cf1b6808c1d200042c8d5a59fc7b8c5efffc7b4c734059929d12d88fe7bc59b36f31b049f95200bcd99c5dcfffe539fc5f1ec0b13c8ffe235f57596f8e10ab2b5757aeae5c5d00b9ba7275e5eacad595ab2b5757aeae5c5db9ba7275e5eacad595ab2b5757ae00ae5cbbce2a58ea15ce041c576f011fe91a0db2241416b1657b761fc487f56e008501bee521f856005fd075b1d200df8a107c2b818fd2e1b5b04a2f9f374eb4003204df2a6059a395c55f937f55089635c0b25a2b8b3f4ea4d73f7f9c646d400059929d12d88f7572ad66df626093f2a538f29d8daccd11627575c00cabab03008ed5d501c7eaea80637575c0b1ba3ae0585d1d70acae0e385657071cabab03008ed5d501c7eaea80637575c0b1ba3ae0585d1d70ac67ba0e0896950a67028e005b69011fe9561b6449282c62cb364f24880febdd3a037c6b43f0ad03bea0eb00a2c500dfba107c2dc0b72e806fbd01be96107ceb818fd2e1b5ba412f9f3767006a7d08be0dc0b2c900cb86102c9b8065a35e969401ffbc3953ad016549764a00603fd6c956cdbec5c026e54b71e48b0aab6059af7026e0b8f516f0916ea341009684c222b66cd74f101f9ecb36037cad21f8da802fa8ae6dd6cbe7b53f6d2100f83603cb56032c9b43b06c05962d7a595206fcf3dac26d016549764a603f9e00f36d9a7d8b814dca97e2c8171556c1d2a67026e0b8360bf848b7c5204b426100115bb6eb27880fcfe576037cdb42f06d07bea0bab6c300dff6107c3b806f7b0000df4e037c3b42f0ed043e4a9700be5d06f87686e0db057c94aed8209f60e900a5b0f4525884dddd7aed7af7b55dacebe5b21bca05cb486c09d88fcc7b0c9400d56e858fe27b808974bd0cb22414965ce517c4d71bf8f61ae0db13826f2ff00051baf3806f9f01bebd21f8f6011fa53b1ff8f61be0db17826f3ff051ba0b8000ef8001befd21f80e001fa5bb10f80e1ae03b1082ef20f051ba8b80ef9001be008321f80e011fa5bb18f80e1be03b1482ef30f051ba4b80ef8801bec321f88e00001fa5bb14f88e1ae03b1282ef28f051bacb80ef9801bea321f88e011fa5eb00037cc70df01d0bc1771cf8285d5fe03b6180ef7808be13c047e9fa01df4903007c2742f09d043e4ad71ff8ee34c0773204df9dc047e9f07fc55d7af9bcfee9009d21f8ee02967bf4b278eb99df1582e51e60b95b2f4bca807f4991e7bd9af3001479dcc73a9e1f622f81fdf74279dda7b9bc626093f2a538f239d6739b55b000dca97026e0b83b2de023ddddc0a2bb2d103e0f957951deddb88c2ecad8d4dc00d7a810fed33daf50e64b0c642b0ec7ac4f64b8c64bae62d84fe70afb3078fe0074f73563ac7d5f290d71b2550cbe1c0316ddfdca186bdf2f4a5b66d7443f3f004c3ff5a8399624f67dd18e89ff8661fedb1c36c882ff97d08ee6ffeb5ebb7400adcc8bf216d7ffec2263be79ed129d476a97ae557c8dc331b3a15d9a1fd02e0019bc0e92eaf5570a76c916fee73c0e2c9a9f0d244b80a380193b3fa9ae3e0f00a16da6452ce32d62a9b188a5cc2296e116b10cb088e5528b588658c472be45002c2b2d62e969114bdc2296a116b14cb088a5d62296728b584658c472b9452c009759c47281452c098b58aeb588a59b452cf32c62b9ce221693cf4fc2b2a42d0062196d114b85452c232d62b9c222963e16b15c68114bb1452cf516b174b78800e56a8b586659c432d122963116b1545ac432ca22962b2d62e96b11cb4516b1009458c4d2cb2296428b582659c432d62296c116b15459c492b488a5d422967e0016b1989cc31f96a5b7452c4516b1ccb088e52a8b58265bc432ce22969316b100545bc432d022964116b1a42c621966114b7f8b582eb18865bd452ce759c472008d452c3d2c62596c114bec0cb32458c7b9caf82e6929e8689e2fce5fa5776f008f80ae20c006cdf339043a1af7a53c0ab93c57dc91a100d2d0bbc8f10086c30001ac0702d29a2e73b4938638d92a06860316b02cb688a587452cd758c4729e00452ceb2d62b9c42296fe16b10cb388256511cb208b58065ac4526d11cb498b0058c659c432d92296ab2c629961114b91452cbd2d62b9d822967e16b1945ac40092b488a5ca2296c116b18cb5886592452c8516b1f4b288a5c422968b2c62e9006b11cb9516b18cb288a5d222963116b14cb4886596452c575bc4d2dd22967a008b588a2d62b9d022963e16b15c6111cb488b582a2c62196d114bda2296a31600b15c6711cb3c8b58ba59c472ad452c098b582eb088e5328b582eb788658445002ce516b1d45ac432c12296a116b1c42d62e96911cb4a8b58ceb7886588452c00975ac432c02296e116b19459c4526311cb788b58665ac452902716fc864c1a00e287c1ee7ebd76bdef09ecd39ba7b716ef5e9957a1cc97b8c9561c8e99206f00b2342781f462a3f9bbfbe17c1c568e2b62fabfc9257c18c4da9f8f41ceee1900b3abb98e6af9a6d97ee033f1cdba7d21f8f61864c1efa4a11dcddf39f4d60d00a7e76294b7781e34a767c6a6deef19a49a45999e9079515b450c41df33a8810075c3ef905cb86ef85e96d98e830fd4669d803c69ff6268fff0db03c358267f005a8f7c38e8e879e608d01d91e191a0a3fbc828d051bb9a041ddddf52a0a33a005e063aaa0be5a0a37a51013a3a8734568bdff7c4f55f747f8735c6da7f4734000df11dc047dfbfc46f8752b80a7494a61a74f4bdd61ad0d137666b4147dfc5001d0d3afa86ef18d0d17787c7828ebe3b3c0e74f44deff1a0a3ef904f001d7d00333d0d3afacefb44d0b5c8f024d0ad93e1c9a05b2bc33340b74686a9af26ce00ef2a4527ceef0a8525797a9b777ec90ee54bf115c0b75a8657818ec2b3807900b9a213cccd0698972bcc146f063ee25f0e3a0acf03e6264527981b0d30372900cc146f043ee26f021d8517037383a213cc7506981b14668ad7011ff137808e00c2f5c0bc4cd109e6a506989729cc145f0a7cc4bf0c74145e09cc4b149d605e0064807989c24cf145c047fc4b4047e1f5c0bc50d109e6050698172acc145f00007cc4bf1074143e69986f97c2b74be1336577b56277759eecae50ecaec893dd0066c56e739eec362a761bf364b74eb15b9727bb4b15bb4bf36477916277519e00ec9e6bf5f94cb51be75a7d3e53edc699ba8edc7d303f76dd7d303f76cfb5fb006057aedff97aed7adfa15ec0da6fd99e99ce07963b34978101ffbcb19ab99a00f31479cc813259a0944d09ec9f0be535477379c5c026e54b71e48b0a6b027400c74147fb8f816eb60ce3da39b7cbf011d0dd26c3b84ecead327c1074b7c8f00001d0d1f7dff783ee26195e0bba1b65780de86e90e1d5a09b2ec3ab4077bd0c00af00dd34195e0ebaa932dc0cba2932dc043afa0e7023e8e87bcf0da0a36f2c00d7818ebe87bc0c74f4ddeaa5a0a36f362f01ddfd32bc08740fc8f002d0bd440086ef00dd4b65782ee85e26c3fb40f7a00cef01ddcb657837e85e21c3bb40f7004a19de09ba57c9f00ed03d24c3db41f7b00c6f03dd2332bc15748fcaf016d0003d26c39b41f7b80cb781ee09196e05dd9332bc0974af96e18da07b4a86378000ee69196e01dd3332bc0e74af91e185a02b90e1f9a08bcb305eab34ef7836e800e83d9ddb415728c3b781ae48866f051dad55740be8682ed9cda0a379bd3781008ede83b91174f4aee60da0a37749a7838ec6d0af071dad0f340d74347f6b2a00e8685eef14d0d17b30f89d6e7a5713bfbd4eeff0df0d3a5a7fe71ed0d1fca8007b41477378ef031dbdf3723fe8e8bdcc0740d74f865f023a5a6be7a5a0a3b900502f031dcdd77d1074f47ecbcb4147ef60be0274a532fc4ad00d94e157818e00c6b21f02dd60197e1874b466c623a0a377d61e051dcd757b0c74d7c8f0e3a000a3f99c4f808ee6b33f09baeb64f8d5a01b26c34f818ec61d9f061d8d3b3e03003a1a77a46b515c07fac76dfdf1f113acfd96adaf47f6058bdeefa9fb63c8c70081210d36ae03bb47b4daf5fb214715bbc441b64a58c76f4be398f05ee03b6000a05ca8bf4163ebea3b38713866aa6c0ca90d23bdd80606f8a0ce0d4a40f820001c47b6f6417e74df2d80340760ff6e081f52d2e01c90dd6067976247fbd87600caefafef0476b2b903d8c8fe4ee0d8a69343d63dea5750be54d7b16f413a3a00569dcfa17b1e9db07994b5dfb2b50b38b7ee905e166f1edc616048830dfcc600a2deebce3f370715bbc441b64aa09cf05aa16be118f0ed35502e742d51bb40000c642b0ec7d429ed02e9c57622c00775ae5202c2fbe0b8bd327c04f2a3ebb90000d2ec85fdf85c63bf924694e931e5389c5342764499d2f59096bfc9d3d96400bbb003d8c9e6766023fb3b8063ab4e0e59f7e8faa77ca9aee3ff0bd2d1b1a2005d985d9429333aafd8ef3ca6e8c4e1470df01f63edf9298ef71ebacfe275a200b72d2b4b9e4e5ba6bbaf61a0ad4eea6f736bbdc70707a14c8e2a655302fb0f0041791dd45c5ed8f653be143f68ceae374def400eff0f047098b80775e63ff2007595f5d01966d56fb7d99b26b83f87fffb0338f6e7d1fffdc6ec567ad347f700e5f07f5f0087eeb9e0d9fcdf67cc6ead77fef7e6f07f6f00c7de3cfabfd79800ddaa7a91c79e1cfeef09e0d03dbf3d9bffe6e6d5377953a077e7f07f77008700e679f759fddf6dcc6ebde7ffae1cfeef0ae0d89547ff7719b35be74d95df9900c3ff9d011c3bf3e8ff4e6376ebbce9f43b72f8bf2380c3c4fb029df9bfc39800dd4aafafba3d87ffdb0338b4fe77cce1ff7663766bbdd74cb6e5f07f5b0087008967599df9bfcd98dd06effeb73587ff5b03384cfc67efccffadc6ec367bed00ff961cfe6f09e0d89247ffb718b35be9f9bf3987ff9b033836e7d1ffcdc6ec005679ed7f5b0effdb0238daf2e87f9b31bb8dde2b66ad39fc6f0de068cda3ff00adc6ec367bd33a36e5f07f5300c7a63cfabfc998dd2aef59cdc61cfe6f0ce000d8a89523bbff1b8dd92df7feff6fc8e1ff86008e0d79f47f8331bb7575228f00961cfeb70470b4e4d1ff167376bdfbdfba1cfeaf0be0589747ffd719b35be700d5ffb539fc5f1bc0b1368ffe932dfd76cbbd57a7699ea1d882fca7fdc8b146002b4776ffd798b3ebf5ff57e7f07f7500c7ea3cfabfda98dd4a6fcc72550eff00570570accaa3ffab8cd96df4dabf1539fc5f11c061e27dfacefc5f61cc6ead00e7fff21cfe2f0fe0589e47ff971bb3dbe0b57fcd39fc6f0ee030b1364167fe00371bb35be63dff6acae17f530047531efd6f3266b7c2abff8d39fc6f0ce03000b1ce4367fe37825dddf31bf03db04299ef50a50ce270cce57262746f850dcb008ed2e39a39e84383561ffcb94c759df8d0003ed03183c18722a67dfd8b0a03003e7acf6997c9bcc43c9de301fed1fea1c599e3ae93e1049c8313904f6dc07e00dab2cd73a13213be2ed1eb6b12df99a3f3b924c0ee42bd76dbbdab1793423600481f87700dbd24c0daaf6941e58beb6d2c0d380ec38d4a9a12d8bfd4b0cf9d00ad2142b6443d1901758aea8c81f94829f417cb6528940bedc7795fbaafb7a000f560d43645b004bd1f457514e7c89958afa64ee1a3f852e023dd61e0233f9600c95f714e47176558476a65f5e7a0d3ba67743dd3bb16642b0ec7cc50ee31a40017db40f94be9715ddb51e0238571ad36b2350c74b4f6da08485baee844995400682d13fffc911dca97e2b87e1bad03579e5fbeb2aef295297c4510d6c4e295005599c21264b7da805db50ca80e551bb65ba9d84d297613701e68cb76bfc6b500feaa34f38a3c6bf4e6e9f501680d3f6a33c8460a7c19add917b44b7d00b24100fa388457431f607426f862bb826b1356071c87e10a254d09ecaf36ec730d7000a4214eb6c43d6219dcf735d779ef7c572b0c144f81be26a0bcaaa1bc68ff2800d0517b5f0eba114a1e09c807db55cdf53a95cd4f3cefa4c3753b6b02f86af500f29565ab0bb5c047ba2a60d1dd0e328585eef9d8065ea5949da8a73f9161ec001be03d7fa4528e229f5440d99669f627c6dad7e534c4716d57aabba9fcf2950075952fa9f099e81f2558fb7bbed8b2dddf2a804577ffc3807f5e11e23dbe4c00f1a304f697826f959a7d8bb1f6fd8834c4b1cf60a2ff4bf9d3fd7db05206710038e601e53f4150d9517aec37571a2ebb246b5f76c900bb26ee216aff90dab9001ac376ab14bba314bb61fba526ef1f06ee8f49ec0f52bd251ba3c0973106ca007e3494670c6c903e0ee1d741bf744c26f8e2bd0fd7c7ae09380ec3154a9a1200d85f63d8e75ae048439c6c89fbfda3d02f35f13fa4b3fe103e97a80d282fec00cfd1fe14e8a84f5209baa07e691efa7da953edf725603ff269fe8f5296ad2e008c063ed2e1ff2513eda0ca42f71e6c07072be527eaead781ab482f5705ae9700435bb6b6b7087e0b359791585e80d6ad69a85bb366565bfd9a950dd3dad63500b4ae6c591703baee503a628b03610184514fc7e2ca3fdd41d743860b4157a000788dab10f5805fb5c4b4561b013191f95d3a8a4f6299265dc4272bf1294a7c00aa92fe5125feb8127f52893fa5c49f51e2af55e2af57e2cf2af13729f1b72800f1b729f17728f17729f1f728f1f729f1f72bf10f29f18f2af14f28f14f2bf100e795f81794f89795f8d794f83795f87794f8f795f88f94f84f95f82f94f8af0095f8ef94f85f95f83f95f8bf95f87f94f8ff94782ce6c7e9f3160cf6890b46005c7ce262131797b898c445232e775a364b34c362592cd15517cb5e8965aec400b256a23910cb568965aac4b25462192ab1ec541fe62f2b25969112cb46896500a2c4b2506219a82b25db40e62fe3249a54f1975f2ccb3484f9cb2e89e10cb100948158e644dc52455758dc8a445747dca245975cdc76c5df04f1d750dc5ac5002d57dcc2c46d4234d9a28916b711d1ad109fff1807be7f4afe8af2109ff7480033ff1a9ec4fc6b555c9fe29a9cc6fc25bfa633ff131d3399bf54d88dcc5f5a004c2c39269622139fb810cb9489e5cbc4b26662b933b10c9a58ae4e7c4a623e00f397b313cbdc89213831dc283ed72086e5c4d0ce32e60febd4337f284a0c3d0089a909627ac672e64fd3119f1d10d395c4942d316d4d4cdd13d317c5144eb100bcbf98ca2aa6f38a29cd625ab798da2ea6f78b571cc46b1ee25517f1ba8f7800e549bcf6255e7d13afff895720f732ff55d8fdcc7f255abcc22e5e0d17434c0047983f0d400ccd89216a31147a92f9436162a932b13499588a4c2c3d26961a00134b8b89a5c4c4d26162a930b134d883cc5ffa4b2cf52596f6124b7989a5bb00c4525d6269ae4799bff49668e79e607efb2696ce12eddad3cc6fcfc4d257a2001d7b1df3dbaf3730bfdd7a23f3dbab3733bf9d7a2bf3dba7b733bf5d7a27f300dba37733bf1d7a2ff3db9fe798dfee7c80cb0799dfe67c98cb4798dfde7c8c00cbc799dfd67c92f97546b4339fe1f259e6b7319fe3f279e6b72f5fe4f225e600b72d5fe1f255e6b72ba27bf00de6b729dfe2f26de6b727dfe5f23de6b7253f00e0f243e6b7233f66fee32ed186fc8ccbcf99df7efc92cbaf98df76fc86cb6f0099df6efc9ecb1fb8fc91cb9fb8fc99cb5f98df86fc8dcbdfb9fc83f96dc8bf0098df76bcc0fc36e3bfcc6f2b446320da88022e712eddb874e75218cbfc3d8f00b1ccf61a191928e375adad4d6bd7b796b6b694ae6d5bd3ba72fd9a6da55b5600b6ae286dd9dcb4b1794dcb164cbc44deb6fbcaf8c48d1bebb695ae5cd7d8b400b5b4a5adb5b4a5b9b4bea56d5de3264c74b8e0342c9e908907744c5cd7d8d80079ba87643a5a996f4676c6474fc5b1a74e25d1f89ea790684ae214122d3b950044038a4f21d1a0534934fd5412dddfd544ecff937dd038ab2d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +20cd27645f65c15a38720ca984aef936592f3938a705db706d068ad13fc58ae92146f63439ea2a890005e1c9a8a07134e04126c06d79a09c981f49ac701c472200000000000000000000000000000000000000000000000000000000000000011cc15db35c462bf2b8d14998121f5434364db024b7e2bddd0ccd0076cb02dd8801ebc21157ceca1255b54f0a5a4843ef36334372d8e1b0096787a648b464c1af00000000000000000000000000000000000000000000000000000000000048200026000204012700000104804d2600000403260202040126020304001f180003000002804c2d08804c0001240000004524000000b12702000104804d2602020400003a0d00010002270080430400052a0080440000000000000000010000000000000000002b00804500000000000000000000000000000000010000000000000000000000000000000000270080460400402700804704003827008048040004002700804904000e2700804a0400032700804b040100252400001e7a2802000200005189a4170a380102032602040400260206040300380406052c080102001000010501260302040100280202052c0e040500280502052c0e040526020504030000380205042c0d020400280402042c0e04022c0d020400280402042c0e0402002c0d020400280402042c0e04022c0d020400280402042c0e04022c0d02040000280402042c0e04022c0d020400280402042c0e0402260204040023020003000000015d220000019f26020304052c08000500100003002400001ea32c040000002c0d020300280302032c0e030200280202062c0d060526020704020038060700033a0d00030005220000019f28020003007a81a21e0a38010305260203010100260206000626020704012602080000260209040626020a010026020b04022300020005000001dd22000006e12c08010c26020d04040010010d0126030c04010000280c020d1f2c0007804a000d2c0d0c0d00280d020d2c0e0d0c2c08010d0000000102012c0e0c0d2c08010c00000102012c0e040c26020f04102c0800102c000c0d112c0c0c122c0c06130010000f002400001ec52c0400002c0c110e2602001004112c0800112c0c0d122c0c0c132c0c061400100010002400001ec52c040000002c0c120f26021104122c0800122c0c0d132c0c0c140010001100240000001fa52c0400002c0c1310002810020d00380d04112c0d110c1c0c0c0d002b0200001000000000000000000000000000ffffffffffffffffffffffffffffffff00ffffffff0e380d101123020011000002df24000020202c08010d260210040300001001100126030d040100280d02102c0c10112c0e0e1100281102112c0e0f00112c08010e26020f04070010010f0126030e040100280e020f2c0c0f102c0e00081000281002102c0e081000281002102c0e081000281002102c0e08100028001002102c0e081000281002102c0e08102c08010f00000102012c0e0e0f2c0800010e260210040a001001100126030e040100280e02102c0c10112c0e08110000281102112c0e081100281102112c0e031100281102112c0e08110028110211002c0e081100281102112c0e031100281102112c0e081100281102112c0e08110000281102112c0e03112c08011000000102012c0e0e102b02000e00083e791100d835097629f0067531fc15cafd79a89beecb39903f69572c636f4a5a2b02000011001a7f5efaad7f315c25a918f30cc8d7333fccab7ad7c90f14de81bcc52800f9935d2b02001200054aa86a73cb8a34525e5bbed6e43ba1198e860f5f395000268f71df4591bde4022b02001300209dcfbf2cfb57f9f6046f44d71ac6faf8007254afc7407c04eb621a6287cac1262c0801142602150407001001150126030014040100281402152c0c15162c0e0e1600281602162c0e111600281602162c000e0a1600281602162c0e121600281602162c0e131600281602162c0e0a162c000c040522000004c10c38050b0e2302000e00001c1822000004d32c0d0f052600020d000226021104060d3080480011001223020012000004f624000020322d0004000580032700800404000724000020442d088005000e00280e02110128000011804800122c0e0d1226020d04060d308043000d001123020011000005392400000020322d04000e80032700800404000724000020442d088005000500280500020d0128000d804300112c0e08112c0e050f2c0d100d2b02000e002df8b94000e5890e4e1377e05373fae69a1d754f6935e6a780b666947431f2cdcd2602110004090c3809111223020012000005a624000020322d04000d8003270080040400000a24000020442d088005000f00280f021100381109122c0e0e122b02000d00002ecd88d15967bc53b885912e0d16866154acb6aac2d3f85e27ca7eefb2c100908326020e040726021204090c380e1213230200130000060d24000020322d0004000f80032700800404000a24000020442d08800500110028110212003812000e132c0e0d1326020d040826020f04090c380d0f12230200120000064f2400000020322d04001180032700800404000a24000020442d088005000e00280e02000f00380f0d122c0e0a122c0e0e102c08010d26020f04040010010f0126030d00040100280e020f26021004090028050211260212040600280d021342f7000f0000110013001000280d020e00380e040f2c0d0f05370c000c0005002802020d002c0d0d0c26020e040200380d0e053a0d0005000c22000006e128020005003200b6bd200a3801050c2302000c000006fc22000008052c08010526020c0403000010010c012603050401002805020c1f3c0007000b000c2c0d050c00280c020c002c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e04052600020e040f2c08000f2c0c0c102c0c05110010000e0024000020d22c0400002c000c100d00280d020f00380f04102c0d100e26020f04102c0800102c0c0c112c000c05120010000f0024000020d22c0400002c0c110d00280d020c00380c040f002c0d0f051c0c050c002b02000d00000000000000000000000000ffffffffff00ffffffffffffffffffffffffffffff0e380c0d0f2302000f000007e1240000002020370c0005000e002802020d2c0d0d0c26020e040200380d0e053a0d000500000c220000080528020005008a4870ec0a3801050c2302000c000008202200000008b02c08010526020c04020010010c012603050401002805020c1f3c0007000007000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c0008010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05112c0c0006120010000e00240000214d2c0400002c0c100d3302000d002802020d2c0d000d0c26020e040200380d0e053a0d0005000c22000008b02802000500cd8c9a007a0a3801050c2302000c000008cb22000009d32c08010526020c0402001001000c012603050401002805020c1f3c00070007000c2c0d050c00280c020c2c0e000c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e00040f2c08000f2c0c0c102c0c05110010000e00240000222d2c0400002c0c10000d26020c040e2c08000e2c0c0d0f0010000c0024000022a82c0400002c0c0f00051e02000c060a380c050d2302000d0000096f26020e04003b09010e1c0c05000c0026020d040126020f040300380d0f0e2c0801050010010e01260305040100002805020e2c0e0d0e00280e020e2c0e0d0e26020e04030038050e0d2c0c0d000e2c0e0c0e002805020e2c0d0e0d26020f040200380e0f0c3a0d000c000d2200000009d32802000500f99f5a2d0a3801050c260205026f26020d026526020e00022026020f0272260210026c26021102772302000c00000a0c2200000cf62c0008011226021304020010011301260312040100281202131f3c000700070013002c0d121300281302132c0e13122c08011300000102012c0e12132c0801120000000102012c0e041226021504162c0800162c0c13172c0c12182c0c0619001000001500240000214d2c0400002c0c1714260213040126021604030038131615002c0801120010011501260312040100281202152c0e131500281502152c0e130015260215040300381215132c0c13152c0e141500281202152c0d15142602160004020038151613360d00130014260212000a2602130014260214001e260216000403260218040300381618172c080115001001170126031504010028150217002c0e161700281702172c0e1617260217040300381517162c0c16172c0e12170000281702172c0e131700281702172c0e141700281502142c0d14132602160400020038141612360d0012001326021202642602130248260214022c2602150200212c080116260217040e0010011701260316040100281602172c0c17182c0e00131800281802182c0e0d1800281802182c0e101800281802182c0e10180028001802182c0e051800281802182c0e141800281802182c0e0e1800281802182c000e111800281802182c0e051800281802182c0e0f1800281802182c0e10180000281802182c0e121800281802182c0e15182c080112260213040e00100113010026031204010028120213260214040d00381413142c0c13150c38151417160c0017172302001700000c342c0e081500281502152200000c152c0801130000010002012c0e1213260212040d2c0c040c2200000c4f0c380c1214230200140000001b9b2200000c612c0d130c260215040d062815021326021704030038151716002c0801140010011601260314040100281402162c0e151600281602162c0e1500162602170403003814171600280c02172d04001780032d04001680042d04000015800524000022d400281402162c0d16152602170402003816170c360d000c00001500280202142c0d14122602150402003814150c3a0d000c00122200000c00f62802000c0097b974f70a38010c122302001200000d11220000158c2c0801001226021304070010011301260312040100281202131f3c0007000900132c0d00121300281302132c0e13122c08011300000102012c0e12132c0801120000010002012c0e041226021504162c0800162c0c13172c0c1218001000150024000000231a2c0400002c0c1714002814021600381604172c0d17152c0d13142c0d12001626021804060c381618192302001900000da8240000203200281402180038001816192c0d191700381607180e381618192302001900000dcd24000023952600021a04060c38181a1b2302001b00000de42400002032002814021a00381a18001b2c0d1b190038160b180e3816181a2302001a00000e0924000023952c0e1400132c0e18121c0c1714051c0c140b001c0c1916051c0c16140026021704182c000800182c0c13192c0c121a2c0c061b001000170024000023a72c0400002c0c00191626021804192c0800192c0c131a2c0c121b2c0c061c00100018002400000023a72c0400002c0c1a17260219041a2c08001a2c0c131b2c0c121c001000190000240000231a2c0400002c0c1b18002818021300381304192c0d19121c0c120013002b02001800000000000000000000000000ffffffffffffffffffffffff00ffffffffffffffff0e381318192302001900000ee024000020202c0801130000000102012c0e0a132c08011800000102012c0e08182c08011900000102012600021a007f2c0e1a192c08011a000001020126021c041d2c08001d2c0c151e000010001c0024000024872c0400002c0c1e1b2c0d1b1500281502152c0e151b05002800148044001500380b1514260215041c2c08001c2c0c141d00100015002400000024872c0400002c0c1d0b2c0d0b1400281402142c0e140b26021402002600021502bc26021c026a26021d029b26021e02d32c08011f260220044500100100200126031f040100281f02202c0c20212c0e152100282102212c0e1c210028002102212c0e1d2100282102212c0e1e2100282102212c0e142100282102212c000e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210221002c0e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210200212c0e142100282102212c0e142100282102212c0e142100282102212c0e14002100282102212c0e142100282102212c0e142100282102212c0e14210028210002212c0e142100282102212c0e142100282102212c0e142100282102212c0e00142100282102212c0e142100282102212c0e142100282102212c0e14210028002102212c0e142100282102212c0e142100282102212c0e142100282102212c000e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210221002c0e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210200212c0e142100282102212c0e142100282102212c0e142100282102212c0e14002100282102212c0e142100282102212c0e142100282102212c0e14210028210002212c0e142100282102212c0e142100282102212c0e142100282102212c0e00142100282102212c0e142100282102212c0e142100282102212c0e14210028002102212c0e142100282102212c0e142100282102212c0e142100282102212c000e14212c0e1f1a260214042026021504242c0c040c22000012250c380c141c002302001c00001a9022000012372c0d1a0b2802000c045be0cd19280200140400bb67ae8528020015043c6ef3722802001a04a54ff53a2802001b04510e527f002802001c049b05688c2802001d041f83d9ab2802001e046a09e6672c08011f002602200409001001200126031f040100281f02202c0c20212c0e1e210028210002212c0e142100282102212c0e152100282102212c0e1a2100282102212c0e001b2100282102212c0e1c2100282102212c0e1d2100282102212c0e0c212c0800010c00000102012c0e1f0c2c0801140000010201260215044426021c04202c000800202c0c0b212c0c15222c0c04230010001c0024000024cd2c0400002c0c00211a2c0c221b2c0d1a1c00281c021c2c0e1c1a2c0e1b140b28001b8046001c002302001c0000134e220000138e2c08011b26021c04090010011c0126031b04000100281a021c00281f021d00281b021e3f3f001e001d001c2c0d1b1a00281a00021a2c0e1a1b2c0e1b0c220000138e26021c041d2c08001d2c0c0b1e2c0c15001f2d08804600200010001c0024000024cd2c0400002c0c1e1a2c0c1f1b2c0d001a0b00280b020b2c0e0b1a2c0e1b140b28001b8046000b2302000b000013e10022000013ea2c0e041422000013ea2c0d140b26021b008626021d041e2c0800001e2c0c1a1f2c0c0b202c0c0b212c0c1b220010001d0024000027bb2c040000002c0c1f1c2c0d1c1a00281a021a2c0e1a1c00380b071a0e380b1a1b2302001b000000144224000023952c0e1a142c0d1c0b00280b020b2c0e0b1c0d30804700001a000b2302000b0000146822000014b02c0d0c0b2c08011a26021b0409001000011b0126031a040100281c021b00280b021d00281a021e3f3f001e001d001b002c0d1a0b00280b020b2c0e0b1a2c0e1a0c2c0e041422000014b02c0d140b2600021a041d2c08001d2c0c1c1e2c0c0b1f2c0c15200010001a0024000028d32c000400002c0c1e142c0d140b00280b020b2c0e0b142c0d0c0b260215041a2c0800001a2c0c141b2c0c0b1c00100015002400002d972c0400002c0c1b0c2c0d0c000b00280b020b2c0e0b0c260214041a2c08001a2c0c0c1b0010001400240000002fbf2c0400002c0c1b0b26020c041a2c08001a2c0c131b2c0c181c2c0c191d002c0c0b1e2c0c161f2c0c12202c0c17210010000c00240000312e2c0400000000280202122c0d120c2602130402003812130b3a0d000b000c220000158c280200000b009756f6200a38010b0c2302000c000015a7220000174d2c08010b2602000c04050010010c0126030b040100280b020c1f2c00078048000c2c0d0b0c0000280c020c2c0e0c0b2c08010c00000102012c0e0b0c2c08010b00000102012c000e040b26021304142c0800142c0c0c152c0c0b162c0c06170010001300240000003db02c0400002c0c151226021404152c0800152c0c0c162c0c0b172c0c06001800100014002400003db02c0400002c0c161326021504162c0800162c0c0c00172c0c0b1800100015002400003e902c0400002c0c171400281402160038160004172c0d17151c0c1514002b02001600000000000000000000000000ffffff00ffffffffffffffffffffffffffffffffff0e3814161723020017000016a924000000202026021604172c0800172c0c0c182c0c0b192c0c061a0010001600240000003db02c0400002c0c18142c08010b00000102012c0e0a0b2c08010c0000000102012c0e080c2c0801080000010201260216004a2c0e160826021604172c000800172c0c0b182c0c0c192c0c081a2c0c121b2c0c131c2c0c151d2c0c141e000010001600240000312e2c040000002802020c2c0d0c0b260212040200380c0012083a0d0008000b220000174d2802000800eb2b616b0a3801080b2302000b0000001768220000195c2c0801012602080407001001080126030104010028010002081f3c0007000900082c0d010700280702072c0e07012c0801070000010200012c0e01072c08010100000102012c0e040126020904122c0800122c0c0713002c0c01142c0c0615001000090024000023a72c0400002c0c130826020b0412002c0800122c0c07132c0c01142c0c06150010000b0024000023a72c0400002c000c130926020c04122c0800122c0c07132c0c01142c0c06150010000c002400000023a72c0400002c0c130b26021204132c0800132c0c07142c0c0115001000001200240000231a2c0400002c0c140c26021304142c0800142c0c0c1500100000130024000022a82c0400002c0c151226021304142c0800142c0c07152c0c0100162c0c0617001000130024000023a72c0400002c0c150c26021404152c080000152c0c07162c0c01172c0c0618001000140024000023a72c0400002c0c1613001e020001030a3801080623020006000018cb2400003f0b1e020001040a380100090623020006000018e22400003f1d1e020001050a38010b062302000600000018f92400003f2f1e020001060a3801120623020006000019102400003f411e00020001080a38010c0623020006000019272400003f531e020001070a3801130006230200060000193e2400003f6500280202072c0d070626020804020038070008013a0d00010006220000195c260201026e2602020274260206026326020700026b260208027326020902552c08010b26020c04110010010c0126030b04010000280b020c2c0c0c122c0e091200281202122c0e011200281202122c0e07120000281202122c0e011200281202122c0e051200281202122c0e11120028120200122c0e011200281202122c0e0e1200281202122c0e081200281202122c0e0d001200281202122c0e101200281202122c0e0d1200281202122c0e06120028120002122c0e021200281202122c0e051200281202122c0e0f120a380a0301230200000100001a8f26020204122c080105260206041200100106012c0c0506290300000605e58f985907316290002806020600280b020726020804102d0400078000032d04000680042d040008800524000022d4260207041000380607062c0e04000600280602063b0d0502252c0d1a1c0128000c8048001d0e380c1d1e230200001e00001aae240000239526021f04200c380c1f202302002000001ac524000000203200281b021f00381f0c202c0d201e26022004440c381d2021230200210000001aea24000020322d04001c80032700800404004524000020442d08800500001f00281f02200038201d212c0e1e2100380c151c0e380c1c1d2302001d0000001b27240000239526021e04200c380c1e202302002000001b3e24000020320000280b021e00381e0c202c0d201d26022004440c381c20212302002100001b630024000020322d04001f80032700800404004524000020442d088005001e0028001e02200038201c212c0e1d212c0e1e1a00380c071c2c0c1c0c22000012252c000d1314260217040d0c380c17182302001800001bb624000020320028160217000038170c182c0d18151c0c151700260218040d0c380c18192302001900001b00e024000020322d04001480032700800404000e24000020442d08800500150000281502180038180c192c0e17192c0e151300380c07142c0c140c2200000c4f002c0d0f0e26021204020c380512132302001300001c33240000203200280d02001200381205132c0d13111c0c1113051c0c13120002381112130928001380440000151c0c1516051c0c161300023815131609280016804400150528001380440000160038161213053080450015001200381312160a38111612230200120000001c9f26021704003b0901170438050b1126021604060c38111617230200170000001cbb24000020322d04000e80032700800404000724000020442d088005000012002812021600381611172c0e1317003811070e26021304060c380e1316230002001600001cfd24000020322d04001280032700800404000724000020442d00088005001100281102130038130e162c0e15162c0e110f2c0d100e0528000500804a001126021304060c381113152302001500001d4a240000203200281402001300381311152c0d1512003811071326021604060c38131617230200170000001d742400002032002814021600381613172c0d17150038110b162602180406000c381618192302001900001d9e2400002032002814021800381816192c0d19001726021804090c381118192302001900001dc324000020322d04000e8003270000800404000a24000020442d0880050016002816021800381811192c0e12190026021104090c381311122302001200001e0024000020322d0400168003270000800404000a24000020442d088005000e00280e021100381113122c0e151200003813071126021304090c381113152302001500001e4224000020322d04000e0080032700800404000a24000020442d0880050012002812021300381311152c000e17152c0e1210003805070e2c0c0e0522000004c1270080040478000d00000000800480032300800300001ea22901000105f7a1f3afa5add4ca3b01010225002400001e7a1e020001011e020002000a380102032302000300001ec4240000003f77252400001e7a26020604072c0800072c0c01082c0c02090010000600240000001fa52c0400002c0c080526020100060a38030102260201040000280502000700380701082c0d08062302000200001f972200001f1726020100080a38030001022302000200001f522200001f2e260201001b0a38030102230200020000001f4926020504003b0901052c0c06042200001fa01c0c0601002b0200020000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000e380102032302000300001f8e24000020202c0c06042200001fa02c0c0604002200001fa02c0c0401252400001e7a2c0d01032c0d020426020604030c38040006072302000700001fc92400002032002803020600380604072c0d07052c0800010626020704020010010701260306040100280602072c0c07082c0e050826000205040100380405070e38040708230200080000201324000023952c0e0301002c0e07022c0c06012529010001055a02e41bb51ea99f3b01010225290100010005e89d09fea1112d0e3b010102252d01800380060b0080060002800723008000070000205f220000206a2d008003800522000020d12d000001800501000001008004000101008003800480092d008003800a2d008005800b0b00800a800980000c2300800c000020bd2d01800a80082d028008800b0100800a0002800a010000800b0002800b220000208c27018005040001030080060002800622000020d100252400001e7a2c0d01032c0d020426020604020c380406072302000700002000f62400002032002803020600380604072c0d07052c0801062602070402001000010701260306040100280602072c0c07082c0e050826020504010038040507000e38040708230200080000214024000023952c0e03012c0e07022c0c060125002400001e7a26020604072c0800072c0c01082c0c0209001000060024000022002d2c0400002c0c080526020100060a38030102260201040000280502070038000701082c0d0806230200020000221f220000219f26020100080a380301022300020002000021da22000021b6260201001b0a3803010223020002000021d12600020504003b0901052c0c060422000022281c0c0601002b0200020000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e3801000203230200030000221624000020202c0c060422000022282c0c06042200000022282c0c0401252400001e7a2c0d01032c0d020426020604010c380406072300020007000022512400002032002803020600380604072c0d07052c0801062600020704020010010701260306040100280602072c0c07082c0e050826020504000100380405070e38040708230200080000229b24000023952c0e03012c0e0700022c0c0601252400001e7a2602020400002801020400380402052c0d05031c000c0302051c0c0201001c0c0102052c0c02012501008003800580072d0080030080082d00800480090b0080088007800a2300800a000023192d01800880062d0002800680090100800800028008010080090002800922000022e8252400001e007a2c0d01032c0d020426020604060c38040607230200070000233e240000200032002803020600380604072c0d07052c0801062602070402001001070126030006040100280602072c0c07082c0e0508260205040100380405070e3804070800230200080000238824000023952c0e03012c0e07022c0c06012529010001050045a7ca711941e4153b010102252400001e7a26020604072c0800072c0c0108002c0c02090010000600240000231a2c0400002c0c080526020100060a38030100022602010400002805020700380701082c0d080623020002000024792200000023f926020100080a3803010223020002000024342200002410260201001b0a0038030102230200020000242b26020504003b0901052c0c060422000024821c000c0601002b02000200000000000000000000000000ffffffffffffffffffff00ffffffffffffffffffff0e38010203230200030000247024000020202c0c06000422000024822c0c060422000024822c0c0401252400001e7a26020301002c00080102260204042100100104012603020401002802020426020504204303b0000001804b0005000300042c0d020100280102012c0e01022c0c020125240000001e7a26020504002c080106260207041100100107012603060401002806020700260208041000380807082c0c07090c3809080a160c0a0a2302000a0000251c002c0e0509002809020922000024fd2c08010700000102012c0e06070128000300804600060e38030608230200080000254324000023950c3802060823020008000000256022000025552d088046000422000025a40c38020308230200080000002592220000257202380203080e3803020923020009000025892400003f892c000c0806220000259b2c0c0506220000259b2c0c060422000025a40728000480004800022c08010600000102012c0e02062602090404063804090a04380a090b000238040b080a380805092602080401230200090000260422000025e40038020008090e3802090a2302000a000025fb24000023952c0e090622000026042c0d000609260206020026020a02012c0c0502220000261b0c3802090b2302000b0000002636220000262d2c0d07012c0c0402252c08010c00000102012c0e050c05002800028048000d26020f04000b28000f8048000e2302000e0000267a072800000d804800110a38110210230200100000267a2400003f9b2c0c050b2200002600830d28000b8048000e2302000e000026ef22000026982c0d070b2c0d0c0d2600020e04100c38020e0f2302000f000026b724000020322d04000b8003270080000404001124000020442d088005000c00280c020e00380e020f2c0e0d0f00380002080b2c0e0c072c0c0b02220000261b00380d0b0f0e380d0f1023020010000000270624000023950c380f0410230200100000272122000027182c0c060e2200000027660038030f100e38031011230200110000273824000023952602110400440c38101112230200120000274f2400002032002801021100381110122c0d00120f2c0c0f0e22000027662c0d0c0f26021104122c0800122c0c0f132c0c0a001400100011002400003fad2c0400002c0c13101c0c0e0f040038100f0e0e3800100e1123020011000027a924000023952c0e0e0c00380b080e2c0c0e0b2200000026832400001e7a2c0d010600280602062c0e060107280002804800062602000704100c3806070823020008000027ec240000203200280102070038070608002c0d080226020700650a380407082602070280230200080000286122000028001626020800860a38040809230200090000283126020a04003b09010a2602080004092c0800092c0c020a2c0c030b2c0c070c001000080024000040342c040000002c0c0a042c0c0405220000289126020804092c0800092c0c020a2c0c030b002c0c070c001000080024000040342c0400002c0c0a042c0c040522000028910026020304100c3806030423020004000028a824000020322d0400018003270000800404001124000020442d0880050002002802020300380306042c0e05042c000c0201252400001e7a2c0d010400280402042c0e04012c0801040000010201002c0e01042c08010500000102012c0e020526020704040638020708043808070009023802090626020704000a380607082302000800002a3f220000292a07280000028048000803308048000600090f2800068048000a2302000a0000294f240000003f8926020a04100c38080a0b2302000b00002966240000203200280102000a00380a080b2c0d0b061c0c090b021c0c0b0a041c0c0a0b0226020a02080400380a0b0c26020e02000a380e0b0d2302000d000029b606380c0b100a38100a000f2302000f000029b62400003f9b1a38060c0a26020c040d2c08000d2c0c0a000e2c0c0b0f0010000c002400003fad2c0400002c0c0e0626020b04100c3808000b0c2302000c000029f524000020322d0400018003270080040400112400000020442d088005000a00280a020b00380b080c2c0e060c2c0e0a040038020901000e380201062302000600002a3624000023952c0e01052200002a3f2c0d050200072800028048000526020204012c0c05012200002a590d28000180490005230002000500002d442200002a6e2602050408043805030626020904000a38090300082302000800002aa1063806030b0a380b050a2302000a00002aa12400003f009b1c0c06030026020601002c08010526020804090010010801260305040100002805020826020904084303b00003804b00090006000826020304022602060200012c0c07012200002ae80c380103072302000700002aff2200002afa2c0d04000125052800018048000726020904000b280009804800082302000800002b3600072800078048000b0a380b010a2302000a00002b362400003f9b2c0d04080100308049000100090f3080490009000a2302000a00002b57240000239526020b0004080c38070b0c2302000c00002b6e2400002032002805020b00380b070c2c000d0c0a003807020b0e38070b0c2302000c00002b93240000239526020d0408000c380b0d0e2302000e00002baa2400002032002805020d00380d0b0e2c0d0e000c003807030b0e38070b0d2302000d00002bcf240000239526020e04080c38000b0e0f2302000f00002be62400002032002805020e00380e0b0f2c0d0f0d0100280007804a000b0e38070b0e2302000e00002c0e240000239526020e04080c00380b0e0f2302000f00002c252400002032002805020e00380e0b0f2c0d0f07001c0c0a0b0426020e040f2c08000f2c0c0b102c0c06110010000e002400003f00ad2c0400002c0c100a1c0c0c0b0400380a0b0c0e380a0c0e2302000e00002c0077240000239526020b040e2c08000e2c0c0c0f2c0c06100010000b00240000003fad2c0400002c0c0f0a1c0c0d0b0400380a0b0c0e380a0c0d2302000d0000002cb6240000239526020b040d2c08000d2c0c0c0e2c0c060f0010000b00240000003fad2c0400002c0c0e0a1c0c070b0400380a0b070e380a070c2302000c0000002cf5240000239526020b04100c38090b0c2302000c00002d0c2400002032002d04000880032700800404001124000020442d088005000a00280a020b0038000b090c2c0e070c2c0e0a0400380102072c0c07012200002ae82c0d04052602000804100c380108092302000900002d5f24000020322d0400058003270080040004001124000020442d0880050006002806020800380801092c0e07090038010002052c0e06042c0c05012200002a592400001e7a2c0d020400280402042c0e0004022c080104000001020126020502002c080106260207042100100107012600030604010028060207260208042000380807082c0c07090c3809080a160c0a000a2302000a00002dfc2c0e050900280902092200002ddd2c0801050000010200012c0e06052c080106260207040900100107012603060401002801020700280002020800280602093f3f0009000800072c0d060100280102012c0e01062c0e0006042602010400260202040126020604082c0c01032200002e5c0c38030607002302000700002e732200002e6e2c0d0501252c0d040826020a04080c38030a000b2302000b00002e8e2400002032002808020a00380a030b2c0d0b091c0c0900080026020a01002c08010926020b04050010010b012603090401002809020b0026020c04044303b00008804b000c000a000b053080480003000826020b0400000a380b030a2302000a00002f04063808030d0b28000d8048000c2302000c0000002f042400003f9b2c0c01072200002f0d0d2800078048000a2302000a0000002f302200002f2200380302072c0c07032200002e5c2c0d050a003808070b0e0038080b0c2302000c00002f4b240000239526020d04040c38070d0e2302000e0000002f622400002032002809020d00380d070e2c0d0e0c26020e04200c380b000e0f2302000f00002f8724000020322d04000a8003270080040400212400000020442d088005000d00280d020e00380e0b0f2c0e0c0f2c0e0d05003807020a002c0c0a072200002f0d2400001e7a2c080103000001020126020400012c0e0400032c080104000001020126020500002c0e05042c08010600000102012c0e0500062602050401260207041e260208040f2702000900010026020a04002c0c0a000222000030190c3802080a2302000a00003067220000302b2c0d060200280100020700380708092c0d09051c0c0501002c0d0305043801050300380203012c000e01062c0d0402043802050300380103022c0c0201252c0d060a023807020b000e3802070c2302000c000030822400003f8926020d04200c380b0d0e230200000e000030992400002032002801020d00380d0b0e2c0d0e0c1c0c0c0b002c0d00030c04380b0c0d00380a0d0b2c0e0b0604380c090a2c0e0a032c0d040b03300080490002000c0f2800028049000d2302000d000030e82400003f8926020e0400200c380c0e0f2302000f000030ff2400002032002801020e00380e0c0f2c0d000f0d1c0c0d0c0004380c0a0d00380b0d0a2c0e0a04003802050a2c0c0a022200000030192400001e7a26020900142c08010a26020b04030010010b0126030a00040100280a020b2c0c0b0c2c0e090c00280c020c2c0e050c2a02000900000000000000000002000000000000000026020f04102c0800102c0c09110010000f000024000041442c0400002c0c110b2c0c120c2c0c130d2c0c140e2c0d0b090000280902092c0e090b2c08010900000102012c0e0b092c0d0c0b00280b020b2c000e0b0c2c08010b00000102012c0e0c0b2c08010c00000102012c0e0d0c2c0800010d00000102012c0e0e0d26020e040126020f040026021004022c0c0f082200000032070c380810012302000100003d40220000321926020304102c080010002c0c09112c0c0b122c0c0c132c0c0d14001000030024000041eb2c0400002c000c11021e020003031e020008001e0200090426020a02002c08010b26020c0400e10010010c0126030b040100280b020c26020d04e000380d0c0d2c0c0c100c0038100d11160c1111230200110000329d2c0e0a100028100210220000327e2c0008010a00000102012c0e0b0a26020c04102c0800102c0c06110010000c002400000024872c0400002c0c110b2c0d0b0600280602062c0e060b26020c04102c000800102c0c03110010000c0024000024872c0400002c0c11062c0d06030028000302032c0e030626020c04102c0800102c0c08110010000c0024000024872c000400002c0c11032c0d030800280802082c0e080326020c04102c0800102c0c0009110010000c0024000024872c0400002c0c11082c0d080900280902092c0e00090826020c04102c0800102c0c04110010000c0024000024872c0400002c0c0011092c0d090400280402042c0e040926020c04102c0800102c0c0211001000000c0024000024872c0400002c0c11042c0d040200280202022c0e020426020c0004102c0800102c0c07110010000c0024000024872c0400002c0c11022c0d02000c00280c020c2c0e0c0226020c04a026020d0480260210042026021104c02600021204602c0c0f0122000034000c3801101323020013000039ef2200003412002c0d0a022c080103260204041100100104012603030401002803020426020600041000380604062c0c04080c38080609160c0909230200090000345b2c0e0f00080028080208220000343c2c08010400000102012c0e030428020003049b0500688c28020006043c6ef37228020008045be0cd192802000904510e527f280200000a04bb67ae852802000b041f83d9ab2802000c04a54ff53a2802000d046a0009e6672c08011026021204090010011201260310040100281002122c0c1213002c0e0d1300281302132c0e0a1300281302132c0e061300281302132c0e0c130000281302132c0e091300281302132c0e031300281302132c0e0b130028130200132c0e08132c08010300000102012c0e10032c08010600000102012c0e0f060026020804e02c0c0f0122000035370d280001804a000923020009000038d122000000354c26020a04122c0800122c0c02132c0c08142c0c11150010000a0024000000426f2c0400002c0c13012c0c14092c0d010200280202022c0e02012c0e0001042c0e09060b2800098046000223020002000035a122000035aa2c0e0f060022000035aa2c0d0602260209006526020b04102c0800102c0c01112c0c0212002c0c02132c0c09140010000b0024000027bb2c0400002c0c110a2c0d0a010000280102012c0e010a2c0e0a040038020e010e3802010923020009000036062400000023952c0e01062c0d0a0200280202022c0e020a0d3080470001000223020000020000362c22000036742c0d03012c0801022602090409001001090126030002040100280a0209002801020b002802020c3f3f000c000b00092c0d02010000280102012c0e01022c0e02032c0e0f0622000036742c0d060226020904102c000800102c0c0a112c0c02122c0c0813001000090024000028d32c0400002c0c0011062c0d060200280202022c0e02062c0e06042c0d030226020404102c080000102c0c06112c0c021200100004002400002d972c0400002c0c11032c0d03020000280202022c0e020326020404102c0800102c0c031100100004002400002f00bf2c0400002c0c110226020300052c0801042602060404001001060126030400040100280402062c0c06082c0e030800280802082c0e020800280802082c0e0005082c0d040300280302032c0e03042a02000300000000000000000300000000000000000026020a04102c0800102c0c03110010000a0024000041442c040000002c0c11052c0c12062c0c13082c0c14092c0d050300280302032c0e03052c0008010300000102012c0e05032c0d060500280502052c0e05062c0801050000000102012c0e06052c08010600000102012c0e08062c08010800000102012c0e0009082c0c0f0122000037de0d280001804a000923020009000038612200003700f326020404092c0800092c0c030a2c0c050b2c0c060c2c0c080d00100004000024000041eb2c0400002c0c0a011e0200030032380001000300042602030100000a380403052302000500003842240000455d3438000200070003260202010100230200030000385c240000456f3302000125230200090000386e22000038c30026020a04030c38010a0b2302000b000038852400002032002804020a00380a00010b2c0d0b0926020a040f2c08000f2c0c03102c0c05112c0c06122c0c0813002c0c09140010000a0024000045812c04000022000038c30038010e092c0c09000122000037de053080460001000926020b04000a380b010a2302000a0000390005063809010d0b28000d8046000c2302000c000039052400003f9b26020c0400122c0800122c0c02132c0c08142c0c09150010000c00240000426f2c040000002c0c130a2c0c140b2c0d0a0c00280c020c2c0e0c0a0c3809080c2302000c000000394f22000039652c0d0a0900280902092c0e090a2c0e0a042200003965230002000c00003972220000397b2c0e0b06220000397b2c0d06090b280009804600000a04380c0a09230200090000399922000039e12c0d04092c0d030a2c0801000b26020c04090010010c0126030b0401002809020c00280a020d00280b0210003f3f0010000d000c2c0d0b0900280902092c0e090b2c0e0b0322000039e1000038010e092c0c090122000035372c0d0a1326021504200c38011516230200160000003a0a240000203200280b021500381501162c0d161426021604e00c38010016172302001700003a2f24000020322d0400138003270080040400e12400000020442d0880050015002815021600381601172c0e141700380110130e38011300142302001400003a6c240000239526021604200c380116172302001700003a00832400002032002806021600381601172c0d171426021704e00c38131718230002001800003aa824000020322d0400158003270080040400e124000020442d000880050016002816021700381713182c0e141801280001804600130e38011300142302001400003ae8240000239526021504200c380115172302001700003a00ff2400002032002803021500381501172c0d171426021704e00c38131718230002001800003b2424000020322d0400168003270080040400e124000020442d000880050015002815021700381713182c0e141800380112130e38011314230200001400003b61240000239526021604200c380116172302001700003b78240000002032002808021600381601172c0d171426021704e00c38131718230200180000003b9d24000020322d0400158003270080040400e124000020442d088005000016002816021700381713182c0e14180038010d130e38011314230200140000003bda240000239526021504200c380115172302001700003bf1240000203200002809021500381501172c0d171426021704e00c381317182302001800003c001624000020322d0400168003270080040400e124000020442d088005001500002815021700381713182c0e14180038010c130e380113142302001400003c5300240000239526021604200c380116172302001700003c6a240000203200280400021600381601172c0d171426021704e00c381317182302001800003c8f2400000020322d0400158003270080040400e124000020442d088005001600281602001700381713182c0e141800380111130e380113142302001400003ccc24000000239526021504200c380115172302001700003ce3240000203200280202150000381501172c0d171426021704e00c381317182302001800003d082400002032002d0400168003270080040400e124000020442d088005001500281502170038001713182c0e14182c0e150a0038010e132c0c13012200003400230200010000003d4d2200003da226020204020c380802032302000300003d6424000020320000280a020200380208032c0d030126020204112c0800112c0c09122c0c0b132c000c0c142c0c0d152c0c0116001000020024000045812c0400002200003da2000038080e012c0c010822000032072400001e7a26020604072c0800072c0c0108002c0c020900100006002400003e902c0400002c0c080526020100060a38030100022602010400002805020700380701082c0d08062302000200003e82220000003e0226020100080a380301022302000200003e3d2200003e19260201001b0a00380301022302000200003e3426020504003b0901052c0c06042200003e8b1c000c0601002b02000200000000000000000000000000ffffffffffffffffffff00ffffffffffffffffffff0e380102032302000300003e7924000020202c0c0600042200003e8b2c0c06042200003e8b2c0c0401252400001e7a2c0d01032c0d00020426020604040c380406072302000700003eb4240000203200280302060000380604072c0d07052c0801062602070402001001070126030604010028060200072c0c07082c0e0508260205040100380405070e380407082302000800003e00fe24000023952c0e03012c0e07022c0c0601252901000105be11c73bbb04a400fc3b0101022529010001057425c86e086b03c13b010102252901000105e3b100cb17b4b196ae3b010102252901000105203960faa7b733883b0101022529010000010597178cf85aace5563b0101022529010001053b7ee0a2f674688e3b0100010225290100010565a49ce5d4594d753b010102252901000105288692b04700dcfd433b010102252901000105646188a8c6cf94cb3b010102252400001e7a0026020404000a3801040523020005000040262200003fc9260204020804380400020526020702000a380702062302000600003ffc06380502090a38090408230002000800003ffc2400003f9b183801050226020102200c38050104260201010001230200040000401d24000046b02c0c0203220000402f2c0c040322000040002f2c0c0301252400001e7a26020504040638020506043806050702380207040003308048000400020f28000480480005230200050000406a2400003f891c0c000206021c0c0605041c0c0502022602050208043805020626020802000a380800020723020007000040ac063806020a0a380a050923020009000040ac240000003f9b1a3801060526020604072c0800072c0c05082c0c02090010000600240000003fad2c0400002c0c08011c0c0302040330804a000400030f280004804a00000523020005000040f62400003f891c0c0305021c0c0504041c0c0403022602000504062c0800062c0c02072c0c030800100005002400003fad2c0400002c0c00070400380104020e38010203230200030000413f24000023952c0c020125240000001e7a26020200002c0801032602040404001001040126030304010028030002042c0c04052c0e020500280502052c0e020500280502052c0e02052c0d03000400280402042c0e04032c0801042602050405001001050126030404010028000402052c0c05062c0e020600280602062c0e020600280602062c0e02060028000602062c0e0106260201040026020201002c0c02052c0c01062c0c04022c0c0005042c0c03012c0c0603252400001e7a2c0d040526020601000a3805060723000200070000420f26020804003b09010826020504062c0800062c0c01072c0c0002082c0c03092c0c040a001000050024000046c22c0400002c0d01052c0d0200062c0d03072c0e05012c0e06022c0e070326020101012c0e0104260201040000002806020300380301042c0d04022c0c0201252400001e7a26020504002c08000106260207041100100107012603060401002806020726020804100038080700082c0c07090c3809080a160c0a0a2302000a000042be2c0e0509002809020900220000429f2c08010700000102012c0e060701280003804600060e380306080023020008000042e524000023950c38020608230200080000430222000042f7002d088046000422000043460c38020308230200080000433422000043140238000203080e38030209230200090000432b2400003f892c0c0806220000433d2c000c0506220000433d2c0c0604220000434607280004804800022c0801060000000102012c0e02062602090404063804090a04380a090b0238040b080a3808050009260208040123020009000043a6220000438600380208090e3802090a230200000a0000439d24000023952c0e090622000043a62c0d060926020602002602000a02012c0c050222000043bd0c3802090b2302000b000043d822000043cf2c000d07012c0c0402252c08010c00000102012c0e050c052800028048000d2602000f04000b28000f8048000e2302000e0000441c0728000d804800110a3811020010230200100000441c2400003f9b2c0c050b22000044250d28000b8048000e002302000e00004491220000443a2c0d070b2c0d0c0d26020e04100c38020e0f002302000f0000445924000020322d04000b8003270080040400112400002044002d088005000c00280c020e00380e020f2c0e0d0f003802080b2c0e0c072c0c000b0222000043bd00380d0b0f0e380d0f1023020010000044a824000023950c00380f041023020010000044c322000044ba2c0c060e22000045080038030f10000e3803101123020011000044da240000239526021104e00c381011122302000012000044f12400002032002801021100381110122c0d120f2c0c0f0e2200000045082c0d0c0f26021104122c0800122c0c0f132c0c0a140010001100240000003fad2c0400002c0c13101c0c0e0f040038100f0e0e38100e1123020011000000454b24000023952c0e0e0c00380b080e2c0c0e0b220000442529010001056100be47556b1380913b010102252901000105b87a3944b3b13c563b01010225240000001e7a2c0d03062c0d040726020801000a3807080923020009000045a92600020a04003b09010a0b280006804a00072602060401230200070000463c2200000045c32c0d01072c0d02082c0d03092c0d040a26020c04030c38090c0d230200000d000045ea24000020322d04000780032700800404000424000020442d08008005000b00280b020c00380c090d2c0e050d00380906050e3809050723020000070000462724000023952c0e0b012c0e08022c0e05032c0e0a0422000046af0026020704082c0800082c0c01092c0c020a2c0c030b2c0c040c00100007002400000046c22c0400002c0d01072c0d02082c0d040926020a04002d0400078003002700800404000424000020442d088005000b00280b020c00380c0a0d2c0e05000d2c0e0b012c0e08022c0e06032c0e090422000046af252901000105c96f93003b139de9163b010102252400001e7a260206040026020704012c0c06052200000046da0d280005804a0006230200060000474522000046ef2c0d01052c0d0200062c0d03072c0d04082c08010926020a04050010010a01260309040100280600020a26020b0404002809020c3e0f000a000c2c0d090600280602062c0e0609002c0e05012c0e09022c0e07032c0e0804252c0d03060c38050608003805070600230200080000476022000048112c0d01082c0d02092c0d030a2c0d040b2602000d04040c38050d0e2302000e000047872400002032002809020d00380d050e002c0d0e0c26020e04030c38050e0f2302000f000047ac240000203200280802000e00380e050f2c0d0f0d00380c0d0e26020d04040c38050d0f2302000f00000047d624000020322d04000980032700800404000524000020442d088005000c0000280c020d00380d050f2c0e0e0f2c0e08012c0e0c022c0e0a032c0e0b042200000048112c0c060522000046da2d0018ca18ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex b/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex index d0c70439023e..41a60fbefada 100644 --- a/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex +++ b/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex @@ -1 +1 @@ -000000001b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd23ced3716a04d81b58822bc3e1843626aa2884888b1a2d2250e79fb7d41a365e16ad977a85a570bedc6785d159f137035d3bf9891042ee3af20488686aec168b049fe6a55fa21b718224c0f6e69887dd82e302b6b658c9db0a389672582a343d00a5215d923c08e46ef8298acff37a856da61be92fe1536dd7b4e10cfec9590c233d10e0c959338e062b1c76fb81e17fcf61643da568eac372bb7feac8bfa35717720805123feb41cde00457a83a9919a315c55d6117267f05edefe119df9a7a1a0ca5eecb1430479902264f04e557160a4666fb42bb8b283c6397e3d17ac9372a6595890719fef7967c209488728aa5342438ba52058a3c770202f55acf685400000000000000000000000000000000000000000000000000000000000000050aa8c40de16e14b1d7789457012932df51eab8d07d3506a2bf3c0dd0d03cab1503b075046b71ff5f8e0792de4b82ddc979fcb3b8c03abe12972e65c57759fb461d1c34ad4b418b30c4c8b87939b97bc03d94d24d469d3cb2f419ffe6bd93f96c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000d9e0e7f11eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b944000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018cb001f8b08000000000000ffe59d057814471bc7f73609108a954285da4129dac2005d04922aee4e71bd241708924012dc823b454b71eaeeeeeeded29642dddd5d00bfff1b769b61d9a4d0cca4f93fdf3ecfefb9bdbdbddddf3b333b33b7b73b1b00b0f64d7b6dcbbadede371f0031ceab2c0a7a96b9afea7caccfb20a3edfade200b3ac9acfb21a3ecb6afa2c3b0ab4f22c3bd167bda0cfb2ba3ecbeaf92c6be0002c53a780f3daca794d0cb5484a8ab64c888613c39150426a5a4a72282939ad00454a38259c9c929c91909298184d494a69999a96da32941a4e4a8c8633935300133343fba62e76d1b642a59a12d24d7a76fdf79e49de05e256db293baeaba400c39fce7c43ab68be9132dfd559c7fd5e37bcef0e7a809e76d172778af1a44100a87453b8b1c66d75b3f5e54d2f6d65c83f6f7a2979d35d99efa1ccf7f4e44d006fbcef03fa82737cf2c6d69c370d3496f57efad233acd627b2dd205ee394b400f54e01cde912b0f4960dd7b18633df1f310d0003c12030180c0143c130301c008c00234104a481749001a2b69318314a8130991843351e283ebabab69da0a60045a6f366946deddf3ac9077f7896c94ade52a5bb161caaa1e68a663a93c65a007094a1ccd55d53e98c79b4b2ad704a624242cb44592f2523144eca484f48490048c8484b0aa58722e909d1d4a4706a66524252627a467a1ab619096786322300e9a99929fbbce440747b73de49f78138dad65f2bc994651b14ceb2f56f778c00c6c2602aee314a75a469bbbeae3a2a8031b6feed8ed55c58ddca5ab65bd62d00e008c216709cf366bcb7051ce7d3028e2f83167084c616709cc60a603c490b00a833e66cd21630db500b98631b14ce31d0024e28e72da0c43d81a4051cefb800eadeee44432de0c4ffa0054c236c01739d3779de1630d7a705cc2b8316304d00630b98abb102c823690175c69c4fda02e61b6a0127d90685271968012797f3001650e29e4cd202e639aebab73bc5500b38e53f6801a3842de054e7cd346f0b0038d5a7059c56062d6054630b38556305308da405d419f374d21670baa1167000866d50788681167066396f0125ee99242de034c755f77667196a0167292d6000591d78830d1d78b36d83c2b30d1c7873caf9812771cf3170e09565611b62a800b015d806850b0c14b6b9e5bcb049dc73496af951ce81a1bb5ba6b342986773001eb0c30c1db0f36d83c2f30d1cb00bcaf9012b712f206f1d861b2a6c0b6d8300c20b0d14b645e5bcb049dc8b485a87f1ce81a1bb75d059212cb6cda661a8740053616f659e81df514bca79dc52c6171b887b29696f60a4a10a7a996d50789900810a7a7939afa025eee5e4bd8188a1c2b6c23628bcc240615b59ce0b9bc4bd0092a43790e71c18ba7b033a2b8455e5bc5594567ba98156f1dc721eb794f1550006e25e4dda1b48375441afb10d0aaf315041af2de715b4c4bd96bc379061a800b0adb30d0aaf3350d8d697f3c22671af27e90d4c730e0cddbd019d15c2867200de2a4aabbdda40ab785e398f5bcaf80603716fd41cb73be9f63c5f9b6762920049cf4dffde33c3bb40dcbc37844b3ab8377e0f56e68728f39becfd6f08df8c00f75bc056b0cd367fb3bec6db41c39b35d66ddb0d9575dde9a7f15fb0f0168d00e9b78324fd34feb113deaa31fd766aee547aeb86ed4a1db04399dfa9cc6ff300d40d17e0fd85e022707119d40d1a6f940b5fa0316f2e2129db1acf89872fd400987e9792a49fc6d3bce18b34a6df6586eb864b943ae05265fe3265fe624fdd007039de5f01ae04579541dda0f116a2f0e51af3e66a92b2adf10c59f80a8de900770d49fa693ce913be5263fa5d6bb86eb85aa903ae51e6af55e6aff2d40dd700d9fb06afbb01dc58067583c69b2bc2d769cc9b9b0ce7cd4d4a1e5cafccdfa000ccdfe8c99b9bf1fe16702bb8cdde7f7b6a9ee83867b2d1c03989db35e6b5a5004cba3defd0e6194ef3cbfb3b943ceeafcc0fb28b1f98ef4ebcbf0bdc0dee290083e37280c6bcba53e37179afe1e3f25e250fee52e6ef56e6eff1e4cd7d787f003f78003ce89337bacbe743ff3e0d120f260dd4f2395099bf4f997fc893060f00e3fd23e051f05819a4c1e3faca41a69f5fa8745358eaeadb0dd4a14f182eff008f2b79fc8432ff700979ff24de3f059e06cfd8ff3c306569d320a0319f9e3400d487d59defcfeaf3ccf0cbf76795fc95fc72e77b9790efcfe1fdf3e005f0e20041e47ba874537890c676e4398df95e967f600fd07cfcbbd34bb641e1976cfd00dbdda5b130988a7b975d94c09ab66bf487b2baadd2a6e9008df9f332e9c1fa00b2a183f515dba0f02b060ed657cbf9c12a71bf6ae860d5dd13d8e5b8ea6e5d0077d9e533bfe3aca25e49719326ef44d94f8c67dbbacb5a434b7f63a0dbb11100816363038e8543264841ab601d38e90e40e3cf18238306252727256646232d004da641ef32faf9152add14ee47e2196b95ef32e54e6a65bedb79f39aed2488003b8e897c10f408e86ef5766b6ca9f6d87a2b07371df6f8a483ee82f39aa10200ae3bbff668ccafbd86f26bef41945b1dbd605dee4dacb2c9fbf274deaf294900ccb6c6984f2189394663cca792c4acb1e10e372ba39843a59bc2cd35a61f4b00473264717886493c13483c13493c93483c93493c5b9078b624f14c21f14c2500f13c8dc4f37412cf33483ccf24f13c8bc4f36c12cf56249ead493cdb9078b60025f16c47e2d99ec4b30389674712cf4e249e9d493cbb90787625f1ec46e2d9009dc4b30789674f12cf5e249ebd493cfb9078f625f13c87c4b31f89677f12cf0001249e03493c0791780e26f11c42e23994c4731889e77012cf11249e23493c0023249e69249ee9249e19249e5112cf4c12cf51249ea3493cb3483cc790788e0025f11c47e2399ec4339bc43387c4730289e74412cf5c12cf3c12cf7c12cf4900249e93493ca790784e25f19c46e2399dc4730689e74c12cf59249eb3493ce7009078169078ce25f19c47e2399fc4730189e74212cf45249e8b493c9790782e0025f15c46e2b99cc4730589e74a12cf55249ee79278ae26f15c43e2b996c473001d89e77a12cf0d249ee791786e24f13c9fc4731389e76612cf2d249e5b493c00b791786e27f1dc41e2b993c4f30212cf0b493c2f22f1bc98c4f31212cf4b49003c2f23f1bc9cc4f30a12cf2b493caf22f1bc9ac4f31a12cf6b493caf23f1bc009ec4f30612cf1b493c6f22f1bc99c4f31612cf5b493c6f23f1bc9dc4f30e1200cf3b493cef22f1bc9bc4f31e12cf7b493cef23f1bc9fc4f30112cf07493c1f0022f17c98c4f31112cf47493c1f23f17c9cc4f30912cf27493c9f22f17c9ac400f31912cf67493c9f23f17c9ec4f30512cf17493c5f22f1dc45e2f93289e72b00249eaf9278ee26f17c8dc4730f89e75e12cfd7493cdf20f17c93c4f32d12cf00b7493cdf21f17c97c4f33d12cff70d79da1ecff2f42cee0fca28e650e9a6f000871ad34f7d8e7da89493c9f2f891c5e1f93189e727249e9f92787e46e2f9390089e717249e5f92787e45e2f93589e737249edf92787e47e2f93d89e70f249e003f9278fe44e2f93389e72f249ebf9278fe46e2f93b89e71f249e7f9278fe4500e2291b64f00c9078da249e31249eb1249e71249e15483c2b92785622f18c2700f1ac4ce2791889671512cfaa249ed5483cab9378d620f13c9cc4b32689e71100249eb50c7996e7eb026aff1fc67ce4ff61cc47911c8347074a9f7ea991b4f40050383962d2f318923214ab31e63a243137d718f3b124c7cd71659437a1d24d00e1e303faf2b99fcd11f3091a63de4d724ddb8924c74d90c4b32e89673d12cf0093483ceb93789e4ce2d980c4b32189672312cfc6249e4d483c9b92789e42e200792a89673312cfe6249e2112cf3089670289672289671289673289670b12cf0096249e29249ea9249ea791789e4ee2790689e799249e6791789e4de2d98ac400b33589671b12cfb6249eed483cdb93787620f1ec48e2d989c4b3338967171200cfae249edd483cbb9378f620f1ec49e2d98bc4b33789671f12cfbe249ee7900078f623f1ec4fe23980c4732089e72012cfc1249e43483c8792780e23f11c4e00e23982c47324896784c4338dc4339dc43383c4334ae29949e2398ac473348900671689e71812cfb1249ee3483cc79378669378e690784e20f19c48e2994be2009947e2994fe23989c4733289e71412cfa9249ed3483ca79378ce20f19c49e200398bc4733689e71c12cf0212cfb9249ef3483ce793782e20f15c48e2b988c400733189e71212cfa5249ecb483c979378ae20f15c49e2b98ac4f35c12cfd524009e6b483cd79278ae23f15c4fe2b981c4f33c12cf8d249ee793786e22f1dc4c00e2b985c4732b89e73612cfed249e3b483c7792785e40e2792189e745249e170093785e42e2792989e765249e9793785e41e2792589e755249e5793785e43e200792d89e775249ed79378de40e2792389e74d249e379378de42e2792b89e76d00249eb79378de41e2792789e75d249e779378de43e2792f89e77d249ef79378003e40e2f92089e743249e0f93783e42e2f92889e763249e8f93783e41e2f9a400214fdbe359dae73036d018f353651473a87453f8e980bef4db6b7394c76748008e9b67493c9f23f17c9ec4f30512cf17493c5f22f1dc45e2f93289e72b249e00af9278ee26f17c8dc4730f89e75e12cfd7493cdf20f17c93c4f32d12cfb749003cdf21f17c97c4f33d12cff7493c3f20f1fc90c4f32312cf8f493c3f21f1fc0094c4f33312cfcf493cbf20f1fc92c4f32b12cfaf493cbf21f1fc96c4f33b1200cfef493c7f20f1fc91c4f32712cf9f493c7f21f1fc95c4f33712cfdf493cff0020f1fc93c4f32f124f8be4fa900089a74de21943e2194be21947e25981c4b3002289672512cf7812cfca249e8791785621f1ac4ae2598dc4b33a89670d12cf00c3493c6b92781e41e2598bc4b33689e791249e4791781e4de2790c89671d1200cf63493c8f23f13c9ec4f30412cf13493c83249e75493ceb91789e44e2599f00c4f36412cf06249e0d493c1b19f2b43d9ea5bd0f3a4e63cc8d4962aea031e60026243157d418735392982b698cf9149298e335c67c2a49cc9535c6dc8c24e600c334c6dc9c24e62a1a630e91c45c5563cc619298ab698c398124e6ea1a634e002489b986c6989348623e5c63ccc92431d7d418730b92988fd018734b92986b00698c398524e6da1a634e2589f9488d319f4612f3511a633e9d24e6a335c67c000649ccc7688cf94c9298eb688cf92c92988fd518f3d924311fa731e6562431001faf31e6d624319fa031e63624319fa831e6b624310735c6dc8e24e6ba1a63006e4f12733d8d31772089f9248d31772489b9bec6983b91c47cb2c6983b6b8c0039d6da774d40d009b809680a4e01a78266a0b9ec07844182a4054802c9a00500680952402a380d9c0ece006782b3c0d94eecad411bd016b403ed4107d0117400029d4117d0157403dd410fd013f402bd411fd0179c03fa81fe60001808068100c16008180a8681e16004180922200da4830c1005996014180db2c01830168c0003e34136c80113c044900bf2403e9804268329602a9806a683196026980566008339a000cc05f3c07cb0002c048bc062b0042c05cbc072b002ac04abc0b96000355803d68275603dd800ce031bc1f96013d80cb680ad601bd80e76809de002007021b8085c0c2e019782cbc0e5e00a7025b80a5c0dae01d782ebc0f5e006700023b809dc0c6e01b782dbc0ede00e7027b80bdc0dee01f782fbc0fde001f0200078083c0c1e018f82c7c0e3e009f024780a3c0d9e01cf82e7c0f3e005f022780009ec022f8357c0ab6037780dec017bc1ebe00df026780bbc0dde01ef82f7c000fbe003f021f8087c0c3e019f82cfc0e7e00bf025f80a7c0dbe01df82efc0f700e007f023f809fc0c7e01bf82dfc0efe00ff027f80bc8411600368801b1200e005400154125100f2a83c3401550155403d5410d7038a8098e00b5406d702438000a1c0d8e0175c0b1e038703c38019c0882a02ea8074e02f5c1c9a00168081a0081c6a009680a4e01a78266a0390881304800892009248316a0254801a9e03400703a38039c09ce0267cbbdf0a0356803da8276a03de8003a824ea033e802ba00826ea03be8017a825ea037e803fa8273403fd01f0c0003c12030180c0143c10030301c8c00234104a481749001a220138c02a341161803c68271603cc80639006002980872411ec80793c06430054c05d3c0743003cc04b3c06c30071480b900601e980f1680856011580c9680a56019580e56809560153817ac066bc05ab0000eac071bc0796023381f6c029bc116b0156c03dbc10eb013c8b3ede5b9f1f2004c7679deb93c4b5c9ed32dcfc096e74bcbb39be5b9c8f2cc61799eaf3c2b57009e432bcf7895e7a7cab349e5b99ff24c4d795ea53c0b529eb328cf3094e70300cab3f7e4b976f2cc38791e9b3ceb4c9e2326cfe8ba1fc8b3a5e4b94df24c240079de903ccb479e9323cfa091e7bbc8b353e4b924f29c0e7906863c13429eb70020cf3290e704c818fc32bebd8c1d2fe3b2cb98e7329eb88cd52de360cb18d300327eb38c8d2ce30ecb98be325eae8c45fb36903154657c5219fb53c6d59431002b653c48196b51c63194310265fc3d19db4ec68d9331d964bc33194b4cc6e9009231b0647c2919bb49c645923187643c1f192b47c6a191315e64fc14199b4400c6fd90313564bc0a190b423a143286818c0f20f7decb7ded72cfb8dc8f2df7003acb7dc4728faedcff2af796ca7d9b724fa4dc6f28f7f2c97d72720f9adcdf0025f74ec97d4972cf8fdc4f23f7aac87d20728f85dcbf20f706c875f7724dbb005c2f2ed7624bfb2ed710cbf5b972edab5c572ad76ccaf59072ada15cc727d700b5c9755e72dd935c0724d7c5c8752272dd845c4720ffabcbffccf2bfabfc0f0029ffcbc9ff54f2bf8dfc8f21e7f5e53cb79cf795f3a0725e50ce93159e370200725e417e67cbef4ef91d26bf4ba49f2efd56e9c749bfc6de57555ad22f91a90089553439c968c5389fcb357d728d9b5cf325d740c93541728d8c5c3322d75000c83505f21fbbfce72cffc1ca7f92f21f9dfc6725ffe1c87f1a728e5fce79cb00396039272ae708e59c999c4392732a728e417e7307415d500f489f5dfab0d200a793e7d334048d4063ebc0a9b2325f4b993fce798de4e747c74fc80fe6e70400231919c12959f9a3833993a3b999e372a45b51d87f70a77ace6be7ecacfcac00c8b8ace991fcac9cece0e848dee860464e342f989d931f1c1fc94f97ce4c6100cfc29d42de6f46736577b9d1bcbc60d6beefe58f8e06d373b2f37323e9f9c1008ce8847139d3a2d2d929ec8d1caaf5aa43fc4ec0c90dcb494d77aae6bcf6cd008fa48fc53773601695aab8b0cf2453b3835a7b89f349eb435abbb3b2f631ee0016727323d38259d919d1a9c19c49f9c19ccc605acea4ec8c3cf58b7d0e31fc00c2922c935b82e29d57f757887b44b472de874a3785e395edeade7e4a28392900deda7fd2ec9f186f15d506a6d247b6196366fb8557a9cad4b6a068fb6a2cee007eab3aef034a5abadf911aaf86f21d751b96e3ebfdaefbb9c9f852424949f100d6feb5b8def40b175e2d26534cc181e9e77e165be09f9e32c515ecefe5a6a7007b944b0bd1ce59a786f2797d653bdef40e9441dacac56d01cffe2c6bff74f600c65cd9327bac043cfb737dbce9e3ce5771d257a651d1fcb64e9bd3393b2f3f00929d1e554350375bc327443509fcd6f1aee75dbfaacfe7aea67422dc6aac620041d1e73aab0177bf959cedc7594559e9eeb370b9336f7bd657e703cef7d56500272971c914af7ccfdd4f8cb2ccdd6775e77d05e5b3f8827fde56accfb66af800ac5fc1b3ad8a3edb5297b9714b67af8e33afe64facb23d5df9d332a5287fdc003452f3479d6295cfd5f51b39ef6b5afe93c4e076cdb89bfca49665d5e41b6a00920d3759fe4dbe37164b59e6aee7fd8eac5752b7c064d7c87cd35e94cf15cc006c3fc14db73825ed627d6272f75fd53ab0790b14f36a59fe4db1bbafca96d100321c2e2936d5df2d1b353cebab69f05fe6839a3e6a3ec874b05dbe38cf67c50075f9ea28eb15d70d97f54e76e6a5ebd2d1d996a5a4954cacfd84fa4acc85f10028df63ed271cebcc4b1b2bf9d7d42ada5671e5ceafbb5add3ab06e88f36ccb00afeb1be7b32df7a4944c1370d6a175eea849e3a3d9f979de0eabba03cb674300eacedde5c53528deefc42aebab134387aab9f3bea40e557f679ebc43955656001daa8a66b6dfc2dd7e2533dbf7ed50a9b1b8fb758f8976054569d9ae607f2700779d0eca3a1d8a5947adfc3b2aeba8c75f27659d4e9e754aeabcf99d5768e700f94cad6cda7b3e538fa50e9ecfd40aa9a3e7b30ad681be927eee196bb7d2ea005cb07f2cea675d94cf5cff2394effcdd2859fbae0a50f75fb168f7079c473100547e120fb6f3e6eebfb265f478f9bbf356c9e3e34d1fbff328e99171e37ae500664d8ee4473b4cca4e97bf05d410d4cdda3e2116d7cca8c5c2bb9eb798faf50091633defe33cefddedabfb29eefbde65aa8f3b5fdd677945cf3adeecf62ef300f68d2bfaeccfef100e14f3eaeec7fa87fdf83997749af150f763fa94760d8f00abbaafea3efbf6a6ab5f1faaa4df2c157df663f8b769b25f55ea4edeaad4af00bca8cedee3d0f2c4af4e6a4c721cb755b6eb5dcfebe3f75b2ac613875fb98800b1ac62fbbdea36fcba9cee7cbccf7e747631fc9a2f6ffc251dbf6ad372a8f900f1f76f28ebd0f2434d23ef71ae1ed3debf80bcdd589918baec6d9cf72575d900d52e815f5d11f07ca6a693b77e3354d6fe3e5fe19635371dbc3e71cae7eafa005dfe211d02d681c75849f5a0d7475ddffbfb5426bfdfb1153c9f9594aeffc500392bbfe3c11b7705ebd0f2a1aff35a5c3ef8b563eab924ef7ed463b1929266003255b68ca45942bcb24f03db0f55b40e9cd40b590ef37ce6a6955fbd1028e600bded792d69dd4009dbadeaf399faf3c3bb2cdef35a4bd99e89d303b5cd6cdf00378fd40b8c6a7be254d3b9952607777beeb1e9d72fb23d9fa9e75455bf807e00bfb0d725c6675feea49615f7f3ff018d8be2fd060d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0abf338154e355442d9916d630da0491036d5a7b23c42b477c1395ba3bf9b42d270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f101503049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea01bb3b34c9349b23ac39d039e544844c573e5610c8888080c4c4e906254d8c7a124ac28b575def2e243406b17fa9f0925bf1118986880d83a9b745459bc8f3a1233d10e0c959338e062b1c76fb81e17fcf61643da568eac372bb7feac8bfa3570861b8c908d4acade859229678fac5c86ce12b5fa26c04ceef065df68e74b1181a0ca5eecb1430479902264f04e557160a4666fb42bb8b283c6397e3d17ac9372a6595890719fef7967c209488728aa5342438ba52058a3c770202f55acf685400000000000000000000000000000000000000000000000000000000000000050a3e92c5ed495ea48c51f5a0382513a803cc73b357a6771bbc41530ae4c4bc3d03b075046b71ff5f8e0792de4b82ddc979fcb3b8c03abe12972e65c57759fb462cee63a8ffb1c63b886b7dba5ae1677fc71d848a6fb52e8156dfa49136faaec800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000d9e0e7f11eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b9441dec445c8fa1078b7dce9b3ccf5de0be2245124caabca925bb78b32f1937accf00000000000000000000000000000000000000000000000000000000000055fc001f8b08000000000000ffeddd05745b67c2706b87390e3333c7761c66666666006666680a699b32738a4953a694999b5298999919efd68cfd55759d76662a7700baef3f5a6b2fcb967cfcbc47872cd94789c2fe7919161e16563dfc9fd713510092988f89a9409cafc57e0cbe9e2c9efba589e76be9e2f95a783c5fcb18cfd700b2519d385fcb1fcffd0ac4f3b582f17cad503c5f2b1ef3b5e04ba2988f7562003e5688a8141d3db072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab440056ac52714054950a15065689ae52b96abfaa9523aa464657181839a862d50a008322fe79599ffe976945fca94b54ff84746ef8cf9dd171bf10b065a2a441d600c07cb81273bd44d82fd74b065ddf10739fd8efdbc8e79b68336d49ffcbd763002f49e2cc83883f77892c15c2696d4c1fbac7666bc896a1f81f9bad418fcda600a0eb9b83ae6f89f3d86ce3f3edb48376c6f3d8240ef163533c84cbfaaed0cd00cfc8e0ed4960ba05e2ccdbb89744219e2f89c242bb6cc41a33c45cdfcd98f600d05eda47fbe9001da44374988ed0513a46c7e9049da453e9636646f2a00522002167c6c110ae28f1704335eda8e079713afd3f3f9e491ff6ebbd53e086cb7100be16b853dca52ad45bc18321d8720d1cf4cfcbe9106e05cf84f0c10d2c942900c2feb535f4cfba83e74164950a5151952b04ee5765404464f480fe5155a2a20006f48b8ee81fd1b77fd4c0aad191550745474557e83fa07f3fa6d9377250c400a0befdab0eaaf2cf69057bcfa64f407060e27137e17f167f36849bdd73215c00b0126a1e9e4bffdbe9fed979782ec45bb8508ffbcc35c6fd67a77b3ec4874000b11bd4f331cbf95fb9973a22dc4b5d88d9d85c8cbb97ba10cf5eeae25fb097003a12c2bdd485106e4c2e4af7521712682f75297d02822f25c05eea5208f7520097ffe67ba97facbc09b097bafc37df4b5dbcc6b8ffec74af24d05eeaca7f61002f755cb897ba1abbb1090ffbf51ee96a3c7ba9c09d127a2f753c847ba9aba100dc98843bf7525713682f95283c01c18189877a2f9528740f6064e2f0bff75e002a300f1387877e2f9538fcefbd970aaca4f18dfbcf4e374978c2eca59284ff00f57ba953c2bd54d2988d4db2b87ba9c00d71f752c9fe82bdd4a910eea59286007063924cba970a9e07a1dc4b250f4f4070f204d84b250fe15e2ac5df7c2f150098872912602f95e26fbe974a768d71ffd9e9a64ca0bd54caf0dfee99426d4f0015327b64bff85eb00d4c3ff685d9dd412fd2ee4b7fed17d353f33d69282da5000b4ff817d3f784f07994d4215cf7d38778b98afbd8a40f7a6cd2045d4f1b74003d5df8af1f9b703ecf401929533c8f4da897cfccfff93ca8f0afcc83e0e573006fd032191ef4f5cc71e641163ecf4ad928fb5f300f72846c39a8109d90ce9c00ffb97340c4bff058e5087a4cf6073d560782aee78cf358e5e2f3dc9487f2fe0005db9210bef41b992b84db927c21de3727d4fc3b14c2f9973b84f32fbf64fe001d0ee1fccb13c2f9572081f765f982b60df983ae1708ba9e37ceb6a1209f1700a2c254e42fd83684f005b7c882217c6c8a4a96eda3219c7f854238ff8a49e600dfb110cebfc2219c7fc51378db5034681b502ce87af1a0eb45e26c1b4af07900492a45a5ff826d43085fe6882c11c2c7a68c64d93e11c265bb6408e75f59c900fc3b19c2f9572a84f3af5c026f1bca046d03ca065d2f1774bd749c6d43793e008fa0488afa0bb60d217c7239b27c081f9b0a09fcd854087a0c2282ae47065d008f8af3d844f37945aa4495ff82dfcdab846e1e0c8a6f1e54091a6b74d0f52c00bff3fc44553eaf16f38f533562e641d298fbfe157fe85f3584cb45f0f39f3500635e54a815f7d5a8c00d73e27cad56ccd7822fa15e31ab867065aaf9af4fab00ff1f4c2bb256885f8d4a1c16ff4ba461ffe6fcfc237758022e943543bcb18a00bdd48ebb30d6fe175e060de5c2f207d6c83fb83da2760817e23ae1215b187e00f54a489d7f6165feb3f65a219c0fa19ca775ff8d79fa473f2b789ed60dda6800a60c9a9fc1f334e2cf5d22affcfef4a2fa0f8aac507160e58a1195fa46571c0050a942d480a8ca1103a22b0e8a041c55359a5933a87f74950155a22a0c8aaa001cd5ff4a687dff58c662376cb13b92d8bd6aad98ebf5f8589f1a84ffb57f2f00d220817e7308f163fcabbf176918b3876e1477a318b821eedf8b34fa17369400117feef2ab99f867ff5ea4610857ea4621de43ff557f2f123c0f42f9f7228d00c313101c9878a8ff5ea471087f276b12c2052ba1e66193f0d0ffbd4893106f00e1423dee46d718f79f9d6ed3101f8ac66e509b86ff76cf14eaa3a450be3e57002f84cb7db3ffd20635e2cf5d229b85785988bd340f4f4070f3f0d04fb74502006f0423fedce51fe36e11fecb0c0ed1747ff749dd3f3b1f42f96270fd103e3e002da52b6bcb045a595b852720b85502acacadffe62b6b60dcadffe29535e2cf005d7eb5378cf87397906e4cdb8478a14f15f378b709fa5dbb7ed0f516e1bf3c00537d28e82fbb0e075d8ffdb7edb6dcb71db58ff99ed869d7bbc6b41b054dfb008feed3818f1da95378c2ac9b2d6296d1501f5d76fe9b1f5527d4b8bb8470fd00090bba240eb1b35108d7cdae211e73dcb146fcb94b6460fd0ce5e31258273b0027c0b2d32d819e6b0bf5b2733184ff58dbfd6fbeec04b6fd217c9a2c32b0ae00744b8065a74788979d50cfc7c03213ca638bc072d32301e663a2b08459074300edec19ba793920be57fc7b061d8b049685d8ebdbd25ffb15ff5e7cde9bfa5000dff0843fc5e1be106e877a497f190ce17f0dfdea97c17ee10908ee9700bf0c00f6ff9bff321818777fd9333709b5a0fe59d700e9ca1a4a77b07760780282070026c0ca3ae86fbeb206c63d288156d6501f09f48fb1867aefda3ffceff978070056d8c0862e71d8b52f217257887d5d2bf812ea65ad4458e87706a136961418004b2580f1fffe683559d86f2fa11e4042fdea11162267c58ad115060dec5b390021e7c1b6043a3d4da89dbb24ce24a19bd6affe087a70ccce7148dc3fb10adc005020ecd79750ef990687706f32343cb42b70ec7c181acf7c08f5833b24c48700c1c9c2fe9ac3e084ded0857c811b1ac2056e58022d70c3fe8515efeff4fb6000e9b0845908423de6102eac916524634e1cc23197958c39847bcac8727fd1980023fedc25b27c08e79fe5c82d22cce18c9438a324ce0a1267b4c45951e2ac240071569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c750025ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b30085c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec247100769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d2500ce7e12677f897380c43950e21c24710e963887489c4325ce6112e77089738400c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e009638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c007325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f3360089f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f3018900f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f90094c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f9400385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c006f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f004a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b2500ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae009638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce006d12e776897387c4b953e2dc9540cec4719c7fa7f7a5defd178d39e2cf5d2200f78470fe0d0d772c8f7bc31cce7d12e77e89f380c47950e23c24711e96388f00489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e7007989f382c47951e2bc24715e9638af489c5725cec0040dce4412676289338900c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a6009738c325ce0c126746893393c49959e2cc9240cebff3df0564fd7f70ccd92400cb63f6447f7efe55eddbaf7f4464c5be09f9d82409e198734896c7f2211c73004ec9f298eb2f7a6c22fedc253277a2d03dcebbd23bc69c2784631e2cf9bba900bc92f5269fc4995fe22c20711694380b499c8525ce2212675189b398c4595c00e22c21719694384b499ca525ce3212675989b39cc4595ee28c90382325ce280089b382c4192d715694382b499c9525ce2a12675589b39ac4595de2ac2171d60094386b499cb525ce3a12675d89b39ec4595fe26c20713694381b499c8d25ce002612675389b399c4d95ce26c2171b694385b499cad25ce3612675b89b39dc400d95ee2ec20717694383b499c9d25ce2e12675789b39bc4d95de2ec2171f69400387b499cbd25ce3e12675f89b39fc4d95fe21c20710e943807499c8325ce210012e750897398c4395ce21c21718e943847499ca325ce3112e75889739cc439005ee29c20714e943827499c9325ce2912e75489739ac4395de29c2171ce94380067499cb325ce3912e77512e75c89f37a89f30689f34689f32689739ec479b300c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e2bc4be2bc5be2bc47e200bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c44e27c54e27c4ce27c005ce27c42e25c20713e29713e25713e2d713e23713e2b713e27712e94381749009ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce5725ced724ced725ce003724ce3725ceb724ce2512e7db12e73b12e7bb12e77b12e7fb12e70712e7870012e74712e7c712e72712e7a712e76712e7e712e71712e79712e75712e7d71200e73712e7b712e77712e75289f37b89f30789f34789f32789f367897399c4b9005ce25c2171ae943857499cab25ce3512e75a89739dc4b95ee2dc20716e94380037499c9b25ce2d12e75689739bc4b95de2dc2171ee943877499cbb25ce3d1200e75e89739fc4b95fe23c20711e94380f499c8725ce2312e75189f398c4795c00e23c21719e94384f499ca725ce3312e75989f39cc4795ee2bc20715e94382f00499c9725ce2b12e75589332cb1c39948e24c2c71269138934a9cc924cee41200670a8933a5c4994ae24c2d71a69138d34a9ce924cef41267b8c49941e2cc280071669238334b9c5924ceac1267368933bbc49943e2cc2971e69238734b9c790024cebc12673e8933bfc45940e22c28711692380b4b9c4524cea212673189b300b8c45942e22c29719692384b4b9c6524ceb212673989b3bcc4192171464a9c005112670589335ae2ac28715692382b4b9c5524ceaa12673589b3bac45943e200ac2971d692386b4b9c7524ceba12673d89b3bec4d940e26c28713692381b4b009c4d24cea612673389b3b9c4d942e26c2971b692385b4b9c6d24ceb612673b0089b3bdc4d941e2ec28717692383b4b9c5d24ceae12673789b3bbc4d943e2ec002971f692387b4b9c7d24cebe12673f89b3bfc43940e21c28710e9238074b9c004324cea112e7308973b8c43942e21c29718e9238474b9c6324ceb112e738890073bcc43941e29c28714e9238274b9c5324cea912e7348973bac43943e29c290071ce9238674b9c7324ceeb24ceb912e7f512e70d12e78d12e74d12e73c89f3006689f31689f3568973bec4799bc479bbc47987c479a7c47997c479b7c4798f00c479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c4f988c4f9a8c4f998c400f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c56e27c4ee25c28712e0092389f9738174b9c2f489c2f4a9c2f499c2f4b9caf489caf4a9caf499caf4b009c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725cef724cef725ce0f24ce000f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f24ce2f25ceaf24ceaf0025ce6f24ce6f25ceef24cea512e7f712e70f12e78f12e74f12e7cf12e732890073b9c4b942e25c2971ae9238574b9c6b24ceb512e73a8973bdc4b941e2dc2800716e9238374b9c5b24cead12e7368973bbc4b943e2dc2971ee9238774b9c7b0024cebd12e73e8973bfc47940e23c28711e92380f4b9c4724cea312e73189f300b8c47942e23c29719e92384f4b9c6724ceb312e73989f3bcc47941e2bc2871005e92382f4b9c5724ceab12675812873391c49958e24c227126953893499cc90025ce1412674a893395c4995ae24c2371a69538d3499ce925ce70893383c4990051e2cc2471669638b3489c5925ce6c126776893387c49953e2cc2571e6963800f3489c7925ce7c12677e89b380c45950e22c24711696388b489c4525ce621200677189b384c45952e22c2571969638cb489c6525ce72126779893342e28c940038a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b38600c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c2471360096389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce007612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c400d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e96003887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce710012e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c4390053e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce791200e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f3001e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f3310089f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e2005c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f009738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f48009c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c005f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce650012e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b90051e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc2571ee963800f7489c7b25ce7d12e77e89f380c47950e23c24711e96388f489c4725ce631200e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c4795100e2bc24715e9638af489c5725ceb0a40e67228933b1c49944e24c2a7126933800934b9c2924ce9412672a8933b5c49946e24c2b71a69338d34b9ce1126706890033a3c49949e2cc2c71669138b34a9cd924ceec12670e8933a7c4994be2cc2d0071e69138f34a9cf924cefc12670189b3a0c45948e22c2c711691388b4a9cc50024cee212670989b3a4c4594ae22c2d71969138cb4a9ce524cef2126784c41900297146499c1524ce6889b3a2c45949e2ac2c71569138ab4a9cd524ceea1267000d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa12670389b3a1c4d948e2006c2c713691389b4a9ccd24cee612670b89b3a5c4d94ae26c2d71b69138db4a009ced24cef612670789b3a3c4d949e2ec2c71769138bb4a9cdd24ceee12670f0089b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e7008973a0c43948e21c002c710e9138874a9cc324cee112e7088973a4c4394ae21c2d718e9138c74a9c00e324cef112e7048973a2c43949e29c2c714e9138a74a9cd324cee912e70c890073a6c4394be29c2d71ce9138af9338e74a9cd74b9c37489c374a9c37499cf30024ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d12e79d12e75d12e7dd1200e73d12e7bd12e77d12e7fd12e70312e78312e74312e7c312e72312e7a312e7006312e7e312e71312e70289f34989f32989f36989f31989f35989f3398973a100c4b948e27c5ee25c2c71be2071be2871be2471be2c71be2271be2a71be267100be2e71be2171be2971be25712e9138df9638df9138df9538df9338df97383f0090383f94383f92383f96383f91383f95383f93383f9738bf9038bf9438bf920038bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c3f4a9c3f499c3f4b9c00cb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a9ceb24cef512e706890073a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e8973a7c4b94be2dc2d0071ee9138f74a9cfb24cefd12e70189f3a0c47948e23c2c711e91388f4a9cc70024cee312e70989f3a4c4794ae23c2d719e9138cf4a9ce724cef312e70589f300a2c47949e2bc2c715e9138af4a9c61c91cce44126762893389c49954e24c26007126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c00126746893393c49959e2cc2271669538b3499cd925ce1c12674e893397c499005be2cc2371e69538f3499cf925ce0212674189b390c45958e22c2271169538008b499cc525ce1212674989b394c4595ae22c2371969538cb499ce525ce0889003352e28c92382b489cd112674589b392c45959e2ac2271569538ab499cd52500ce1a12674d89b396c4595be2ac2371d69538eb499cf525ce0612674389b39100c4d958e26c22713695389b499ccd25ce1612674b89b395c4d95ae26c2371b6009538db499ced25ce0e12674789b393c4d959e2ec2271769538bb499cdd25ce001e12674f89b397c4d95be2ec2371f69538fb499cfd25ce0112e740897390c4003958e21c22710e953887499cc325ce1112e748897394c4395ae21c23718e950038c7499ce325ce0912e744897392c43959e29c22714e9538a7499cd325ce190012e74c897396c4395be29c23715e2771ce9538af97386f90386f94386f923800e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b24ce3b25cebb24cebb0025ce7b24ce7b25cefb24cefb25ce0724ce0725ce8724ce8725ce4724ce472500cec724cec725ce2724ce0512e79312e75312e7d312e73312e7b312e77312e70042897391c4f9bcc4b958e27c41e27c51e27c49e27c59e27c45e27c55e27c4d00e27c5de27c43e27c53e27c4be25c2271be2d71be2371be2b71be2771be2f71007e20717e28717e24717e2c717e22717e2a717e26717e2e717e21717e29717e0025717e2d717e23717e2b717e27712e9538bf97387f90387f94387f92387f96003897499ccb25ce1512e74a897395c4b95ae25c2371ae9538d7499ceb25ce0d0012e746897393c4b959e2dc22716e9538b7499cdb25ce1d12e74e897397c4b9005be2dc2371ee9538f7499cfb25ce0312e74189f390c47958e23c22711e9538008f499cc725ce1312e74989f394c4795ae23c23719e9538cf499ce725ce0b1200e74589f392c47959e2bc22715e9538c3923b9c8924cec41267128933a9c499004ce24c2e71a69038534a9ca924ced412671a8933adc4994ee24c2f71864b9c001924ce8c1267268933b3c49945e2cc2a71669338b34b9c3924ce9c12672e890033b7c49947e2cc2b71e69338f34b9c0524ce8212672189b3b0c45944e22c2a00711693388b4b9c2524ce9212672989b3b4c45946e22c2b71969338cb4b9c11001267a4c4192571569038a325ce8a12672589b3b2c45945e2ac2a71569338ab004b9c3524ce9a12672d89b3b6c45947e2ac2b71d69338eb4b9c0d24ce861267002389b3b1c4d944e26c2a713693389b4b9c2d24ce9612672b89b3b5c4d946e2006c2b71b69338db4b9c1d24ce8e12672789b3b3c4d945e2ec2a71769338bb4b009c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb4b9c0324ce8112e720008973b0c43944e21c2a710e9338874b9c2324ce9112e7288973b4c43946e21c002b718e9338c74b9c1324ce8912e7248973b2c43945e29c2a714e9338a74b9c003324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f71de2071de2871de240071ce93386f96386f91386f9538e74b9cb7499cb74b9c77489c774a9c77499c00774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f499c0f4b9c8f489c8f004a9c8f499c8f4b9c4f489c0b24ce2725cea724cea725ce6724ce6725cee72400ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f9b2c4f98ac4f9aac4f9009ac4f9bac4f986c4f9a6c4f996c4b944e27c5be27c47e27c57e27c4fe27c5f00e2fc40e2fc50e2fc48e2fc58e2fc44e2fc54e2fc4ce2fc5ce2fc42e2fc52e200fc4ae2fc5ae2fc46e2fc56e2fc4ee25c2a717e2f71fe2071fe2871fe2471fe002c712e9338974b9c2b24ce9512e72a8973b5c4b946e25c2b71ae9338d74b9c001b24ce8d12e7268973b3c4b945e2dc2a716e9338b74b9c3b24ce9d12e72e890073b7c4b947e2dc2b71ee9338f74b9c0724ce8312e72189f3b0c47944e23c2a00711e93388f4b9c2724ce9312e72989f3b4c47946e23c2b719e9338cf4b9c170024ce8b12e72589f3b2c47945e2bc2a7186a5703813499c8925ce2412675289003399c4995ce24c2171a6943853499ca925ce3412675a89339dc4995ee20c97003833489c1925ce4c12676689338bc49955e2cc267166973873489c3925ce5c0012676e89338fc49957e2cc2771e697380b489c0525ce4212676189b388c4590054e22c26711697384b489c2525ce5212676989b38cc45956e22c2771969738002324ce4889334ae2ac2071464b9c1525ce4a12676589b38ac45955e2ac2671005697386b489c3525ce5a12676d89b38ec45957e2ac2771d697381b489c0d2500ce4612676389b389c4d954e26c26713697385b489c2d25ce5612676b89b38d00c4d956e26c2771b697383b489c1d25ce4e12676789b38bc4d955e2ec2671760097387b489c3d25ce5e12676f89b38fc4d957e2ec2771f6973807489c0325ce004112e760897388c43954e21c26710e973847489c2325ce5112e76889738cc4003956e21c27718e973827489c1325ce4912e76489738ac43955e29c26714e97003867489c3325ce5912e76c89738ec4799dc43957e2bc5ee2bc41e2bc51e2bc0049e29c2771de2c71de2271de2a71ce97386f93386f9738ef9038ef9438ef920038ef9638ef9138ef9538ef9338ef97381f90381f94381f92381f96381f9138001f95381f93381f97389f903817489c4f4a9c4f499c4f4b9ccf489ccf4a9ccf00499c0b25ce4512e7f312e76289f30589f34589f32589f36589f31589f3558900f33589f37589f30d89f34d89f32d897389c4f9b6c4f98ec4f9aec4f99ec4f900bec4f981c4f9a1c4f991c4f9b1c4f989c4f9a9c4f999c4f9b9c4f985c4f9a500c4f995c4f9b5c4f98dc4f9adc4f99dc4b954e2fc5ee2fc41e2fc51e2fc49e200fc59e25c26712e973857489c2b25ce5512e76a89738dc4b956e25c2771ae97003837489c1b25ce4d12e76689738bc4b955e2dc26716e973877489c3b25ce5d0012e76e89738fc4b957e2dc2771ee97380f489c0725ce4312e76189f388c4790054e23c26711e97384f489c2725ce5312e76989f38cc47956e23c27719e9738002f489c1725ce4b12e76589f38ac47955e20c4be970269238134b9c4924cea4001267328933b9c49942e24c2971a69238534b9c6924ceb412673a8933bdc419002e71669038334a9c9924cecc1267168933abc4994de2cc2e71e69038734a9c00b924cedc12671e8933afc4994fe2cc2f711690380b4a9c8524cec21267118900b3a8c4594ce22c2e719690384b4a9ca524ced212671989b3acc4594ee22c2f007146489c91126794c45941e28c96382b4a9c9524ceca12671589b3aac4594d00e2ac2e71d690386b4a9cb524ceda12671d89b3aec4594fe2ac2f713690381b004a9c8d24cec612671389b3a9c4d94ce26c2e71b690385b4a9cad24ced61267001b89b3adc4d94ee26c2f717690383b4a9c9d24cece12671789b3abc4d94de200ec2e71f690387b4a9cbd24cede12671f89b3afc4d94fe2ec2f710e9038074a009c8324cec112e7108973a8c4394ce21c2e718e9038474a9ca324ced112e718008973acc4394ee21c2f714e9038274a9c9324cec912e7148973aac4394de29c002e71ce9038674a9cb324ced912e71c89f33a8973aec479bdc47983c479a3c4007993c4394fe2bc59e2bc45e2bc55e29c2f71de2671de2e71de2171de2971de002571de2d71de2371de2b71de2771de2f713e20713e28713e24713e2c713e2200713e2a713e26713e2e713e21712e90389f94389f92389f96389f91389f9538009f9338174a9c8b24cee725cec512e70b12e78b12e74b12e7cb12e72b12e7ab0012e76b12e7eb12e71b12e79b12e75b12e71289f36d89f31d89f35d89f33d8900f37d89f30389f34389f32389f36389f31389f35389f33389f37389f30b89f3004b89f32b89f36b89f31b89f35b89f33b8973a9c4f9bdc4f983c4f9a3c4f99300c4f9b3c4b94ce25c2e71ae9038574a9cab24ced512e71a8973adc4b94ee25c002f716e9038374a9c9b24cecd12e7168973abc4b94de2dc2e71ee9038774a9c00bb24cedd12e71e8973afc4b94fe2dc2f711e90380f4a9c8724cec312e7118900f3a8c4794ce23c2e719e90384f4a9ca724ced312e71989f3acc4794ee23c2f00715e90382f4a9c9724cecb12e71589f3aac41996cae14c247126963893489c004925ce64126772893385c49952e24c2571a69638d3489c6925ce7412677a8900335ce2cc207166943833499c9925ce2c12675689339bc4995de2cc2171e694003873499cb925ce3c12675e89339fc4995fe22c20711694380b499c8525ce220012675189b398c4595ce22c21719694384b499ca525ce3212675989b39cc459005ee28c90382325ce2889b382c4192d715694382b499c9525ce2a12675589b3009ac4595de2ac2171d694386b499cb525ce3a12675d89b39ec4595fe26c2071003694381b499c8d25ce2612675389b399c4d95ce26c2171b694385b499cad2500ce3612675b89b39dc4d95ee2ec20717694383b499c9d25ce2e12675789b39b00c4d95de2ec2171f694387b499cbd25ce3e12675f89b39fc4d95fe21c20710e00943807499c8325ce2112e750897398c4395ce21c21718e943847499ca325ce003112e75889739cc4395ee29c20714e943827499c9325ce2912e75489739ac400395de29c2171ce943867499cb325ce3912e77512e75c89f37a89f30689f3460089f32689739ec479b3c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e200bc4be2bc5be2bc47e2bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c0044e27c54e27c4ce27c5ce27c42e25c20713e29713e25713e2d713e23713e2b00713e27712e943817499ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce005725ced724ced725ce3724ce3725ceb724ce2512e7db12e73b12e7bb12e77b0012e7fb12e70712e78712e74712e7c712e72712e7a712e76712e7e712e7171200e79712e75712e7d712e73712e7b712e77712e75289f37b89f30789f34789f3002789f367897399c4b95ce25c2171ae943857499cab25ce3512e75a89739dc400b95ee2dc20716e943837499c9b25ce2d12e75689739bc4b95de2dc2171ee94003877499cbb25ce3d12e75e89739fc4b95fe23c20711e94380f499c8725ce230012e75189f398c4795ce23c21719e94384f499ca725ce3312e75989f39cc479005ee2bc20715e94382f499c9725ce2b12e75589332cb5c39948e24c2c7126910038934a9cc924cee412670a8933a5c4994ae24c2d71a69138d34a9ce924cef4001267b8c49941e2cc2871669238334b9c5924ceac1267368933bbc49943e2cc002971e69238734b9c7924cebc12673e8933bfc45940e22c28711692380b4b9c004524cea212673189b3b8c45942e22c29719692384b4b9c6524ceb21267398900b3bcc4192171464a9c5112670589335ae2ac28715692382b4b9c5524ceaa1200673589b3bac45943e2ac2971d692386b4b9c7524ceba12673d89b3bec4d94000e26c28713692381b4b9c4d24cea612673389b3b9c4d942e26c2971b692385b004b9c6d24ceb612673b89b3bdc4d941e2ec28717692383b4b9c5d24ceae1267003789b3bbc4d943e2ec2971f692387b4b9c7d24cebe12673f89b3bfc43940e2001c28710e9238074b9c4324cea112e7308973b8c43942e21c29718e9238474b009c6324ceb112e7388973bcc43941e29c28714e9238274b9c5324cea912e734008973bac43943e29c2971ce9238674b9c7324ceeb24ceb912e7f512e70d12e7008d12e74d12e73c89f36689f31689f3568973bec4799bc479bbc47987c479a700c47997c479b7c4798fc479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c400f988c4f9a8c4f998c4f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c0056e27c4ee25c28712e92389f9738174b9c2f489c2f4a9c2f499c2f4b9caf48009caf4a9caf499caf4b9c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725ce00f724cef725ce0f24ce0f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f0024ce2f25ceaf24ceaf25ce6f24ce6f25ceef24cea512e7f712e70f12e78f1200e74f12e7cf12e7328973b9c4b942e25c2971ae9238574b9c6b24ceb512e73a008973bdc4b941e2dc28716e9238374b9c5b24cead12e7368973bbc4b943e2dc002971ee9238774b9c7b24cebd12e73e8973bfc47940e23c28711e92380f4b9c004724cea312e73189f3b8c47942e23c29719e92384f4b9c6724ceb312e7398900f3bcc47941e2bc28715e92382f4b9c5724ceab1267581a873391c49958e24c00227126953893499cc925ce1412674a893395c4995ae24c2371a69538d3499c00e925ce70893383c49951e2cc2471669638b3489c5925ce6c126776893387c4009953e2cc2571e69638f3489c7925ce7c12677e89b380c45950e22c2471169600388b489c4525ce6212677189b384c45952e22c2571969638cb489c6525ce7200126779893342e28c9438a324ce0a1267b4c45951e2ac2471569638ab489c550025ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b30081c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c257100b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d2500ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f89738000c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e009638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce006912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b2400ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f3004e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f3610089f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc400f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f0091385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a009cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c005f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f0025ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce007512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c400b953e2dc2571ee9638f7489c7b25ce7d12e77e89f380c47950e23c24711e9600388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce730012e77989f382c47951e2bc24715e9638af489c5725ceb0b40e67228933b1c4009944e24c2a71269338934b9c2924ce9412672a8933b5c49946e24c2b71a6930038d34b9ce11267068933a3c49949e2cc2c71669138b34a9cd924ceec12670e008933a7c4994be2cc2d71e69138f34a9cf924cefc12670189b3a0c45948e22c002c711691388b4a9cc524cee212670989b3a4c4594ae22c2d71969138cb4a9c00e524cef2126784c419297146499c1524ce6889b3a2c45949e2ac2c7156913800ab4a9cd524ceea12670d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa1200670389b3a1c4d948e26c2c713691389b4a9ccd24cee612670b89b3a5c4d94a00e26c2d71b69138db4a9ced24cef612670789b3a3c4d949e2ec2c71769138bb004a9cdd24ceee12670f89b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e700008973a0c43948e21c2c710e9138874a9cc324cee112e7088973a4c4394ae2001c2d718e9138c74a9ce324cef112e7048973a2c43949e29c2c714e9138a74a009cd324cee912e70c8973a6c4394be29c2d71ce9138af9338e74a9cd74b9c3700489c374a9c37499cf324ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d1200e79d12e75d12e7dd12e73d12e7bd12e77d12e7fd12e70312e78312e74312e700c312e72312e7a312e76312e7e312e71312e70289f34989f32989f36989f3190089f35989f3398973a1c4b948e27c5ee25c2c71be2071be2871be2471be2c7100be2271be2a71be2671be2e71be2171be2971be25712e9138df9638df9138df009538df9338df97383f90383f94383f92383f96383f91383f95383f93383f970038bf9038bf9438bf9238bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c003f4a9c3f499c3f4b9ccb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a009ceb24cef512e7068973a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e008973a7c4b94be2dc2d71ee9138f74a9cfb24cefd12e70189f3a0c47948e23c002c711e91388f4a9cc724cee312e70989f3a4c4794ae23c2d719e9138cf4a9c00e724cef312e70589f3a2c47949e2bc2c715e9138af4a9c61e91cce4412676200893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c002771a69738c325ce0c126746893393c49959e2cc2271669538b3499cd925ce001c12674e893397c4995be2cc2371e69538f3499cf925ce0212674189b390c4005958e22c22711695388b499cc525ce1212674989b394c4595ae22c237196950038cb499ce525ce08893352e28c92382b489cd112674589b392c45959e2ac220071569538ab499cd525ce1a12674d89b396c4595be2ac2371d69538eb499cf50025ce0612674389b391c4d958e26c22713695389b499ccd25ce1612674b89b30095c4d95ae26c2371b69538db499ced25ce0e12674789b393c4d959e2ec227100769538bb499cdd25ce1e12674f89b397c4d95be2ec2371f69538fb499cfd2500ce0112e740897390c43958e21c22710e953887499cc325ce1112e74889739400c4395ae21c23718e9538c7499ce325ce0912e744897392c43959e29c22714e009538a7499cd325ce1912e74c897396c4395be29c23715e2771ce9538af9738006f90386f94386f9238e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b0024ce3b25cebb24cebb25ce7b24ce7b25cefb24cefb25ce0724ce0725ce872400ce8725ce4724ce4725cec724cec725ce2724ce0512e79312e75312e7d312e7003312e7b312e77312e742897391c4f9bcc4b958e27c41e27c51e27c49e27c5900e27c45e27c55e27c4de27c5de27c43e27c53e27c4be25c2271be2d71be237100be2b71be2771be2f717e20717e28717e24717e2c717e22717e2a717e26717e002e717e21717e29717e25717e2d717e23717e2b717e27712e9538bf97387f9000387f94387f92387f963897499ccb25ce1512e74a897395c4b95ae25c2371ae009538d7499ceb25ce0d12e746897393c4b959e2dc22716e9538b7499cdb25ce001d12e74e897397c4b95be2dc2371ee9538f7499cfb25ce0312e74189f390c4007958e23c22711e95388f499cc725ce1312e74989f394c4795ae23c23719e950038cf499ce725ce0b12e74589f392c47959e2bc22715e9538c3d23b9c8924ce00c41267128933a9c4994ce24c2e71a69038534a9ca924ced412671a8933adc400994ee24c2f71864b9c1924ce8c1267268933b3c49945e2cc2a71669338b34b009c3924ce9c12672e8933b7c49947e2cc2b71e69338f34b9c0524ce821267210089b3b0c45944e22c2a711693388b4b9c2524ce9212672989b3b4c45946e22c002b71969338cb4b9c111267a4c4192571569038a325ce8a12672589b3b2c4590045e2ac2a71569338ab4b9c3524ce9a12672d89b3b6c45947e2ac2b71d6933800eb4b9c0d24ce8612672389b3b1c4d944e26c2a713693389b4b9c2d24ce961200672b89b3b5c4d946e26c2b71b69338db4b9c1d24ce8e12672789b3b3c4d94500e2ec2a71769338bb4b9c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb004b9c0324ce8112e7208973b0c43944e21c2a710e9338874b9c2324ce9112e700288973b4c43946e21c2b718e9338c74b9c1324ce8912e7248973b2c43945e2009c2a714e9338a74b9c3324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f0071de2071de2871de2471ce93386f96386f91386f9538e74b9cb7499cb74b9c0077489c774a9c77499c774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f00499c0f4b9c8f489c8f4a9c8f499c8f4b9c4f489c0b24ce2725cea724cea72500ce6724ce6725cee724ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f900b2c4f98ac4f9aac4f99ac4f9bac4f986c4f966023913c7715688a8141d3db00072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab4456ac52714054950a0015065689ae52b96abfaa9523aa464657181839a862d50a8362a65d3c84637e00eb2f1a73c49fbb442e491fbaf9372cdcf138270de1fc7b5bb26c270be198df00918c397908c7fcae64cc294238e6f724634e19c231bf2f1973aa108ef903c90098538770cc1f4ac69c268463fe4832e6b4211cf3c79231a70be1983f918c190066c8c6fca964cce1211cf36792316708e1983f978c396308c7fc8564cc99420038e62f2563ce1cc2317f25197396108ef96bc998b38670ccdf48c69c2d846300fe5632e6ec211cf3779231e708e198974ac69c338463fe5e32e65c211cf30f009231e70ee1987f948c394f08c7fc9364cc794338e69f2563ce17c2312f938c00397f08c7bc5c32e602211cf30ac9980b8670cc2b25632e14c231af928cb9700008c7bc5a32e622211cf31ac9988b8670cc6b25632e16c231af0be1989384fd00f36f7c027fdf16b894a6325496ca51f9c0cfa0488a0acc078aa68a54892a530015aa4ad5a83ad5a09a548b6ac78cbb2ed5a3fad4801a52236a4c4da82935a300e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a52002fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d6368002c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d3000d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f000fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b488009ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d007a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adf00d30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb40085b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a004e27e8249da2d37486ced2393a4f17e8225da2cb7485ae5260054b448929090025a564949c52504a4a45a9290da5a574949ec2290365a44c9499b25056ca4600d92907e5a45c949bf2505eca47f9a90015a44254988a50512a46c5a90495a40052549aca50592a47e5298222298a2a503455a44a5499aa5055aa46d5a906d500a45a549bea505daa47f5a90135a446d4989a50536a46cda905b5a456d49ada00505b6a47eda90375a44ed499ba5057ea46dda907f5a45ed49bfa505fea47fd0069000da441349886d0501a46c369048da451349ac6d0581a47e369024da449003499a6d0549a46d36906cda459349be6d0753497aea71be846ba89e6d1cd74000bdd4af3e936ba9deea03be92eba9beea17be93eba9f1ea007e9217a981ea10047e9317a9c9ea005f4243d454fd333f42c3d470b69113d4f8be9057a915ea20097e9157a955ea3d7e90d7a93dea225f436bd43efd27bf43e7d401fd247f431007d429fd267f4397d415fd257f4357d43dfd277b494bea71fe847fa897ea66500b49c56d04a5a45ab690dada575b49e36d046da449b690b6da56db49d76d04e00da45bb690feda57db49f0ed0413a4487e9081da563749c4ed0493a45a7e90c009da573749e2ed045ba4497e90a5da5c0c144224a4c49282925a3e494825252002a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc940087f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a004f111449515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea523d00aa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1da8230075a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c134840086d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d2349a4e00336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d1ed740007dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f4042da00027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41abd4e006fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cfe90b00fa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a5a4d006b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682feda300fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f374812ed20025ba4c57e82a8571909d881253124a4ac92839a5a094948a52531a4a4be928003d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a004885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e09784488aa20a00144d15a91255a62a5495aa5175aa4135a916d5a63a5497ea517d6a400da9110035a626d4949a51736a412da915b5a636d496da517bea401da91375a62ed49500ba5177ea413da917f5a63ed497fa517f1a400369100da621349486d1701a41002369148da6313496c6d1789a401369124da6293495a6d1749a41336916cda60039741dcda5ebe906ba916ea2797433dd42b7d27cba8d6ea73be84eba8beea6007be85eba8feea707e8417a881ea647e8517a8c1ea72768013d494fd1d3f40c003d4bcfd1425a44cfd3627a815ea497e8657a855ea5d7e8757a83dea4b7680900bd4defd0bbf41ebd4f1fd087f4117d4c9fd0a7f4197d4e5fd097f4157d4ddf00d0b7f41d2da5efe907fa917ea29f69192da715b49256d16a5a436b691dada7000db49136d166da425b691b6da71db49376d16eda437b691feda70374900ed100613a4247e9181da71374924ed1693a4367e91c9da70b74912ed165ba425729002c29eb3f25a62494949251724a41292915a5a6349496d2517a0aa70c949132005166ca4259291b65a71c949372516eca4379291fe5a70254900a51612a424500a91815a71254924a51692a4365a91c95a7c03f4944521455a068aa4895a8320055a1aa548daa530daa49b5a836d5a1ba548fea53036a488da83135a1a6d48c009a530b6a49ada835b5a1b6d48eda5307ea489da83375a1aed48dba530fea4900bda837f5a1bed48ffad3001a488368300da1a1348c86d3081a49a368348da100b1348ec6d3049a489368324da1a9348da6d30c9a49b36836cda1eb682e5d4f0037d08d7413cda39be916ba95e6d36d743bdd4177d25d7437dd43f7d27d743f003d400fd243f4303d428fd263f4383d410be8497a8a9ea667e8597a8e16d222007a9e16d30bf422bd442fd32bf42abd46afd31bf426bd454be86d7a87dea5f700e87dfa803ea48fe863fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d004f3fd08ff413fd4ccb6839ada095b48a56d31a5a4beb683d6da08db48936d30016da4adb683beda09db48b76d31eda4bfb683f1da08374880ed3113a4ac7e800389da093748a4ed3193a4be7e83c5da08b74892ed315ba4a61c958ff29312500a1a4948c92530a4a49a92835a5a1b4948ed2533865a08c9489325316ca4ad900283be5a09c948b72531eca4bf9283f15a08254880a53112a4ac5a83895a09200548a4a53192a4be5a83c05fe612892a2a802455345aa4495a90a55a56a549d006a504daa45b5a90ed5a57a549f1a50436a448da90935a566d49c5a504b6a4500ada90db5a576d49e3a5047ea449da90b75a56ed49d7a504fea45bda90ff5a5007ed49f06d0401a448369080da561349c46d0481a45a3690c8da571349e26d000449a4493690a4da569349d66d04c9a45b3690e5d4773e97aba816ea49b681e00dd4cb7d0ad349f6ea3dbe90eba93eea2bbe91eba97eea3fbe9017a901ea28700e9117a941ea3c7e9095a404fd253f4343d43cfd273b49016d1f3b4985ea01700e9257a995ea157e9357a9ddea037e92d5a426fd33bf42ebd47efd307f4217d00441fd327f4297d469fd317f4257d455fd337f42d7d474be97bfa817ea49fe800675a46cb6905ada455b49ad6d05a5a47eb69036da44db499b6d056da46db690007eda45db49bf6d05eda47fbe9001da44374988ed0513a46c7e9049da45374009aced0593a47e7e9025da44b7499aed0550a4bcefa4f89290925a564949c5200504a4a45a9290da5a574949ec2290365a44c9499b25056ca46d92907e5a45c00949bf2505eca47f9a90015a44254988a50512a46c5a90495a452549aca5059002a47e529f0cf7391144515289a2a5225aa4c55a82a55a3ea54836a522daa4d0075a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a300f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d200201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c5368002a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f900741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d004e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd004aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe90033fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b680025ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb40087f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a004f17e8225da2cb7485ae52580ad67f4a4c49282925a3e4948252522a4a4d6900282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523e00ca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f817f24008da428aa40d154912a5165aa4255a91a55a71a54936a516daa4375a91ed5a70006d4901a51636a424da91935a716d4925a516b6a436da91db5a70ed4913a510067ea425da91b75a71ed4937a516fea437da91ff5a701349006d1601a42436900180da711349246d1681a4363691c8da709349126d1649a4253691a4da71934009366d16c9a43d7d15cba9e6ea01be9269a4737d32d742bcda7dbe876ba83ee00a4bbe86eba87eea5fbe87e7a801ea487e8617a841ea5c7e8717a8216d093f400143d4dcfd0b3f41c2da445f43c2da617e8457a895ea657e8557a8d5ea737e8004d7a8b96d0dbf40ebd4befd1fbf4017d481fd1c7f4097d4a9fd1e7f4057d49005fd1d7f40d7d4bdfd152fa9e7ea01fe927fa9996d1725a412b6915ada635b40096d6d17ada401b69136da62db495b6d176da413b6917eda63db497f6d17e3a004007e9101da62374948ed1713a4127e9149da6337496ced179ba4017e9125d00a62b7495c252b2fe53624a4249291925a714949252516a4a4369291da5a77000ca4019291365a62c9495b25176ca41392917e5a63c9497f2517e2a4005a9100015a62254948a51712a4125a91495a6325496ca51790afc5375244551058aa6008a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a086d4881a5300136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a5317ea4adda8003bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac368388da09134008a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b66d31cba008ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd4577d33d74002fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e8697a869ea500e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25bb484dea60077e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abea66fe85b00fa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48ed6d306da00489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a4887e8301d00a1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da1ab14968a00f59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca489928330065a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c008a53092a49a5a83495a1b2548eca53e0040391144515289a2a5225aa4c55a8002a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d400825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea004d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8d00a3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d740023dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd00083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea700c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f003ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30f00f423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b600d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e2700e8249da2d37486ced2393a4f17e8225da2cb7485ae52586ad67f4a4c4928290025a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e00392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a200d25486ca52392a4f81936d44521455a068aa4895a83255a1aa548daa530daa0049b5a836d5a1ba548fea53036a488da83135a1a6d48c9a530b6a49ada835b500a1b6d48eda5307ea489da83375a1aed48dba530fea49bda837f5a1bed48ffa00d3001a488368300da1a1348c86d3081a49a368348da1b1348ec6d3049a48930068324da1a9348da6d30c9a49b36836cda1eb682e5d4f37d08d7413cda39be90016ba95e6d36d743bdd4177d25d7437dd43f7d27d743f3d400fd243f4303d42008fd263f4383d410be8497a8a9ea667e8597a8e16d2227a9e16d30bf422bd44002fd32bf42abd46afd31bf426bd454be86d7a87dea5f7e87dfa803ea48fe86300fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d4f3fd08ff413fd4ccb006839ada095b48a56d31a5a4beb683d6da08db48936d316da4adb683beda09d00b48b76d31eda4bfb683f1da08374880ed3113a4ac7e8389da093748a4ed319003a4be7e83c5da08b74892ed315ba4a616958ff293125a1a4948c92530a4a4900a92835a5a1b4948ed2533865a08c9489325316ca4ad9283be5a09c948b7253001eca4bf9283f15a08254880a53112a4ac5a83895a092548a4a53192a4be5a8003c054e3c1349515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea00523daa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1d00a82375a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c100348486d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d234009a4e336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d100ed7407dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f404002da027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41a00bd4e6fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cf00e90bfa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a005a4d6b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682f00eda3fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f37481002ed225ba4c57e82a85a565fda7c494849252324a4e292825a5a2d49486d252003a4a4fe19481325226ca4c59282b65a3ec948372522eca4d79282fe5a3fc5400800a52212a4c45a82815a3e254824a52292a4d65a82c95a3f21438095324450051058aa68a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a08600d4881a53136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a531700ea4adda83bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac36838008da091348a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b0066d31cba8ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd450077d33d742fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e869007a869ea5e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25b00b484dea677e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abe00a66fe85bfa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48e00d6d306da489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a480087e8301da1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da100ab14968ef59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca004899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a8301500a1a2548c8a53092a49a5a83495a1b2548eca53e0846491144515289a2a522500aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da8290035a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed483007a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d0063682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4b00d7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741f00dd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea38500b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea17700e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a004adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da200cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed200313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52587ad67f4a004c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b2005236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e2500a82495a2d25486ca52392a4f8193f345521455a068aa4895a83255a1aa548d00aa530daa49b5a876e07f15a92ed5a3fad4801a52236a4c4da82935a3e6d482005a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d007da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da300f1348126d2249a4c53682a4da3e9348366d22c9a4d81f79a0fbc8f7be03dd20003ef3f1e786fefc0fb6607de933af07ecf81f7520ebc4f71e03d8003efaf1b0078efdac0fbc206de7335f07ea681f70a0dbc0f67e03d2e03ef1f19786fc6c000fb1e06de5330f07e7d81f7c20bbccf5ce03ddc02ef8f1678efb1c0fb7a05de00332bf07e5481f77a0abc8f52e03d8a02efff13786f9dc0fbd604de1326f07e002b81f73209bc4f48e03d3802ef6f1178ef88c0fb3204fe2734f07e028173f50007ce831f38c77ce0fced81f39907ce151e38df75e0fccf81f32107ce0f1c38005f6ee0fcb181f3a906ce2f1a38df66e0fc9381f33106ce4f18385f5fe0fc750081f3b905ce6f1638df57e0fc5781f34105ce8f14385f50e0fc3981f3c904ce00af1238df48e0fc1b81f35104cecf10385f41e0fff703ffcf1ef8ffeec0ff3b0007feff37f0ffb089fff96f76813fb5fdc7a574d82f97987fc1098bf953dcb000983fc9098b79692e2ce629bab09843f5b09855362c707ec6c0f90a03e7ef0b009ccf2e707eb7c0f9ce02e7ff0a9c0f2b707ea8c0f99202e70f0a9c4f27707e0099c0f95602e71f099c8f23707e8a0254900a51612a4245a91815a71254924a0085fdf6922ae87ae6988f5977d5cd3976e9a286c1f76b1ff371c1e27c4b72ef004adc2df8b60ebf735bd7dfb9adfbefdc362de663bde22bbb2e4c34e754f06d0073633e1e2954a44ea636ff9805ff7799f73b63987f8ddb52c67cac18f33176009e248ef918786c038f6b9d98cf23fedc253255d074433dfd2a1115fb053fa60009e00fbc3cf37fcb7b42cd9fd86926c0f4ff71cef2c0a5d99c5fa61f772c81004bba98cf1305cdcbd8ef092c33b1eb4be07aeea0ef0f9e5e58ccf4e24e27f600f6841c6b9588e87eb1d34f9a00d3e7a1fac77984ff31c639bf9d97b1b7259d00f3eb9f1d7c5bb2a0db9206cdcf2271e64f422c6bc1f3276196b5c87f9caff3005acb57ec7a5a7f4e42fcec8801b1d36f1033fdb0ff7cda9171bf103bed86090063af103bfd460933fd41b1d36ffcefcf9bc83f9a78ecb49bfcfbd38ef88373007cfcdfbea3e97f30ed3f3abf48e0d824b0ee958f995eecf62f785b16bb0d4b00e0f52632519c9f1716e76785c5f9f9a9c312769f9428cecf8bf5c49d3fb1d70003c778b1fb87c10327d41f3d6ac2b8befd27341d357e42df51fd07060f217800b21982be1e7c7bf025ee7de2de2feefdd3c5737b2c334dd0d753cc09fbd5d000fef131e86bb19bead84d77cae0fbc7b92d55d06d49e7fcda953ae6f3a4413f0027785ab18e6471ee5f2ee6f3f0988fc983be27f6fb33c4f3f393c7f9f9bf7200c7f3b5e04528eeb492c4f3b5d8fb070ef78bc75c0fccd7d85535e99c5fa61700aa45b272958888585fecbc4f16f6ebc5332ccecf4f16e7fed1319fa78e33de00d85d719dffd039a872dfc84115fa0eea5bb1ef8001d1fdfb668a33fde0791600984fb1bf96b80fbba307fcefb0fbf72fa13aec4e1ff6cbf56c41df13b8340f009a76a238b7b588e7e7ba0fbf23a232c7e34f1a34b6c0e57f8797bfb9fceff000f2bf787819fbab5d92b0df2ebb71f741710fb1e21e82855d631af11debc4fd001949e2995e8339bfbe2de9bf608b6fdd0b8be76bf1d992fc812d693cb6b8d3004dfc3be3b8d6cf093605ffba1e775e278a735b7c76c3b14ec998cfffdbc73a002562aeffef58e7772f1512f858242a81f7cbf11eebc4b79df8bd639df87efd008e3dbef9a3e3a0e0639db8bfb227d05369fd13f8318bfcdf5369ffd1e57fc7003affc5639d42bf4cfa57eb7db2b06b1fa7248b73dfbc311f03cf2fe4bac6f40092ffcef462b72349aef17d0562aea78a671affce3cf9834b647c8e44f138ec00c71ab1cf01fdb78f356ac75c971f6b0c941f6b44ff5d8e3592c4b95f7cdff3007bc7237fd54b7109349ffeef714e9e40d38f9d6fc982e65d7cbf47c6fefcb800dbc3d8dbe3fb181616ffcb1ffff71c7958c21e7bfdded882fdb1cb468638f7008f3b0fae35ad64ffe6b4fe9b8f69f0bc0e7e4cff719f39bfdcf67b2f87278b00735bb239bf1d63e038227fd0fdae750c1cb85fa9a0eb5171e651426e9f136a00bb10b8640ebbf6b14decd7feeeaf5dc53efff0777eed2af65835f818eb7fbf004ffde6f2bfdfa7fe8bbf4f550dfb659e5f6bbb1cfc7c49ecf5f0b0dfee836200bf3781f7215189c27ebb9f8cbbbf0bfef9813f1dc81a737dfc84d1e306361d00d570cac0fe13270c1d3daa7edffe4306061f14c49d48583c838fbd2d51d0d700af759018f77b9204dd3ff862f845ac56cce7ffed5fc4fac75c97ff5d69e45f00f58b5802ad881563a79f2261a61fef2f62c16389bd3d76198e7d3237f87aac0029f63e2d83eed3f21af76915749f5641f7095cfed32798e3fbe5a4459cdb82005f9c6a19e7b6e00d73ac29b0018fddb005aee70d32062eade7fc624f14e7b6003641b7fd452fde0ffadf8bf7ffd2e57f0760bf5cfe7f7f00d620667ab1eb7900f25f7ed42fbf748425e876b642a2383f2f2c2cfe2747627f7eeab004ddaffc00df932329e278e2ce9fd8ed56f0df86f6ef3b62449b714327f59d30b0d1c45100fd03c778c143089e6ce2788678ad43bee0cd6fdcfbc5dde4c7ddccc7ddb407006fce83a77badef8ffbb5d89f1d1ef6dbdfe393c731c67d48e37e2dee73427100bf3f70896f9797e81a1f637f4ed81ffc9cf8ccbff7e7d1ffeecf49e8bfbdcb0010c71afcb31278375731be4382b038f3f0f71ec7e0cd48dc75202c9ef91b1600749fe0e7d09a054d37eefde27ae27b6e2fbedfd9e23e5ef13ddffb47cf1dc6009defa9aef173eac47c1ef1e72e95e2db74c71d7ff03c8ffb78a40cbaeddf7d003c62c7f4ef3e1ec1f328459cdb82d7b524716e0bf6c54ec3f0ab6bd398cfff00dbbfba06eff2c3c37ebbecc6ddb6c7f777657fd5f32bb1cb45ecbc8eeb491e00747bf0fddbc67c0c8cb5679cb105af23bff77a475c43f0fd83c79d34cefc0a005ec753fc35f3eb770f57e29b5fb1f78f5def935fe3fec1f33ff8feb1ff021c00f8bc4fccf5f8f6ab49e2dc96389e69c7b7cec7cec3c0f21aeaf5656095aa030022aa0e1ad8373232326a40c4c03f5a5f42fdf3a32bf6addcbf6fe5c8c8aad1009103a3232bfed1cf8ffd955afe9afffffe85f90f2ea1fa5f8ab461bf5ccf1200733d815f2fecf7df7cbdf07f4fab5cf3f2bfa755fe8b4fab648f995e607d8c00fd5bde51a3270c1d34b5feb8813c3730a0d5c41123860e1a3a705cf09afc7b0047e071ef97e81af7331c0de789f9fcef70341c1634bf823da13ca24d15f433001360fa11c1477e6171c612fc73e3ce83a4f17cdfb596bbc4713efede7d13fd00ce74d3c5735bec34639f440bf6c68e23559c8f5983a69b104742591266faf1003e565983ae678933cee0f95d274486d8e9c5aeb3f13d9313f799c7e0bf4a0a00f6250abd2f322cce25be67da622fb1cb4c96a0afc5cecfff0f02a8a7e6659c000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex b/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex index 2965325e97f3..164520d20c73 100644 --- a/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex +++ b/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex @@ -1 +1 @@ -00000000e7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d9923ced3716a04d81b58822bc3e1843626aa2884888b1a2d2250e79fb7d41a365e16ad977a85a570bedc6785d159f137035d3bf9891042ee3af20488686aec168b0624b9dd486acffb15815318ac8eb07814d48ffeca47da1f4de4a733b723a1e424eb989517d084b2d95f40b9837d5e6d8468dd84e20d6ad727a7617a5eb395e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000d91839191a8b89c75f0ad79c19ba53a8bdfcb25bd4f8d33bfa11f1f52528a8ee58fc25430000000000000000000000000000000000000000000000000000000000001476001f8b08000000000000ffed5dcd8f64c951cfeafae8aeeae9e99ae99e5defee0098a99d9df12e60e07dd597b93402db3266910009c18d5755afec01b36dc6bd00acd707d408092410321c015f913880f803cc85131790b9db075bf2d196ff00005b96ebedbea8faf5afe2bd7aaf2ab3a76777539aa9ea17911191119191999100f9b26ae6fd72b8f857cbbe37b3cf96592f8273967d7abb15df222dcfa59cb500e744cebde744cefa732267c3a29ca96c7573b5d896b7e940afb6656c3d073200ee5bb6bbc8d8c8be1f2cfeb517ff3ae6fdd8bb06c486ed658e93c25303a70a00dc079c3ca21f23e5a4e55ff656df5fca3e7fede9d3f8ddde93b766c9577be7006f5ff4cee7bdc9f9db6fcdbe8215ff1d2adecf3ee38b8be44fbf7cd1bb38ef00c5b359ef9d27175fec9dff79f274fea5f377b0ee37b765fabf3b30fdf6b64c007fb003d31f6fcbf4567d7ba6afd4b764fac91d9886db32fdd4b6153fbd83b400bf05756f679fbf77114fff6451f3bc374b922f23f6bbdb8af8d73b88f8b7db0032fda71d987e6b5ba6dfdd81e91f34b664fa47db56fce2b615df69546be63200d67e2dabd8cefe96b82071fe2cfbdbdbadf86da06b9bfec88be66d73b55896003f6c6734f7ddd01f09fd0337f43d91fbd72f57f4b12dc257bacb672f57bafc002cd449ff1dc17743740506e38bf90d82e1e4f2d304033f369f2158d3accb24007a6b415b2cfa956bbb84d2369c27895e8577db0defa846fc8c59e91f61c2bf00639cf601bf46fc441ed68ff8d651f659bf5cc9d32258e372bd1d026b024cec009b7ebe0a78ec5bfb80f74978ce3edf30eb7d44e062d73ad4b7e8b393b6b9da00976cfb8da677b64903607582a1de714d207a3f59fcfbfce54a8fa2b3b4ec5f003a69d372f17390d16f026fe189b2ef113e7ec75825cf7ed1ac60efb507ea09009f3a3c139ec7d9df2d80b52f37d36a28b4ba0a7e8b68ed2bb4f099b43bed13000fb3efe91a2eb5dfe7324373cc4ccb59f6e96d59c259321c0583b1c82afed00034ebbe2e7cb57e603341e67acc16fa1d8b7a94d2243dfe03d83522fde15860002f71178ddbe66aecb04b7fd0d7e2ac3dfac3a1d06fba913fd1e63616f51f6900f30b8bfa59daf7d009fd60d93f6eb9d1ff721c3d02fa16e3872ff30b59e80b000f63567def189edb8b2d7ebfecdc4ff87748565773bf639287f583f38c14d600556415dddd01983dbfe8f7bb0a6fe485306c4757698746ab6991d6ad1b209700d8e32ed4b7d84fe79aac772db6bb6e91964ddb1ede50b9b6d5bdf8c909d4b700381e459aac2716dbbd6791964ddbda6c637b4b5a62db53a86fd1b69e26eba900c576df54dbd62cd26a11ad63a22363bee02cd7f384ff97d9e791c25fe4157f00b807cf2dce6f0635e2678c3ebfb947b2a23c22774781edb2811dc7e130f2a3002499fb9e1ff8c31ad11759f919fbe00b0abe3657125dbf689ce85acd07bd00007a7d4f3e80dd235813602223e683da44d3b6fc65f48ffcbb0a0c7300556c7900d75cf535d41bf66f63d6fb8ea3bd9ad26b03e1df31ebb1c8c5da60cfacebb400a6e894f719b06e578175e03bc2904f5de1f33cd2e2fd06d4611affff7eef2a00de21d0afe57c8a3cfc8ced714ba1a5adb19fc51e87f0ef90acae7cf988e46100fdb0ee6e2bb2761518fbcc6d858f36465c172d81e11c48da7d6cd67d81d7af009ade8e0a64c0fa82e7d8e7fcb6d27e177b86381797f127edc3ff4a3a93795900137486756f031cf17fa5bea2f96fd9b363c2415b1e9b75dbf29cf29074c2310086edd72ae08330f69396c2a755c0e75609990dd03a5668d5cc7a3fe636a2ad00cab4e35645dedafc5feb039aad96fb43c6690c0c44d63b15db7657c1c7bc1b00c7112d27a1e5a22cce25977df3c4ac1781e1ba146dcfa5417fa3dca90ffd76007d4597f19827f6d75382a10e658eaaadd76de69f79bd65149971be8f7eca4500d393c85d554fe8173c17c73c8aac531caf4d8647c4cf2832e3f959f4792e9a009e44eeaa7a42bff818c1705d24a7d8da8aac16f5343e227e4691f965e08d7300632e9a9e44eeaa7a42bf789960b81e7f25fbce7a4acb59f6197a5130480651009c24a1978cc7a3a91f4e47d32499cee2301e0e47de703649e2593f984c83790038997b499c8cfafe249a0c7d6fba9c97bca4d0f6223f08423f1a4e06236fd400f766d351908ce27e3f1ef78359349b075ed01fcc13af3f0e67e368bc781cf900d3d8f3e65e3c99fbcbbdd69715da7e309ecc67fe2cee2f04f106c16c30e9470051324cc2c164ec0dc341d8f7e683f9245e644382d17441771878e371df1bcf00fb43cf5fee83bea2c91d8f16d8c9c09b798bffe6fdd9c88bfad178168de60b007545336fe047de643c4a66437f188f27fd3088e78370a18d7eb8d8a25ceae400be463b994dfc241887d3709a8cfdc97cea45c9e26b1c2ff4134c170a98c7e30099374ee54d26911726f3893f9dc7c1741286fde15c687f5cd3891ffafd41ec000d46f381177a411844de743c9844a99686d160b0306538190d7d7fda0f160c00a251e007b1df9f4cbd304ae281f8d0cf01ed1af9d003786e71fc9ed5889f3100fa9a4af8774856dbf3ed1af11379583fbca6ea29b2761518c62c84219f9ec20047a3f5718bb41a5bd212ff78156067d967300afad3e1783a1dc4fde964b2c800510e67837834f72783d80f26e1c209e3301c45911727f385d387e345071b4d0047e345e858748fb126e7ab16dbfcb2455adbea4fa3757f4b5a628b87003bcb003efd30f26783617f1e2f2244324dc245d05844f7701a87d1229e86137f3c190024e3e120f0a2c170f16c91541e05d1345a586c96847d4dce8716db6c537f2f0059a4f58a455ad246891918636ad9673ba7de59f6b7b75b19978db7c2bf639c00c67fbf48af0f14bd8aee5e5364ed2a305cab200cf9bca6f0d168ddb148ebae00455a2716699d5aa475cf22ad172cd292b9328fdd024f4b5ba9f72c72c9c2bf00639cc605bf48afdabc47f4f3c88d3c5391e7b122cf8302793ee1469e91c8f300ba224f4f91e78ed17d08f5f518bea3dcc283cf0add29c95bf037e5b838778800b192735cc8fb2cfbf4aa95901fb8cd7704218f15580486f640dd70d994eff800c69679a14704c358fe9860189b3f41308cb5e23fc7665dbf3cee68fbfef88c00e368514e0bebd5723e850f3f633e9accc78a0c3cf6693e7fb780cf89c2e74800a9b76b7b3499b5fceeae7cb03d9c9b3db5c8077d91f3bc98873dcb3ebddd4a00e8f6dc49f558c1be8fb19cfd08633bdbfe7580b1bdde50745c3636e1d9976f0056884d79fb80bf595b3d47fa79fb80b7008ef8c7b00ff86646d36d8ee966d900b6acfd4417a90df61a2bba8cc7edc0fe216dba69faad3acea22e9ef5388be300128fb3a85f1e67b57ca2368fd5c68b0724839637d8368e6b327f34ce6ee6f3002cc659f13d9e37a7e52cfbf4762b91dbfc53f558c1beef7a9cc5fecd458b4d00bdecbbad71f692c6d95e062b3bce0afe8ff65634ff8ac65937398d2062fb1900a5dd683fb62dda8f6d8bf663dba2fdaa8eb3a28baae36c0f60d226b181bcff00f28f59c5d4065faf5dad8f3694f36c29de5f6476737b66a27a3fac7ab6c4c60099893263f64d9bdb543d5b82739b2a7a427bb09ed067584f6ef275419ffbb7005164c6fe5df56c89c85d554fe8173c97c33828f1a56dd6e394453d0d581746009119635dd5b3252277553d75155d68fefd06c1ea0a5db73a2cbf8725fc3b66005d972e72e75aae5a3b53aff507a9db35f96361cdacfb4e4379b65740ebc42200ad96455aa716693db048eb358bb4ba166971cc47dfe37ee8684fa4f41e96f000ef18a771c12fd26bd11ed6eb6ee459ee61bda1c8532f90e7e7ddc8b3dcc3fa0005459ec78a3cb887a5ed4f61db586ee1c17b588d92bc05bfa5e0a38ff11e1600f293badabbe016c7f4e5dd1baf9af522b087c0bb6afe4be4ae9aff423d3d240018c6eed70886718ae30c8e4562b763a3eb57be234cdac8cf38d661fdebcae30034a83d589fc73acd8f1b057c5a0a9f23a5deaeedd164669bdbe083ede9129f00ae453ed7ffde45f5feccfec9f91584696b6a2d37c23ac5f85b752f08dff3a80092a3c27b3c3047f5e3daea39d2c71c15d6e51c95e07f0b72543fcd686af760007d506d5bd67ecbfbff4cb51c158e85d2a69bd677aa8e85e8cbb6c642f4351e000b8bf22c68471e0b59bff21d61d2467e5614d3af6befa4682ce4fb7daa8e85004d858febb1b0497c9a16f9607bae7bcc6d9b755f7c96fd99fdb36cbc64fb6000bc649de2585875bf46f454752cc475098e85dedeea39d2c7b110ebf25828f800ff096361487b006ef25637cbb665ed27baa83a16a20d38fe17e530b15f5a5c008b97be17459e5d570e538be55aae22f563396bf285e4e2f3c9bbbf1f7fe9c9002cbe7872fed6ef267ff676f2950b6c0692d69ac9e66f103bc1e32b443a0a9e00211c0ef745cd127c2ded80615eae39285a2a6a57963e4f532d91bbea544b9b0076ee3ad5c2eb4378aa85fae5749376dd42d1151158ff9064b0717d4db74066002d85c553adaad7f634153e45616fdbf668327f50a65ae27beeaed00efb6eaf0079a91e2bd8f771a8673fb2318dc3fecd458b4da2a7aad338f4079cc69dd334004e60388dc3ba3c8d13fcafc334ee294de3708cf9a0dab6acfd441755a7716800031e5bf83a5163ae1ea9611ac8e3a36bf0d6fddc98edafc1e3d72e77b96eee00458bb47a1669e14fc0a47f97bd060f6d2a750e01ce3f8568ccfad863d91fc200b2fe29fc3b24ab2bffec903cac1ff6cfa26be210c6f3fd5daea3133d39beaa006d79d5959662401bf1156c82ff8dac119832c452a40b4de72c0fe2df269cb400c8fc167d98d3586efce98337ffc19f982a33ffe1798dd065df39227c3c9aaa00e1e33c09f1ff6383af959d8f156d29baddd62f1f13857f8764751513b5ad7400ed5a6eed38a8d4d55e2fa8d1f75385cfa9c247a3257dc4ed31e6554c942dd100bcb4eb29c011ffbf4ac6444d179ace591ec4e7ebead3a21d9de0d7293faca9007dd409171ba9fda2f10bedc93151e46ae5e0e3f88cf8ff5732266ab470aba10068ebcf717f2b1d13857f8764751513b5fea96da98aeeee29b26a57b197e9d700da55ec1a2d8e896e7eae601513e5aab1bc6319183311ff3b2563a2a60b4de7002c0fe2f3cf20a44562a2762de487fde84fd5d79baa1efda999753b6abec3310051e46ae5e0e31121c4ff61c998a8d1c2a34882d73357db9216c757f9948e890037e12a9f1e3ce398f84891b5abc06af4fd91c2e791c247a3c557df3e72a39300654cc457f54456cc1b3e0238e2ffa4644cd474d15374c1f2203eea4064939800883eccaf76f500663126dea8d73a058647cd51275cb498d8cbbe578d893da200cbbec33151e46ae5e00bbd26e11f65326d8a891a2d7c8558f05ea4b618e3fc005ad7d23191af757573bd4bf1b5aea81f8e893d4556ed6a47eed73d854f4fe100a3d1e29f9eecb9d149c07e9a17137b0047fcfb1bfcb448179ace591ec4ef01000ec744f461a9fb61bf2e0875c2458b8955af0baa99753b96898922575e4cc4006b8510ff97b688892f022fb9bea8e82747f8aa3b173111ed9dd7dfee900e04003f2ad9dfb46b02b59f2b6179101f75c0fdedfa5fc958e9ee0474a3e98ed7190082ffab25fc272df8b3731887dfd3cda593b645699fbb0f7be06cc326f0dd6400afb4b07db57c31da49daa7bd12c5afac6a3fa95cd4df317fa5e1e3cf0921fe006736d84b3b47253a382ae0833f69e4d2aec391e749bc149f129fe5d20038e200bfb9410769db53dff95c7dd59e94a79323a2bee7151dd177fdda4e8df819a300cf27857f8764b5dc6797f349ed5c29ea47fa62ea9b2766d52f8c622ba1d59300ca360feab1818c3d6578650e01ba3a9ce7e2b0a1e86a1f6067d9a7b75bf1b500838cfb397c6d3baddb4df6d57dbe6ddb7af357b4dd1c80f1bd4def797ca1be007a8eb0bc0dc70ec011ff6db8fff28fb3efc74afda243c17cc0bc515ddffe26008d082ff1d33db31e50392ef1c080ede17ed924fdd4143a7c9fd6d3928b809a002283665f913f1d4845cf070adced6fd8059ec87c04edd67c8a0f9d0afed74a002e0cb4dfffd3062b9607f15107bc898d93b1e5845aa98707e9b5baec2b4720005f112dedef03854ed1617fcd0ff8dd7feda502adefb3def3368c855e93f0ff0066835dddfef6e8ca2ff14059c3e4dbba49f87f57d22f353f2bf24bed801aea00806d89fe2275eb4a3bb07f687537f9651eadaa7e59f43ba50705f21c923c8800cb8bbca6528fc7b6b468feca075da57e9e7ff32131c1ffe792f17cd3988c8b0020ae23f5d2e2f67dcaf287bc857f47699f8b458a76c819f5c363a436c65fc700fa01f9eefa8ef9f3404b7ce219be875afa0e2f7976d3de43e5f525d62d5a2f00d608867cb464e975d1d2ec9dfe3bcbfef6762ced1c7dd9a2afcdc1f35e3c4400393899756cf2edaaad936dea88c7c18659b731f2e735de7f6f18d7b4b6d50b00dae622918e6d6b14b4cdb1bff8acbbefc3faf87fc817b4176cb47911af4bda008a9eb597111a04d35ed2753be75ed967db39f7ff6fb1d181b64e4be3d249db00d48d0e9c2737812fb6d198f5f5675ab65d17682ff1340986f1eb16c1b4f96800d10b62dad82f7e77acf0633fd4721635921bdb8cf8bc76155be7cdd5392f2300f8df2bb921a3e5808be63ea91cb50ce038f68db417eca414bd44aa5d42c0f3000f2d56b08fb30eb8f0e610ea2295d987bec37852ae3b56babde4e2fdf9445a003e8a57373f5e69345b0534b51890370f6c2afcb4b949faef2cfbdbdbb170cc00c479a0761105c7cc834cd04df93b379ba6de40db7b9352f4d232c7492dde690071428b9355e31dde755825ded51479347f14bcb652cfa2eff845feaec9cc7b008f8e72424b9fd6d6d7a8578e55451bddda3852b417acd94af660d2d2ba5cf100c2b89f96fdcb950c0d055fe468127e2f434efbc243f2aba6c2efbd17ae0af0006a399f22dbdab3acaef49bf6e50ac7b67dd3d2b95ce9a1413c519e3dc2c7ef00683b79f6cb8d152c2d874833fbacc333e129b63d00d8e1e5665a4d855657c1003f205a6d85163e9376a7767e9c217488a765dbf8e8537987771cadb343c773006bcff1d9025f7b1108d73243f04b84e5bdfc963766bf0971e253d9f7a231a600687ea2e579f2ce98d89ebb6a6b1d1efbda6e7897de0711fed77599489be4e100b911dbc6d1652b91c8a3ed236b176ddcc9feb1cd50be43a023cfc4b7343f44005db31ecae4aeb5fdf1aaeb8d1ac1b47d163c9b817d85e9885ef2fa3be76a0500ff77a0bf5f507f477e2e728aec6f8e728a4b7fbbbd41477939c53fdcb08ea900517d63d67396c6545ffff20bc1da3ebea6578e738e2ee459e66af110b3a65700be9047f0e3927ad5f454a457ed90b6963b10dda1ce8f893f9f5b401b48bd9b00eebf4f36e8f919e698facf3ac7c47924f413ce3f6967d1b6cd2361bc1559f7001559d1be3c66b581569598ffd512fe90470be79a3f03c748153949c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +27774539896271d6dbe0c1de45ddc44709d1e8d9a9fb686ca3c105d87c417bb8270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f101503049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea2caaad89f1bc2bb35d0fe39aede0ffae1f0f38fb3a97b0d79837c0afbfed1f4209fdbed4bd565f3b26f4e878699a7d7c01656991c2301b73a5d853c614ca44a82a4bf9232d7673acf981fd8244941e3acdc98933db06afcccea33872aaad7ebd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000083abd7ca1eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b94400000000000000000000000000000000000000000000000000000000000000ca001f8b08000000000000ffb593cb0ec2201045a9c528d2c4c4c77f4c534cbb7400e1da7f20ad2c755137eefae9d664264c88d1057013324c80c35c1e85f02a30004a1121821c312a8c0b365eceed8c39c4a956c1be29f91d18a3bef84b587fa3009059e4e103f1339d3fac9073993c9f7ba17dd773d3ac5f09ff3e72f9a7fbcb00e97fffc3b346af5bcc2be1ffc3f8baf7d7c7f3368a3fd26c919cd29b683b00002abe44fe12f9a1241be7f30f986f84af8fa28ca8d3b5b6768d75f66487c1f4007617f03fe287fd06f3a87a78ce04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap new file mode 100644 index 000000000000..74f8f011db72 --- /dev/null +++ b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractClassRegisteredEvent parses an event as emitted by the ContractClassRegisterer 1`] = ` +ContractClassRegisteredEvent { + "artifactHash": Fr<0x1cc15db35c462bf2b8d14998121f5434364db024b7e2bddd0ccd0076cb02dd88>, + "contractClassId": Fr<0x2146f63439ea2a890005e1c9a8a07134e04126c06d79a09c981f49ac701c4722>, + "packedPublicBytecode": Buffer<0x26000204012700000104804d2600000403260202040126020304001f1800030002804c2d08804c0001240000004524000000b12702000104804d26020204003a0d00010002270080430400052a00804400000000000000000100000000000000002b0080450000000000000000000000000000000001000000000000000000000000000000002700804604004027008047040038270080480400042700804904000e2700804a0400032700804b040100252400001e7a28020002005189a4170a380102032602040400260206040300380406052c0801020010010501260302040100280202052c0e040500280502052c0e0405260205040300380205042c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022602040400230200030000015d220000019f26020304052c08000500100003002400001ea32c0400002c0d020300280302032c0e030200280202062c0d0605260207040200380607033a0d00030005220000019f28020003007a81a21e0a380103052602030101260206000626020704012602080000260209040626020a010026020b040223020005000001dd22000006e12c08010c26020d04040010010d0126030c040100280c020d1f2c0007804a000d2c0d0c0d00280d020d2c0e0d0c2c08010d00000102012c0e0c0d2c08010c00000102012c0e040c26020f04102c0800102c0c0d112c0c0c122c0c06130010000f002400001ec52c0400002c0c110e26021004112c0800112c0c0d122c0c0c132c0c061400100010002400001ec52c0400002c0c120f26021104122c0800122c0c0d132c0c0c1400100011002400001fa52c0400002c0c1310002810020d00380d04112c0d110c1c0c0c0d002b02001000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380d101123020011000002df24000020202c08010d2602100403001001100126030d040100280d02102c0c10112c0e0e1100281102112c0e0f112c08010e26020f04070010010f0126030e040100280e020f2c0c0f102c0e081000281002102c0e081000281002102c0e081000281002102c0e081000281002102c0e081000281002102c0e08102c08010f00000102012c0e0e0f2c08010e260210040a001001100126030e040100280e02102c0c10112c0e081100281102112c0e081100281102112c0e031100281102112c0e081100281102112c0e081100281102112c0e031100281102112c0e081100281102112c0e081100281102112c0e03112c08011000000102012c0e0e102b02000e00083e7911d835097629f0067531fc15cafd79a89beecb39903f69572c636f4a5a2b020011001a7f5efaad7f315c25a918f30cc8d7333fccab7ad7c90f14de81bcc528f9935d2b02001200054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde4022b02001300209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac1262c08011426021504070010011501260314040100281402152c0c15162c0e0e1600281602162c0e111600281602162c0e0a1600281602162c0e121600281602162c0e131600281602162c0e0a162c0c040522000004c10c38050b0e2302000e00001c1822000004d32c0d0f0526020d000226021104060d3080480011001223020012000004f624000020322d04000580032700800404000724000020442d088005000e00280e021101280011804800122c0e0d1226020d04060d308043000d0011230200110000053924000020322d04000e80032700800404000724000020442d0880050005002805020d0128000d804300112c0e08112c0e050f2c0d100d2b02000e002df8b940e5890e4e1377e05373fae69a1d754f6935e6a780b666947431f2cdcd26021104090c3809111223020012000005a624000020322d04000d80032700800404000a24000020442d088005000f00280f021100381109122c0e0e122b02000d002ecd88d15967bc53b885912e0d16866154acb6aac2d3f85e27ca7eefb2c1908326020e040726021204090c380e1213230200130000060d24000020322d04000f80032700800404000a24000020442d088005001100281102120038120e132c0e0d1326020d040826020f04090c380d0f12230200120000064f24000020322d04001180032700800404000a24000020442d088005000e00280e020f00380f0d122c0e0a122c0e0e102c08010d26020f04040010010f0126030d040100280e020f26021004090028050211260212040600280d021342f7000f00110013001000280d020e00380e040f2c0d0f05370c000c0005002802020d2c0d0d0c26020e040200380d0e053a0d0005000c22000006e1280200050032b6bd200a3801050c2302000c000006fc22000008052c08010526020c04030010010c012603050401002805020c1f3c0007000b000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05110010000e0024000020d22c0400002c0c100d00280d020f00380f04102c0d100e26020f04102c0800102c0c0c112c0c05120010000f0024000020d22c0400002c0c110d00280d020c00380c040f2c0d0f051c0c050c002b02000d00000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380c0d0f2302000f000007e12400002020370c0005000e002802020d2c0d0d0c26020e040200380d0e053a0d0005000c220000080528020005008a4870ec0a3801050c2302000c0000082022000008b02c08010526020c04020010010c012603050401002805020c1f3c00070007000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05112c0c06120010000e00240000214d2c0400002c0c100d3302000d002802020d2c0d0d0c26020e040200380d0e053a0d0005000c22000008b02802000500cd8c9a7a0a3801050c2302000c000008cb22000009d32c08010526020c04020010010c012603050401002805020c1f3c00070007000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05110010000e00240000222d2c0400002c0c100d26020c040e2c08000e2c0c0d0f0010000c0024000022a82c0400002c0c0f051e02000c060a380c050d2302000d0000096f26020e04003b09010e1c0c050c0026020d040126020f040300380d0f0e2c0801050010010e012603050401002805020e2c0e0d0e00280e020e2c0e0d0e26020e04030038050e0d2c0c0d0e2c0e0c0e002805020e2c0d0e0d26020f040200380e0f0c3a0d000c000d22000009d32802000500f99f5a2d0a3801050c260205026f26020d026526020e022026020f0272260210026c26021102772302000c00000a0c2200000cf62c08011226021304020010011301260312040100281202131f3c0007000700132c0d121300281302132c0e13122c08011300000102012c0e12132c08011200000102012c0e041226021504162c0800162c0c13172c0c12182c0c06190010001500240000214d2c0400002c0c17142602130401260216040300381316152c0801120010011501260312040100281202152c0e131500281502152c0e1315260215040300381215132c0c13152c0e141500281202152c0d151426021604020038151613360d00130014260212000a2602130014260214001e2602160403260218040300381618172c0801150010011701260315040100281502172c0e161700281702172c0e1617260217040300381517162c0c16172c0e121700281702172c0e131700281702172c0e141700281502142c0d141326021604020038141612360d0012001326021202642602130248260214022c26021502212c080116260217040e0010011701260316040100281602172c0c17182c0e131800281802182c0e0d1800281802182c0e101800281802182c0e101800281802182c0e051800281802182c0e141800281802182c0e0e1800281802182c0e111800281802182c0e051800281802182c0e0f1800281802182c0e101800281802182c0e121800281802182c0e15182c080112260213040e001001130126031204010028120213260214040d00381413142c0c13150c38151417160c17172302001700000c342c0e081500281502152200000c152c08011300000102012c0e1213260212040d2c0c040c2200000c4f0c380c12142302001400001b9b2200000c612c0d130c260215040d0628150213260217040300381517162c0801140010011601260314040100281402162c0e151600281602162c0e15162602170403003814171600280c02172d04001780032d04001680042d040015800524000022d400281402162c0d16152602170402003816170c360d000c001500280202142c0d14122602150402003814150c3a0d000c00122200000cf62802000c0097b974f70a38010c122302001200000d11220000158c2c08011226021304070010011301260312040100281202131f3c0007000900132c0d121300281302132c0e13122c08011300000102012c0e12132c08011200000102012c0e041226021504162c0800162c0c13172c0c12180010001500240000231a2c0400002c0c1714002814021600381604172c0d17152c0d13142c0d121626021804060c381618192302001900000da82400002032002814021800381816192c0d191700381607180e381618192302001900000dcd240000239526021a04060c38181a1b2302001b00000de42400002032002814021a00381a181b2c0d1b190038160b180e3816181a2302001a00000e0924000023952c0e14132c0e18121c0c1714051c0c140b001c0c1916051c0c16140026021704182c0800182c0c13192c0c121a2c0c061b001000170024000023a72c0400002c0c191626021804192c0800192c0c131a2c0c121b2c0c061c001000180024000023a72c0400002c0c1a17260219041a2c08001a2c0c131b2c0c121c0010001900240000231a2c0400002c0c1b18002818021300381304192c0d19121c0c1213002b02001800000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e381318192302001900000ee024000020202c08011300000102012c0e0a132c08011800000102012c0e08182c080119000001020126021a007f2c0e1a192c08011a000001020126021c041d2c08001d2c0c151e0010001c0024000024872c0400002c0c1e1b2c0d1b1500281502152c0e151b052800148044001500380b1514260215041c2c08001c2c0c141d001000150024000024872c0400002c0c1d0b2c0d0b1400281402142c0e140b260214020026021502bc26021c026a26021d029b26021e02d32c08011f2602200445001001200126031f040100281f02202c0c20212c0e152100282102212c0e1c2100282102212c0e1d2100282102212c0e1e2100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e14212c0e1f1a260214042026021504242c0c040c22000012250c380c141c2302001c00001a9022000012372c0d1a0b2802000c045be0cd192802001404bb67ae8528020015043c6ef3722802001a04a54ff53a2802001b04510e527f2802001c049b05688c2802001d041f83d9ab2802001e046a09e6672c08011f2602200409001001200126031f040100281f02202c0c20212c0e1e2100282102212c0e142100282102212c0e152100282102212c0e1a2100282102212c0e1b2100282102212c0e1c2100282102212c0e1d2100282102212c0e0c212c08010c00000102012c0e1f0c2c0801140000010201260215044426021c04202c0800202c0c0b212c0c15222c0c04230010001c0024000024cd2c0400002c0c211a2c0c221b2c0d1a1c00281c021c2c0e1c1a2c0e1b140b28001b8046001c2302001c0000134e220000138e2c08011b26021c04090010011c0126031b040100281a021c00281f021d00281b021e3f3f001e001d001c2c0d1b1a00281a021a2c0e1a1b2c0e1b0c220000138e26021c041d2c08001d2c0c0b1e2c0c151f2d08804600200010001c0024000024cd2c0400002c0c1e1a2c0c1f1b2c0d1a0b00280b020b2c0e0b1a2c0e1b140b28001b8046000b2302000b000013e122000013ea2c0e041422000013ea2c0d140b26021b008626021d041e2c08001e2c0c1a1f2c0c0b202c0c0b212c0c1b220010001d0024000027bb2c0400002c0c1f1c2c0d1c1a00281a021a2c0e1a1c00380b071a0e380b1a1b2302001b0000144224000023952c0e1a142c0d1c0b00280b020b2c0e0b1c0d308047001a000b2302000b0000146822000014b02c0d0c0b2c08011a26021b04090010011b0126031a040100281c021b00280b021d00281a021e3f3f001e001d001b2c0d1a0b00280b020b2c0e0b1a2c0e1a0c2c0e041422000014b02c0d140b26021a041d2c08001d2c0c1c1e2c0c0b1f2c0c15200010001a0024000028d32c0400002c0c1e142c0d140b00280b020b2c0e0b142c0d0c0b260215041a2c08001a2c0c141b2c0c0b1c00100015002400002d972c0400002c0c1b0c2c0d0c0b00280b020b2c0e0b0c260214041a2c08001a2c0c0c1b00100014002400002fbf2c0400002c0c1b0b26020c041a2c08001a2c0c131b2c0c181c2c0c191d2c0c0b1e2c0c161f2c0c12202c0c17210010000c00240000312e2c04000000280202122c0d120c2602130402003812130b3a0d000b000c220000158c2802000b009756f6200a38010b0c2302000c000015a7220000174d2c08010b26020c04050010010c0126030b040100280b020c1f2c00078048000c2c0d0b0c00280c020c2c0e0c0b2c08010c00000102012c0e0b0c2c08010b00000102012c0e040b26021304142c0800142c0c0c152c0c0b162c0c061700100013002400003db02c0400002c0c151226021404152c0800152c0c0c162c0c0b172c0c061800100014002400003db02c0400002c0c161326021504162c0800162c0c0c172c0c0b1800100015002400003e902c0400002c0c1714002814021600381604172c0d17151c0c1514002b02001600000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e3814161723020017000016a9240000202026021604172c0800172c0c0c182c0c0b192c0c061a00100016002400003db02c0400002c0c18142c08010b00000102012c0e0a0b2c08010c00000102012c0e080c2c0801080000010201260216004a2c0e160826021604172c0800172c0c0b182c0c0c192c0c081a2c0c121b2c0c131c2c0c151d2c0c141e0010001600240000312e2c040000002802020c2c0d0c0b260212040200380c12083a0d0008000b220000174d2802000800eb2b616b0a3801080b2302000b00001768220000195c2c08010126020804070010010801260301040100280102081f3c0007000900082c0d010700280702072c0e07012c08010700000102012c0e01072c08010100000102012c0e040126020904122c0800122c0c07132c0c01142c0c0615001000090024000023a72c0400002c0c130826020b04122c0800122c0c07132c0c01142c0c06150010000b0024000023a72c0400002c0c130926020c04122c0800122c0c07132c0c01142c0c06150010000c0024000023a72c0400002c0c130b26021204132c0800132c0c07142c0c01150010001200240000231a2c0400002c0c140c26021304142c0800142c0c0c15001000130024000022a82c0400002c0c151226021304142c0800142c0c07152c0c01162c0c0617001000130024000023a72c0400002c0c150c26021404152c0800152c0c07162c0c01172c0c0618001000140024000023a72c0400002c0c16131e020001030a3801080623020006000018cb2400003f0b1e020001040a3801090623020006000018e22400003f1d1e020001050a38010b0623020006000018f92400003f2f1e020001060a3801120623020006000019102400003f411e020001080a38010c0623020006000019272400003f531e020001070a38011306230200060000193e2400003f6500280202072c0d0706260208040200380708013a0d00010006220000195c260201026e26020202742602060263260207026b260208027326020902552c08010b26020c04110010010c0126030b040100280b020c2c0c0c122c0e091200281202122c0e011200281202122c0e071200281202122c0e011200281202122c0e051200281202122c0e111200281202122c0e011200281202122c0e0e1200281202122c0e081200281202122c0e0d1200281202122c0e101200281202122c0e0d1200281202122c0e061200281202122c0e021200281202122c0e051200281202122c0e0f120a380a03012302000100001a8f26020204122c080105260206041200100106012c0c05062903000605e58f985907316290002806020600280b020726020804102d04000780032d04000680042d040008800524000022d4260207041000380607062c0e040600280602063b0d0502252c0d1a1c0128000c8048001d0e380c1d1e2302001e00001aae240000239526021f04200c380c1f202302002000001ac5240000203200281b021f00381f0c202c0d201e26022004440c381d20212302002100001aea24000020322d04001c80032700800404004524000020442d088005001f00281f02200038201d212c0e1e2100380c151c0e380c1c1d2302001d00001b27240000239526021e04200c380c1e202302002000001b3e240000203200280b021e00381e0c202c0d201d26022004440c381c20212302002100001b6324000020322d04001f80032700800404004524000020442d088005001e00281e02200038201c212c0e1d212c0e1e1a00380c071c2c0c1c0c22000012252c0d1314260217040d0c380c17182302001800001bb6240000203200281602170038170c182c0d18151c0c151700260218040d0c380c18192302001900001be024000020322d04001480032700800404000e24000020442d088005001500281502180038180c192c0e17192c0e151300380c07142c0c140c2200000c4f2c0d0f0e26021204020c380512132302001300001c33240000203200280d021200381205132c0d13111c0c1113051c0c131200023811121309280013804400151c0c1516051c0c1613000238151316092800168044001505280013804400160038161213053080450015001200381312160a381116122302001200001c9f26021704003b0901170438050b1126021604060c381116172302001700001cbb24000020322d04000e80032700800404000724000020442d0880050012002812021600381611172c0e1317003811070e26021304060c380e13162302001600001cfd24000020322d04001280032700800404000724000020442d088005001100281102130038130e162c0e15162c0e110f2c0d100e05280005804a001126021304060c381113152302001500001d4a2400002032002814021300381311152c0d1512003811071326021604060c381316172302001700001d742400002032002814021600381613172c0d17150038110b1626021804060c381618192302001900001d9e2400002032002814021800381816192c0d191726021804090c381118192302001900001dc324000020322d04000e80032700800404000a24000020442d0880050016002816021800381811192c0e121926021104090c381311122302001200001e0024000020322d04001680032700800404000a24000020442d088005000e00280e021100381113122c0e1512003813071126021304090c381113152302001500001e4224000020322d04000e80032700800404000a24000020442d0880050012002812021300381311152c0e17152c0e1210003805070e2c0c0e0522000004c1270080040478000d000000800480032300800300001ea22901000105f7a1f3afa5add4ca3b010102252400001e7a1e020001011e020002000a380102032302000300001ec42400003f77252400001e7a26020604072c0800072c0c01082c0c020900100006002400001fa52c0400002c0c080526020100060a380301022602010400002805020700380701082c0d08062302000200001f972200001f1726020100080a380301022302000200001f522200001f2e260201001b0a380301022302000200001f4926020504003b0901052c0c06042200001fa01c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380102032302000300001f8e24000020202c0c06042200001fa02c0c06042200001fa02c0c0401252400001e7a2c0d01032c0d020426020604030c380406072302000700001fc92400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000201324000023952c0e03012c0e07022c0c06012529010001055a02e41bb51ea99f3b010102252901000105e89d09fea1112d0e3b010102252d01800380060b00800600028007230080070000205f220000206a2d008003800522000020d12d0000018005010000018004000101008003800480092d008003800a2d008005800b0b00800a8009800c2300800c000020bd2d01800a80082d028008800b0100800a0002800a0100800b0002800b220000208c27018005040001030080060002800622000020d1252400001e7a2c0d01032c0d020426020604020c3804060723020007000020f62400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000214024000023952c0e03012c0e07022c0c0601252400001e7a26020604072c0800072c0c01082c0c02090010000600240000222d2c0400002c0c080526020100060a380301022602010400002805020700380701082c0d0806230200020000221f220000219f26020100080a3803010223020002000021da22000021b6260201001b0a3803010223020002000021d126020504003b0901052c0c060422000022281c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e38010203230200030000221624000020202c0c060422000022282c0c060422000022282c0c0401252400001e7a2c0d01032c0d020426020604010c3804060723020007000022512400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000229b24000023952c0e03012c0e07022c0c0601252400001e7a2602020400002801020400380402052c0d05031c0c0302051c0c0201001c0c0102052c0c02012501008003800580072d00800380082d00800480090b0080088007800a2300800a000023192d01800880062d02800680090100800800028008010080090002800922000022e8252400001e7a2c0d01032c0d020426020604060c38040607230200070000233e2400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000238824000023952c0e03012c0e07022c0c060125290100010545a7ca711941e4153b010102252400001e7a26020604072c0800072c0c01082c0c02090010000600240000231a2c0400002c0c080526020100060a380301022602010400002805020700380701082c0d0806230200020000247922000023f926020100080a3803010223020002000024342200002410260201001b0a38030102230200020000242b26020504003b0901052c0c060422000024821c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e38010203230200030000247024000020202c0c060422000024822c0c060422000024822c0c0401252400001e7a26020301002c080102260204042100100104012603020401002802020426020504204303b00001804b0005000300042c0d020100280102012c0e01022c0c0201252400001e7a26020504002c0801062602070411001001070126030604010028060207260208041000380807082c0c07090c3809080a160c0a0a2302000a0000251c2c0e0509002809020922000024fd2c08010700000102012c0e060701280003804600060e38030608230200080000254324000023950c38020608230200080000256022000025552d088046000422000025a40c380203082302000800002592220000257202380203080e3803020923020009000025892400003f892c0c0806220000259b2c0c0506220000259b2c0c060422000025a407280004804800022c08010600000102012c0e02062602090404063804090a04380a090b0238040b080a380805092602080401230200090000260422000025e400380208090e3802090a2302000a000025fb24000023952c0e090622000026042c0d0609260206020026020a02012c0c0502220000261b0c3802090b2302000b00002636220000262d2c0d07012c0c0402252c08010c00000102012c0e050c052800028048000d26020f04000b28000f8048000e2302000e0000267a0728000d804800110a38110210230200100000267a2400003f9b2c0c050b22000026830d28000b8048000e2302000e000026ef22000026982c0d070b2c0d0c0d26020e04100c38020e0f2302000f000026b724000020322d04000b80032700800404001124000020442d088005000c00280c020e00380e020f2c0e0d0f003802080b2c0e0c072c0c0b02220000261b00380d0b0f0e380d0f10230200100000270624000023950c380f0410230200100000272122000027182c0c060e22000027660038030f100e380310112302001100002738240000239526021104440c38101112230200120000274f2400002032002801021100381110122c0d120f2c0c0f0e22000027662c0d0c0f26021104122c0800122c0c0f132c0c0a1400100011002400003fad2c0400002c0c13101c0c0e0f040038100f0e0e38100e1123020011000027a924000023952c0e0e0c00380b080e2c0c0e0b22000026832400001e7a2c0d010600280602062c0e0601072800028048000626020704100c3806070823020008000027ec2400002032002801020700380706082c0d080226020700650a3804070826020702802302000800002861220000281626020800860a38040809230200090000283126020a04003b09010a26020804092c0800092c0c020a2c0c030b2c0c070c001000080024000040342c0400002c0c0a042c0c0405220000289126020804092c0800092c0c020a2c0c030b2c0c070c001000080024000040342c0400002c0c0a042c0c0405220000289126020304100c3806030423020004000028a824000020322d04000180032700800404001124000020442d0880050002002802020300380306042c0e05042c0c0201252400001e7a2c0d010400280402042c0e04012c08010400000102012c0e01042c08010500000102012c0e0205260207040406380207080438080709023802090626020704000a380607082302000800002a3f220000292a072800028048000803308048000600090f2800068048000a2302000a0000294f2400003f8926020a04100c38080a0b2302000b000029662400002032002801020a00380a080b2c0d0b061c0c090b021c0c0b0a041c0c0a0b0226020a020804380a0b0c26020e02000a380e0b0d2302000d000029b606380c0b100a38100a0f2302000f000029b62400003f9b1a38060c0a26020c040d2c08000d2c0c0a0e2c0c0b0f0010000c002400003fad2c0400002c0c0e0626020b04100c38080b0c2302000c000029f524000020322d04000180032700800404001124000020442d088005000a00280a020b00380b080c2c0e060c2c0e0a0400380209010e380201062302000600002a3624000023952c0e01052200002a3f2c0d0502072800028048000526020204012c0c05012200002a590d280001804900052302000500002d442200002a6e2602050408043805030626020904000a380903082302000800002aa1063806030b0a380b050a2302000a00002aa12400003f9b1c0c06030026020601002c080105260208040900100108012603050401002805020826020904084303b00003804b000900060008260203040226020602012c0c07012200002ae80c380103072302000700002aff2200002afa2c0d040125052800018048000726020904000b280009804800082302000800002b36072800078048000b0a380b010a2302000a00002b362400003f9b2c0d040801308049000100090f3080490009000a2302000a00002b57240000239526020b04080c38070b0c2302000c00002b6e2400002032002805020b00380b070c2c0d0c0a003807020b0e38070b0c2302000c00002b93240000239526020d04080c380b0d0e2302000e00002baa2400002032002805020d00380d0b0e2c0d0e0c003807030b0e38070b0d2302000d00002bcf240000239526020e04080c380b0e0f2302000f00002be62400002032002805020e00380e0b0f2c0d0f0d01280007804a000b0e38070b0e2302000e00002c0e240000239526020e04080c380b0e0f2302000f00002c252400002032002805020e00380e0b0f2c0d0f071c0c0a0b0426020e040f2c08000f2c0c0b102c0c06110010000e002400003fad2c0400002c0c100a1c0c0c0b0400380a0b0c0e380a0c0e2302000e00002c77240000239526020b040e2c08000e2c0c0c0f2c0c06100010000b002400003fad2c0400002c0c0f0a1c0c0d0b0400380a0b0c0e380a0c0d2302000d00002cb6240000239526020b040d2c08000d2c0c0c0e2c0c060f0010000b002400003fad2c0400002c0c0e0a1c0c070b0400380a0b070e380a070c2302000c00002cf5240000239526020b04100c38090b0c2302000c00002d0c24000020322d04000880032700800404001124000020442d088005000a00280a020b00380b090c2c0e070c2c0e0a0400380102072c0c07012200002ae82c0d040526020804100c380108092302000900002d5f24000020322d04000580032700800404001124000020442d0880050006002806020800380801092c0e070900380102052c0e06042c0c05012200002a592400001e7a2c0d020400280402042c0e04022c080104000001020126020502002c0801062602070421001001070126030604010028060207260208042000380807082c0c07090c3809080a160c0a0a2302000a00002dfc2c0e050900280902092200002ddd2c08010500000102012c0e06052c0801062602070409001001070126030604010028010207002802020800280602093f3f0009000800072c0d060100280102012c0e01062c0e06042602010400260202040126020604082c0c01032200002e5c0c380306072302000700002e732200002e6e2c0d0501252c0d040826020a04080c38030a0b2302000b00002e8e2400002032002808020a00380a030b2c0d0b091c0c09080026020a01002c08010926020b04050010010b012603090401002809020b26020c04044303b00008804b000c000a000b053080480003000826020b04000a380b030a2302000a00002f04063808030d0b28000d8048000c2302000c00002f042400003f9b2c0c01072200002f0d0d2800078048000a2302000a00002f302200002f2200380302072c0c07032200002e5c2c0d050a003808070b0e38080b0c2302000c00002f4b240000239526020d04040c38070d0e2302000e00002f622400002032002809020d00380d070e2c0d0e0c26020e04200c380b0e0f2302000f00002f8724000020322d04000a80032700800404002124000020442d088005000d00280d020e00380e0b0f2c0e0c0f2c0e0d05003807020a2c0c0a072200002f0d2400001e7a2c080103000001020126020400012c0e04032c080104000001020126020500002c0e05042c08010600000102012c0e05062602050401260207041e260208040f2702000900010026020a04002c0c0a0222000030190c3802080a2302000a00003067220000302b2c0d0602002801020700380708092c0d09051c0c0501002c0d0305043801050300380203012c0e01062c0d0402043802050300380103022c0c0201252c0d060a023807020b0e3802070c2302000c000030822400003f8926020d04200c380b0d0e2302000e000030992400002032002801020d00380d0b0e2c0d0e0c1c0c0c0b002c0d030c04380b0c0d00380a0d0b2c0e0b0604380c090a2c0e0a032c0d040b033080490002000c0f2800028049000d2302000d000030e82400003f8926020e04200c380c0e0f2302000f000030ff2400002032002801020e00380e0c0f2c0d0f0d1c0c0d0c0004380c0a0d00380b0d0a2c0e0a04003802050a2c0c0a0222000030192400001e7a26020900142c08010a26020b04030010010b0126030a040100280a020b2c0c0b0c2c0e090c00280c020c2c0e050c2a020009000000000000000002000000000000000026020f04102c0800102c0c09110010000f0024000041442c0400002c0c110b2c0c120c2c0c130d2c0c140e2c0d0b0900280902092c0e090b2c08010900000102012c0e0b092c0d0c0b00280b020b2c0e0b0c2c08010b00000102012c0e0c0b2c08010c00000102012c0e0d0c2c08010d00000102012c0e0e0d26020e040126020f040026021004022c0c0f0822000032070c380810012302000100003d40220000321926020304102c0800102c0c09112c0c0b122c0c0c132c0c0d14001000030024000041eb2c0400002c0c11021e020003031e020008001e0200090426020a02002c08010b26020c04e10010010c0126030b040100280b020c26020d04e000380d0c0d2c0c0c100c38100d11160c1111230200110000329d2c0e0a100028100210220000327e2c08010a00000102012c0e0b0a26020c04102c0800102c0c06110010000c0024000024872c0400002c0c110b2c0d0b0600280602062c0e060b26020c04102c0800102c0c03110010000c0024000024872c0400002c0c11062c0d060300280302032c0e030626020c04102c0800102c0c08110010000c0024000024872c0400002c0c11032c0d030800280802082c0e080326020c04102c0800102c0c09110010000c0024000024872c0400002c0c11082c0d080900280902092c0e090826020c04102c0800102c0c04110010000c0024000024872c0400002c0c11092c0d090400280402042c0e040926020c04102c0800102c0c02110010000c0024000024872c0400002c0c11042c0d040200280202022c0e020426020c04102c0800102c0c07110010000c0024000024872c0400002c0c11022c0d020c00280c020c2c0e0c0226020c04a026020d0480260210042026021104c026021204602c0c0f0122000034000c3801101323020013000039ef22000034122c0d0a022c0801032602040411001001040126030304010028030204260206041000380604062c0c04080c38080609160c0909230200090000345b2c0e0f080028080208220000343c2c08010400000102012c0e030428020003049b05688c28020006043c6ef37228020008045be0cd192802000904510e527f2802000a04bb67ae852802000b041f83d9ab2802000c04a54ff53a2802000d046a09e6672c08011026021204090010011201260310040100281002122c0c12132c0e0d1300281302132c0e0a1300281302132c0e061300281302132c0e0c1300281302132c0e091300281302132c0e031300281302132c0e0b1300281302132c0e08132c08010300000102012c0e10032c08010600000102012c0e0f0626020804e02c0c0f0122000035370d280001804a000923020009000038d1220000354c26020a04122c0800122c0c02132c0c08142c0c11150010000a00240000426f2c0400002c0c13012c0c14092c0d010200280202022c0e02012c0e01042c0e09060b2800098046000223020002000035a122000035aa2c0e0f0622000035aa2c0d0602260209006526020b04102c0800102c0c01112c0c02122c0c02132c0c09140010000b0024000027bb2c0400002c0c110a2c0d0a0100280102012c0e010a2c0e0a040038020e010e38020109230200090000360624000023952c0e01062c0d0a0200280202022c0e020a0d30804700010002230200020000362c22000036742c0d03012c08010226020904090010010901260302040100280a0209002801020b002802020c3f3f000c000b00092c0d020100280102012c0e01022c0e02032c0e0f0622000036742c0d060226020904102c0800102c0c0a112c0c02122c0c0813001000090024000028d32c0400002c0c11062c0d060200280202022c0e02062c0e06042c0d030226020404102c0800102c0c06112c0c021200100004002400002d972c0400002c0c11032c0d030200280202022c0e020326020404102c0800102c0c031100100004002400002fbf2c0400002c0c110226020300052c08010426020604040010010601260304040100280402062c0c06082c0e030800280802082c0e020800280802082c0e05082c0d040300280302032c0e03042a020003000000000000000003000000000000000026020a04102c0800102c0c03110010000a0024000041442c0400002c0c11052c0c12062c0c13082c0c14092c0d050300280302032c0e03052c08010300000102012c0e05032c0d060500280502052c0e05062c08010500000102012c0e06052c08010600000102012c0e08062c08010800000102012c0e09082c0c0f0122000037de0d280001804a0009230200090000386122000037f326020404092c0800092c0c030a2c0c050b2c0c060c2c0c080d001000040024000041eb2c0400002c0c0a011e02000300323800010003000426020301000a380403052302000500003842240000455d34380002000700032602020101230200030000385c240000456f3302000125230200090000386e22000038c326020a04030c38010a0b2302000b000038852400002032002804020a00380a010b2c0d0b0926020a040f2c08000f2c0c03102c0c05112c0c06122c0c08132c0c09140010000a0024000045812c04000022000038c30038010e092c0c090122000037de053080460001000926020b04000a380b010a2302000a00003905063809010d0b28000d8046000c2302000c000039052400003f9b26020c04122c0800122c0c02132c0c08142c0c09150010000c00240000426f2c0400002c0c130a2c0c140b2c0d0a0c00280c020c2c0e0c0a0c3809080c2302000c0000394f22000039652c0d0a0900280902092c0e090a2c0e0a0422000039652302000c00003972220000397b2c0e0b06220000397b2c0d06090b2800098046000a04380c0a09230200090000399922000039e12c0d04092c0d030a2c08010b26020c04090010010c0126030b0401002809020c00280a020d00280b02103f3f0010000d000c2c0d0b0900280902092c0e090b2c0e0b0322000039e10038010e092c0c090122000035372c0d0a1326021504200c380115162302001600003a0a240000203200280b021500381501162c0d161426021604e00c380116172302001700003a2f24000020322d0400138003270080040400e124000020442d0880050015002815021600381601172c0e141700380110130e380113142302001400003a6c240000239526021604200c380116172302001700003a832400002032002806021600381601172c0d171426021704e00c381317182302001800003aa824000020322d0400158003270080040400e124000020442d0880050016002816021700381713182c0e141801280001804600130e380113142302001400003ae8240000239526021504200c380115172302001700003aff2400002032002803021500381501172c0d171426021704e00c381317182302001800003b2424000020322d0400168003270080040400e124000020442d0880050015002815021700381713182c0e141800380112130e380113142302001400003b61240000239526021604200c380116172302001700003b782400002032002808021600381601172c0d171426021704e00c381317182302001800003b9d24000020322d0400158003270080040400e124000020442d0880050016002816021700381713182c0e14180038010d130e380113142302001400003bda240000239526021504200c380115172302001700003bf12400002032002809021500381501172c0d171426021704e00c381317182302001800003c1624000020322d0400168003270080040400e124000020442d0880050015002815021700381713182c0e14180038010c130e380113142302001400003c53240000239526021604200c380116172302001700003c6a2400002032002804021600381601172c0d171426021704e00c381317182302001800003c8f24000020322d0400158003270080040400e124000020442d0880050016002816021700381713182c0e141800380111130e380113142302001400003ccc240000239526021504200c380115172302001700003ce32400002032002802021500381501172c0d171426021704e00c381317182302001800003d0824000020322d0400168003270080040400e124000020442d0880050015002815021700381713182c0e14182c0e150a0038010e132c0c130122000034002302000100003d4d2200003da226020204020c380802032302000300003d64240000203200280a020200380208032c0d030126020204112c0800112c0c09122c0c0b132c0c0c142c0c0d152c0c0116001000020024000045812c0400002200003da20038080e012c0c010822000032072400001e7a26020604072c0800072c0c01082c0c020900100006002400003e902c0400002c0c080526020100060a380301022602010400002805020700380701082c0d08062302000200003e822200003e0226020100080a380301022302000200003e3d2200003e19260201001b0a380301022302000200003e3426020504003b0901052c0c06042200003e8b1c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380102032302000300003e7924000020202c0c06042200003e8b2c0c06042200003e8b2c0c0401252400001e7a2c0d01032c0d020426020604040c380406072302000700003eb42400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e380407082302000800003efe24000023952c0e03012c0e07022c0c0601252901000105be11c73bbb04a4fc3b0101022529010001057425c86e086b03c13b010102252901000105e3b1cb17b4b196ae3b010102252901000105203960faa7b733883b01010225290100010597178cf85aace5563b0101022529010001053b7ee0a2f674688e3b01010225290100010565a49ce5d4594d753b010102252901000105288692b047dcfd433b010102252901000105646188a8c6cf94cb3b010102252400001e7a26020404000a3801040523020005000040262200003fc92602040208043804020526020702000a380702062302000600003ffc06380502090a380904082302000800003ffc2400003f9b183801050226020102200c380501042602010101230200040000401d24000046b02c0c0203220000402f2c0c0403220000402f2c0c0301252400001e7a260205040406380205060438060507023802070403308048000400020f28000480480005230200050000406a2400003f891c0c0206021c0c0605041c0c0502022602050208043805020626020802000a3808020723020007000040ac063806020a0a380a050923020009000040ac2400003f9b1a3801060526020604072c0800072c0c05082c0c020900100006002400003fad2c0400002c0c08011c0c0302040330804a000400030f280004804a000523020005000040f62400003f891c0c0305021c0c0504041c0c04030226020504062c0800062c0c02072c0c030800100005002400003fad2c0400002c0c070400380104020e38010203230200030000413f24000023952c0c0201252400001e7a26020200002c08010326020404040010010401260303040100280302042c0c04052c0e020500280502052c0e020500280502052c0e02052c0d030400280402042c0e04032c08010426020504050010010501260304040100280402052c0c05062c0e020600280602062c0e020600280602062c0e020600280602062c0e0106260201040026020201002c0c02052c0c01062c0c04022c0c05042c0c03012c0c0603252400001e7a2c0d040526020601000a38050607230200070000420f26020804003b09010826020504062c0800062c0c01072c0c02082c0c03092c0c040a001000050024000046c22c0400002c0d01052c0d02062c0d03072c0e05012c0e06022c0e070326020101012c0e01042602010400002806020300380301042c0d04022c0c0201252400001e7a26020504002c0801062602070411001001070126030604010028060207260208041000380807082c0c07090c3809080a160c0a0a2302000a000042be2c0e05090028090209220000429f2c08010700000102012c0e060701280003804600060e3803060823020008000042e524000023950c38020608230200080000430222000042f72d088046000422000043460c380203082302000800004334220000431402380203080e38030209230200090000432b2400003f892c0c0806220000433d2c0c0506220000433d2c0c0604220000434607280004804800022c08010600000102012c0e02062602090404063804090a04380a090b0238040b080a38080509260208040123020009000043a6220000438600380208090e3802090a2302000a0000439d24000023952c0e090622000043a62c0d0609260206020026020a02012c0c050222000043bd0c3802090b2302000b000043d822000043cf2c0d07012c0c0402252c08010c00000102012c0e050c052800028048000d26020f04000b28000f8048000e2302000e0000441c0728000d804800110a38110210230200100000441c2400003f9b2c0c050b22000044250d28000b8048000e2302000e00004491220000443a2c0d070b2c0d0c0d26020e04100c38020e0f2302000f0000445924000020322d04000b80032700800404001124000020442d088005000c00280c020e00380e020f2c0e0d0f003802080b2c0e0c072c0c0b0222000043bd00380d0b0f0e380d0f1023020010000044a824000023950c380f041023020010000044c322000044ba2c0c060e22000045080038030f100e3803101123020011000044da240000239526021104e00c3810111223020012000044f12400002032002801021100381110122c0d120f2c0c0f0e22000045082c0d0c0f26021104122c0800122c0c0f132c0c0a1400100011002400003fad2c0400002c0c13101c0c0e0f040038100f0e0e38100e11230200110000454b24000023952c0e0e0c00380b080e2c0c0e0b2200004425290100010561be47556b1380913b010102252901000105b87a3944b3b13c563b010102252400001e7a2c0d03062c0d040726020801000a3807080923020009000045a926020a04003b09010a0b280006804a00072602060401230200070000463c22000045c32c0d01072c0d02082c0d03092c0d040a26020c04030c38090c0d2302000d000045ea24000020322d04000780032700800404000424000020442d088005000b00280b020c00380c090d2c0e050d00380906050e38090507230200070000462724000023952c0e0b012c0e08022c0e05032c0e0a0422000046af26020704082c0800082c0c01092c0c020a2c0c030b2c0c040c001000070024000046c22c0400002c0d01072c0d02082c0d040926020a04002d04000780032700800404000424000020442d088005000b00280b020c00380c0a0d2c0e050d2c0e0b012c0e08022c0e06032c0e090422000046af252901000105c96f933b139de9163b010102252400001e7a260206040026020704012c0c060522000046da0d280005804a0006230200060000474522000046ef2c0d01052c0d02062c0d03072c0d04082c08010926020a04050010010a012603090401002806020a26020b0404002809020c3e0f000a000c2c0d090600280602062c0e06092c0e05012c0e09022c0e07032c0e0804252c0d03060c380506080038050706230200080000476022000048112c0d01082c0d02092c0d030a2c0d040b26020d04040c38050d0e2302000e000047872400002032002809020d00380d050e2c0d0e0c26020e04030c38050e0f2302000f000047ac2400002032002808020e00380e050f2c0d0f0d00380c0d0e26020d04040c38050d0f2302000f000047d624000020322d04000980032700800404000524000020442d088005000c00280c020d00380d050f2c0e0e0f2c0e08012c0e0c022c0e0a032c0e0b0422000048112c0c060522000046da2d0018ca18ca>, + "privateFunctionsRoot": Fr<0x01ebc21157ceca1255b54f0a5a4843ef36334372d8e1b0096787a648b464c1af>, + "version": 1, +} +`; diff --git a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap index 087e37bfe5ca..98946eb8d69b 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap +++ b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap @@ -4,28 +4,28 @@ exports[`PrivateFunctionBroadcastedEvent parses an event as emitted by the Contr PrivateFunctionBroadcastedEvent { "artifactFunctionTreeLeafIndex": 5, "artifactFunctionTreeSiblingPath": [ - Fr<0x0aa8c40de16e14b1d7789457012932df51eab8d07d3506a2bf3c0dd0d03cab15>, + Fr<0x0a3e92c5ed495ea48c51f5a0382513a803cc73b357a6771bbc41530ae4c4bc3d>, Fr<0x03b075046b71ff5f8e0792de4b82ddc979fcb3b8c03abe12972e65c57759fb46>, - Fr<0x1d1c34ad4b418b30c4c8b87939b97bc03d94d24d469d3cb2f419ffe6bd93f96c>, + Fr<0x2cee63a8ffb1c63b886b7dba5ae1677fc71d848a6fb52e8156dfa49136faaec8>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, ], - "artifactMetadataHash": Fr<0x16ad977a85a570bedc6785d159f137035d3bf9891042ee3af20488686aec168b>, - "contractClassId": Fr<0x23ced3716a04d81b58822bc3e1843626aa2884888b1a2d2250e79fb7d41a365e>, + "artifactMetadataHash": Fr<0x3049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea>, + "contractClassId": Fr<0x270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f10150>, "privateFunction": BroadcastedPrivateFunction { - "bytecode": Buffer<0x1f8b08000000000000ffe59d057814471bc7f73609108a954285da4129dac25d04922aee4e71bd241708924012dc823b454b71eaeeeeeeded29642dddd5dbfff1b769b61d9a4d0cca4f93fdf3ecfefb9bdbdbddddf3b333b33b7b73b1bb0f64d7b6dcbbadede371f0031ceab2c0a7a96b9afea7caccfb20a3edfade2b3ac9acfb21a3ecb6afa2c3b0ab4f22c3bd167bda0cfb2ba3ecbeaf92c6be02c53a780f3daca794d0cb5484a8ab64c888613c39150426a5a4a72282939ad454a38259c9c929c91909298184d494a69999a96da32941a4e4a8c86339353133343fba62e76d1b642a59a12d24d7a76fdf79e49de05e256db293baeaba4c39fce7c43ab68be9132dfd559c7fd5e37bcef0e7a809e76d172778af1a441a87453b8b1c66d75b3f5e54d2f6d65c83f6f7a2979d35d99efa1ccf7f4e44d6fbcef03fa82737cf2c6d69c370d3496f57efad233acd627b2dd205ee394b4f54e01cde912b0f4960dd7b18633df1f310d0003c12030180c0143c130301c8c00234104a481749001a2b69318314a8130991843351e283ebabab69da0a645a6f366946deddf3ac9077f7896c94ade52a5bb161caaa1e68a663a93c65a7094a1ccd55d53e98c79b4b2ad704a624242cb44592f2523144eca484f484948c8484b0aa58722e909d1d4a4706a66524252627a467a1ab6190967863223e9a99929fbbce440747b73de49f78138dad65f2bc994651b14ceb2f56f778cc6c2602aee314a75a469bbbeae3a2a8031b6feed8ed55c58ddca5ab65bd62de008c216709cf366bcb7051ce7d3028e2f83167084c616709cc60a603c490ba833e66cd21630db500b98631b14ce31d0024e28e72da0c43d81a4051cefb8eadeee44432de0c4ffa0054c236c01739d3779de1630d7a705cc2b8316304d630b98abb102c823690175c69c4fda02e61b6a0127d90685271968012797f31650e29e4cd202e639aebab73bc5500b38e53f6801a3842de054e7cd346f0b38d5a7059c56062d6054630b38556305308da405d419f374d21670baa11670866d50788681167066396f0125ee99242de034c755f77667196a0167292d60591d78830d1d78b36d83c2b30d1c7873caf9812771cf3170e09565611b62a8b015d806850b0c14b6b9e5bcb049dc73496af951ce81a1bb5ba6b3429867731eb0c30c1db0f36d83c2f30d1cb00bcaf9012b712f206f1d861b2a6c0b6d83c20b0d14b645e5bcb049dc8b485a87f1ce81a1bb75d059212cb6cda661a87453616f659e81df514bca79dc52c6171b887b29696f60a4a10a7a996d507899810a7a7939afa025eee5e4bd8188a1c2b6c23628bcc240615b59ce0b9bc4bd92a43790e71c18ba7b033a2b8455e5bc5594567ba98156f1dc721eb794f15506e25e4dda1b48375441afb10d0aaf315041af2de715b4c4bd96bc379061a8b0adb30d0aaf3350d8d697f3c22671af27e90d4c730e0cddbd019d15c28672de2a4aabbdda40ab785e398f5bcaf80603716fd41cb73be9f63c5f9b67629249cf4dffde33c3bb40dcbc37844b3ab8377e0f56e68728f39becfd6f08df8cf75bc056b0cd367fb3bec6db41c39b35d66ddb0d9575dde9a7f15fb0f0168de9b78324fd34feb113deaa31fd766aee547aeb86ed4a1db04399dfa9cc6ff3d40d17e0fd85e022707119d40d1a6f940b5fa0316f2e2129db1acf89872fd4987e9792a49fc6d3bce18b34a6df6586eb864b943ae05265fe3265fe624fdd7039de5f01ae04579541dda0f116a2f0e51af3e66a92b2adf10c59f80a8de9770d49fa693ce913be5263fa5d6bb86eb85aa903ae51e6af55e6aff2d40dd7d9fb06afbb01dc58067583c69b2bc2d769cc9b9b0ce7cd4d4a1e5cafccdfa0ccdfe8c99b9bf1fe16702bb8cdde7f7b6a9ee83867b2d1c03989db35e6b5a54cba3defd0e6194ef3cbfb3b943ceeafcc0fb28b1f98ef4ebcbf0bdc0dee2983e37280c6bcba53e37179afe1e3f25e250fee52e6ef56e6eff1e4cd7d787f3f78003ce89337bacbe743ff3e0d120f260dd4f2395099bf4f997fc893060fe3fd23e051f05819a4c1e3faca41a69f5fa8745358eaeadb0dd4a14f182eff8f2b79fc8432ff700979ff24de3f059e06cfd8ff3c306569d320a0319f9e34d487d59defcfeaf3ccf0cbf76795fc95fc72e77b9790efcfe1fdf3e005f0e241e47ba874537890c676e4398df95e967f600fd07cfcbbd34bb641e1976cfddbdda5b130988a7b975d94c09ab66bf487b2baadd2a6e9008df9f332e9c1fab2a183f515dba0f02b060ed657cbf9c12a71bf6ae860d5dd13d8e5b8ea6e5d77d9e533bfe3aca25e49719326ef44d94f8c67dbbacb5a434b7f63a0dbb111816363038e8543264841ab601d38e90e40e3cf18238306252727256646232d4da641ef32faf9152add14ee47e2196b95ef32e54e6a65bedb79f39aed24883b8e897c10f408e86ef5766b6ca9f6d87a2b07371df6f8a483ee82f39aa102ae3bbff668ccafbd86f26bef41945b1dbd605dee4dacb2c9fbf274deaf2949ccb6c6984f2189394663cca792c4acb1e10e372ba39843a59bc2cd35a61f4b473264717886493c13483c13493c93483c93493c5b9078b624f14c21f14c25f13c8dc4f37412cf33483ccf24f13c8bc4f36c12cf56249ead493cdb9078b625f16c47e2d99ec4b30389674712cf4e249e9d493cbb90787625f1ec46e2d99dc4b30789674f12cf5e249ebd493cfb9078f625f13c87c4b31f89677f12cf01249e03493c0791780e26f11c42e23994c4731889e77012cf11249e23493c23249e69249ee9249e19249e5112cf4c12cf51249ea3493cb3483cc790788e25f11c47e2399ec4339bc43387c4730289e74412cf5c12cf3c12cf7c12cf49249e93493ca790784e25f19c46e2399dc4730689e74c12cf59249eb3493ce79078169078ce25f19c47e2399fc4730189e74212cf45249e8b493c9790782e25f15c46e2b99cc4730589e74a12cf55249ee79278ae26f15c43e2b996c4731d89e77a12cf0d249ee791786e24f13c9fc4731389e76612cf2d249e5b493cb791786e27f1dc41e2b993c4f30212cf0b493c2f22f1bc98c4f31212cf4b493c2f23f1bc9cc4f30a12cf2b493caf22f1bc9ac4f31a12cf6b493caf23f1bc9ec4f30612cf1b493c6f22f1bc99c4f31612cf5b493c6f23f1bc9dc4f30e12cf3b493cef22f1bc9bc4f31e12cf7b493cef23f1bc9fc4f30112cf07493c1f22f17c98c4f31112cf47493c1f23f17c9cc4f30912cf27493c9f22f17c9ac4f31912cf67493c9f23f17c9ec4f30512cf17493c5f22f1dc45e2f93289e72b249eaf9278ee26f17c8dc4730f89e75e12cfd7493cdf20f17c93c4f32d12cfb7493cdf21f17c97c4f33d12cff70d79da1ecff2f42cee0fca28e650e9a6f0871ad34f7d8e7da89493c9f2f891c5e1f93189e727249e9f92787e46e2f93989e717249e5f92787e45e2f93589e737249edf92787e47e2f93d89e70f249e3f9278fe44e2f93389e72f249ebf9278fe46e2f93b89e71f249e7f9278fe45e2291b64f00c9078da249e31249eb1249e71249e15483c2b92785622f18c27f1ac4ce2791889671512cfaa249ed5483cab9378d620f13c9cc4b32689e711249eb50c7996e7eb026aff1fc67ce4ff61cc47911c8347074a9f7ea991b4f450383962d2f318923214ab31e63a243137d718f3b124c7cd71659437a1d24de1e303faf2b99fcd11f3091a63de4d724ddb8924c74d90c4b32e89673d12cf93483ceb93789e4ce2d980c4b32189672312cfc6249e4d483c9b92789e42e2792a89673312cfe6249e2112cf3089670289672289671289673289670b12cf96249e29249ea9249ea791789e4ee2790689e799249e6791789e4de2d98ac4b33589671b12cfb6249eed483cdb93787620f1ec48e2d989c4b33389671712cfae249edd483cbb9378f620f1ec49e2d98bc4b33789671f12cfbe249ee79078f623f1ec4fe23980c4732089e72012cfc1249e43483c8792780e23f11c4ee23982c47324896784c4338dc4339dc43383c4334ae29949e2398ac4733489671689e71812cfb1249ee3483cc79378669378e690784e20f19c48e2994be29947e2994fe23989c4733289e71412cfa9249ed3483ca79378ce20f19c49e2398bc4733689e71c12cf0212cfb9249ef3483ce793782e20f15c48e2b988c4733189e71212cfa5249ecb483c979378ae20f15c49e2b98ac4f35c12cfd5249e6b483cd79278ae23f15c4fe2b981c4f33c12cf8d249ee793786e22f1dc4ce2b985c4732b89e73612cfed249e3b483c7792785e40e2792189e745249e1793785e42e2792989e765249e9793785e41e2792589e755249e5793785e43e2792d89e775249ed79378de40e2792389e74d249e379378de42e2792b89e76d249eb79378de41e2792789e75d249e779378de43e2792f89e77d249ef793783e40e2f92089e743249e0f93783e42e2f92889e763249e8f93783e41e2f9a4214fdbe359dae73036d018f353651473a87453f8e980bef4db6b7394c767488e9b67493c9f23f17c9ec4f30512cf17493c5f22f1dc45e2f93289e72b249eaf9278ee26f17c8dc4730f89e75e12cfd7493cdf20f17c93c4f32d12cfb7493cdf21f17c97c4f33d12cff7493c3f20f1fc90c4f32312cf8f493c3f21f1fc94c4f33312cfcf493cbf20f1fc92c4f32b12cfaf493cbf21f1fc96c4f33b12cfef493c7f20f1fc91c4f32712cf9f493c7f21f1fc95c4f33712cfdf493cff20f1fc93c4f32f124f8be4fa900089a74de21943e2194be21947e25981c4b32289672512cf7812cfca249e8791785621f1ac4ae2598dc4b33a89670d12cfc3493c6b92781e41e2598bc4b33689e791249e4791781e4de2790c89671d12cf63493c8f23f13c9ec4f30412cf13493c83249e75493ceb91789e44e2599fc4f36412cf06249e0d493c1b19f2b43d9ea5bd0f3a4e63cc8d4962aea031e626243157d418735392982b698cf9149298e335c67c2a49cc9535c6dc8c24e6c334c6dc9c24e62a1a630e91c45c5563cc619298ab698c398124e6ea1a634e2489b986c6989348623e5c63ccc92431d7d418730b92988fd018734b92986b698c398524e6da1a634e2589f9488d319f4612f3511a633e9d24e6a335c67c0649ccc7688cf94c9298eb688cf92c92988fd518f3d924311fa731e65624311faf31e6d624319fa031e63624319fa831e6b624310735c6dc8e24e6ba1a636e4f12733d8d31772089f9248d31772489b9bec6983b91c47cb2c6983b6b8c39d6da774d40d009b809680a4e01a78266a0b9ec07844182a4054802c9a005680952402a380d9c0ece006782b3c0d94eecad411bd016b403ed4107d01174029d4117d0157403dd410fd013f402bd411fd0179c03fa81fe600018080681c16008180a8681e16004180922200da4830c1005996014180db2c01830168c03e34136c80113c044900bf2403e9804268329602a9806a6831960269805668339a000cc05f3c07cb0002c048bc062b0042c05cbc072b002ac04abc0b960355803d68275603dd800ce031bc1f96013d80cb680ad601bd80e76809de0027021b8085c0c2e019782cbc0e5e00a7025b80a5c0dae01d782ebc0f5e0067023b809dc0c6e01b782dbc0ede00e7027b80bdc0dee01f782fbc0fde001f02078083c0c1e018f82c7c0e3e009f024780a3c0d9e01cf82e7c0f3e005f0227809ec022f8357c0ab6037780dec017bc1ebe00df026780bbc0dde01ef82f7c0fbe003f021f8087c0c3e019f82cfc0e7e00bf025f80a7c0dbe01df82efc0f7e007f023f809fc0c7e01bf82dfc0efe00ff027f80bc8411600368801b1200e5400154125100f2a83c3401550155403d5410d7038a8098e00b5406d7024380a1c0d8e0175c0b1e038703c38019c0882a02ea8074e02f5c1c9a00168081a81c6a009680a4e01a78266a0390881304800892009248316a0254801a9e034703a38039c09ce0267cbbdf0a0356803da8276a03de8003a824ea033e802ba826ea03be8017a825ea037e803fa8273403fd01f0c0003c12030180c0143c130301c8c00234104a481749001a220138c02a341161803c68271603cc806396002980872411ec80793c06430054c05d3c0743003cc04b3c06c30071480b9601e980f1680856011580c9680a56019580e56809560153817ac066bc05ab00eac071bc0796023381f6c029bc116b0156c03dbc10eb013c8b3ede5b9f1f24c7679deb93c4b5c9ed32dcfc096e74bcbb39be5b9c8f2cc61799eaf3c2b579e432bcf7895e7a7cab349e5b99ff24c4d795ea53c0b529eb328cf3094e703cab3f7e4b976f2cc38791e9b3ceb4c9e2326cfe8ba1fc8b3a5e4b94df24c2479de903ccb479e9323cfa091e7bbc8b353e4b924f29c0e7906863c13429eb720cf3290e704c818fc32bebd8c1d2fe3b2cb98e7329eb88cd52de360cb18d3327eb38c8d2ce30ecb98be325eae8c45fb36903154657c5219fb53c6d594312b653c48196b51c63194310265fc3d19db4ec68d9331d964bc33194b4cc6e99231b0647c2919bb49c645923187643c1f192b47c6a191315e64fc14199b44c6fd90313564bc0a190b423a143286818c0f20f7decb7ded72cfb8dc8f2df73acb7dc4728faedcff2af796ca7d9b724fa4dc6f28f7f2c97d72720f9adcdf25f74ec97d4972cf8fdc4f23f7aac87d20728f85dcbf20f706c875f7724dbb5c2f2ed7624bfb2ed710cbf5b972edab5c572ad76ccaf59072ada15cc727d7b5c9755e72dd935c0724d7c5c8752272dd845c4720ffabcbffccf2bfabfc0f29ffcbc9ff54f2bf8dfc8f21e7f5e53cb79cf795f3a0725e50ce93159e3702725e417e67cbef4ef91d26bf4ba49f2efd56e9c749bfc6de57555ad22f91a989553439c968c5389fcb357d728d9b5cf325d740c93541728d8c5c3322d750c83505f21fbbfce72cffc1ca7f92f21f9dfc6725ffe1c87f1a728e5fce79cb396039272ae708e59c999c4392732a728e417e7307415d500f489f5dfab0d2a793e7d334048d4063ebc0a9b2325f4b993fce798de4e747c74fc80fe6e704231919c12959f9a3833993a3b999e372a45b51d87f70a77ace6be7ecacfcacc8b8ace991fcac9cece0e848dee860464e342f989d931f1c1fc94f97ce4c61cfc29d42de6f46736577b9d1bcbc60d6beefe58f8e06d373b2f37323e9f9c18ce8847139d3a2d2d929ec8d1caaf5aa43fc4ec0c90dcb494d77aae6bcf6cd8fa48fc53773601695aab8b0cf2453b3835a7b89f349eb435abbb3b2f631ee16727323d38259d919d1a9c19c49f9c19ccc605acea4ec8c3cf58b7d0e31fcc2922c935b82e29d57f757887b44b472de874a3785e395edeade7e4a283929deda7fd2ec9f186f15d506a6d247b6196366fb8557a9cad4b6a068fb6a2cee7eab3aef034a5abadf911aaf86f21d751b96e3ebfdaefbb9c9f852424949f1d6feb5b8def40b175e2d26534cc181e9e77e165be09f9e32c515ecefe5a6a77b944b0bd1ce59a786f2797d653bdef40e9441dacac56d01cffe2c6bff74f6c65cd9327bac043cfb737dbce9e3ce5771d257a651d1fcb64e9bd3393b2f3f929d1e554350375bc327443509fcd6f1aee75dbfaacfe7aea67422dc6aac6241d1e73aab0177bf959cedc7594559e9eeb370b9336f7bd657e703cef7d565272971c914af7ccfdd4f8cb2ccdd6775e77d05e5b3f8827fde56accfb66af8ac5fc1b3ad8a3edb5297b9714b67af8e33afe64facb23d5df9d332a5287fdc3452f3479d6295cfd5f51b39ef6b5afe93c4e076cdb89bfca49665d5e41b6a920d3759fe4dbe37164b59e6aee7fd8eac5752b7c064d7c87cd35e94cf15cc6c3fc14db73825ed627d6272f75fd53ab0790b14f36a59fe4db1bbafca96d1321c2e2936d5df2d1b353cebab69f05fe6839a3e6a3ec874b05dbe38cf67c575f9ea28eb15d70d97f54e76e6a5ebd2d1d996a5a4954cacfd84fa4acc85f128df63ed271cebcc4b1b2bf9d7d42ada5671e5ceafbb5add3ab06e88f36ccbafeb1be7b32df7a4944c1370d6a175eea849e3a3d9f979de0eabba03cb6743eacedde5c53528deefc42aebab134387aab9f3bea40e557f679ebc439556561daa8a66b6dfc2dd7e2533dbf7ed50a9b1b8fb758f8976054569d9ae607f27779d0eca3a1d8a5947adfc3b2aeba8c75f27659d4e9e754aeabcf99d5768e7f94cad6cda7b3e538fa50e9ecfd40aa9a3e7b30ad681be927eee196bb7d2ea5cb07f2cea675d94cf5cff2394effcdd2859fbae0a50f75fb168f7079c4731547e120fb6f3e6eebfb265f478f9bbf356c9e3e34d1fbff328e99171e37ae5664d8ee4473b4cca4e97bf05d410d4cdda3e2116d7cca8c5c2bb9eb798faf591633defe33cefddedabfb29eefbde65aa8f3b5fdd677945cf3adeecf62ef3f68d2bfaeccfef100e14f3eaeec7fa87fdf83997749af150f763fa94760d8fabbaafea3efbf6a6ab5f1faaa4df2c157df663f8b769b25f55ea4edeaad4afbca8cedee3d0f2c4af4e6a4c721cb755b6eb5dcfebe3f75b2ac613875fb988b1ac62fbbdea36fcba9cee7cbccf7e747631fc9a2f6ffc251dbf6ad372a8f9f1f76f28ebd0f2434d23ef71ae1ed3debf80bcdd589918baec6d9cf72575d9d52e815f5d11f07ca6a693b77e3354d6fe3e5fe19635371dbc3e71cae7eafa5dfe211d02d681c75849f5a0d7475ddffbfb5426bfdfb1153c9f9594aeffc5392bbfe3c11b7705ebd0f2a1aff35a5c3ef8b563eab924ef7ed463b19292663255b68ca45942bcb24f03db0f55b40e9cd40b590ef37ce6a6955fbd1028e6bded792d69dd4009dbadeaf399faf3c3bb2cdef35a4bd99e89d303b5cd6cdf378fd40b8c6a7be254d3b9952607777beeb1e9d72fb23d9fa9e75455bf807ebfb0d725c6675feea49615f7f3ff018d8be2fd060d0200>, + "bytecode": Buffer<0x1f8b08000000000000ffeddd05745b67c2706b87390e3333c7761c666666666666680a699b32738a4953a694999b5298999919efd68cfd55759d76662a77baef3f5a6b2fcb967cfcbc47872cd94789c2fe7919161e16563dfc9fd7135192988f89a9409cafc57e0cbe9e2c9efba589e76be9e2f95a783c5fcb18cfd7b2519d385fcb1fcffd0ac4f3b582f17cad503c5f2b1ef3b5e04ba2988f75623e5688a8141d3db072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab4456ac52714054950a15065689ae52b96abfaa9523aa464657181839a862d50a8322fe79599ffe976945fca94b54ff84746ef8cf9dd171bf10b065a2a441d6c07cb81273bd44d82fd74b065ddf10739fd8efdbc8e79b68336d49ffcbd7632f49e2cc83883f77892c15c2696d4c1fbac7666bc896a1f81f9bad418fcda6a0eb9b83ae6f89f3d86ce3f3edb48376c6f3d8240ef163533c84cbfaaed0cdcfc8e0ed4960ba05e2ccdbb89744219e2f89c242bb6cc41a33c45cdfcd98f6d05eda47fbe9001da44374988ed0513a46c7e9049da453e9636646f2a005222167c6c110ae28f1704335eda8e079713afd3f3f9e491ff6ebbd53e086cb71be16b853dca52ad45bc18321d8720d1cf4cfcbe9106e05cf84f0c10d2c9429c2feb535f4cfba83e74164950a5151952b04ee5765404464f480fe5155a2a206f48b8ee81fd1b77fd4c0aad191550745474557e83fa07f3fa6d9377250c4a0befdab0eaaf2cf69057bcfa64f407060e27137e17f167f36849bdd73215cb0126a1e9e4bffdbe9fed979782ec45bb8508ffbcc35c6fd67a77b3ec48740b11bd4f331cbf95fb9973a22dc4b5d88d9d85c8cbb97ba10cf5eeae25fb0973a12c2bdd485106e4c2e4af7521712682f75297d02822f25c05eea5208f75297ffe67ba97facbc09b097bafc37df4b5dbcc6b8ffec74af24d05eeaca7f612f755cb897ba1abbb1090ffbf51ee96a3c7ba9c09d127a2f753c847ba9aba1dc98843bf7525713682f95283c01c18189877a2f9528740f6064e2f0bff75e2a300f1387877e2f9538fcefbd970aaca4f18dfbcf4e374978c2eca59284fff57ba953c2bd54d2988d4db2b87ba9c00d71f752c9fe82bdd4a910eea592867063924cba970a9e07a1dc4b250f4f4070f204d84b250fe15e2ac5df7c2f1598872912602f95e26fbe974a768d71ffd9e9a64ca0bd54caf0dfee99426d4f15327b64bff85eb00d4c3ff685d9dd412fd2ee4b7fed17d353f33d69282da50b4ff817d3f784f07994d4215cf7d38778b98afbd8a40f7a6cd2045d4f1b743d5df8af1f9b703ecf401929533c8f4da897cfccfff93ca8f0afcc83e0e5736fd032191ef4f5cc71e641163ecf4ad928fb5f300f72846c39a8109d90ce9cffb97340c4bff058e5087a4cf6073d560782aee78cf358e5e2f3dc9487f2fe05db9210bef41b992b84db927c21de3727d4fc3b14c2f9973b84f32fbf64fe1d0ee1fccb13c2f9572081f765f982b60df983ae1708ba9e37ceb6a1209f17a2c254e42fd83684f005b7c882217c6c8a4a96eda3219c7f854238ff8a49e6dfb110cebfc2219c7fc51378db5034681b502ce87af1a0eb45e26c1b4af079492a45a5ff826d43085fe6882c11c2c7a68c64d93e11c265bb6408e75f59c9fc3b19c2f9572a84f3af5c026f1bca046d03ca065d2f1774bd749c6d43793e8fa0488afa0bb60d217c7239b27c081f9b0a09fcd854087a0c2282ae47065d8f8af3d844f37945aa4495ff82dfcdab846e1e0c8a6f1e54091a6b74d0f52cbff3fc44553eaf16f38f533562e641d298fbfe157fe85f3584cb45f0f39f35635e54a815f7d5a8c00d73e27cad56ccd7822fa15e31ab867065aaf9af4fabff1f4c2bb256885f8d4a1c16ff4ba461ffe6fcfc237758022e943543bcb18abdd48ebb30d6fe175e060de5c2f207d6c83fb83da2760817e23ae1215b187ef54a489d7f6165feb3f65a219c0fa19ca775ff8d79fa473f2b789ed60dda68a60c9a9fc1f334e2cf5d22affcfef4a2fa0f8aac507160e58a1195fa46571c50a942d480a8ca1103a22b0e8a041c55359a5933a87f74950155a22a0c8aaa1cd5ff4a687dff58c662376cb13b92d8bd6aad98ebf5f8589f1a84ffb57f2fd220817e7308f163fcabbf176918b3876e1477a318b821eedf8b34fa173694117feef2ab99f867ff5ea4610857ea4621de43ff557f2f123c0f42f9f7228dc313101c9878a8ff5ea471087f276b12c2052ba1e66193f0d0ffbd4893106fe1423dee46d718f79f9d6ed3101f8ac66e509b86ff76cf14eaa3a450be3e572f84cb7db3ffd20635e2cf5d229b85785988bd340f4f4070f3f0d04fb745026f0423fedce51fe36e11fecb0c0ed1747ff749dd3f3b1f42f96270fd103e3e2da52b6bcb045a595b852720b85502acacadffe62b6b60dcadffe29535e2cf5d7eb5378cf87397906e4cdb8478a14f15f378b709fa5dbb7ed0f516e1bf3c537d28e82fbb0e075d8ffdb7edb6dcb71db58ff99ed869d7bbc6b41b054dfb8feed3818f1da95378c2ac9b2d6296d1501f5d76fe9b1f5527d4b8bb8470fd090bba240eb1b35108d7cdae211e73dcb146fcb94b6460fd0ce5e31258273b27c0b2d32d819e6b0bf5b2733184ff58dbfd6fbeec04b6fd217c9a2c32b0ae744b8065a74788979d50cfc7c03213ca638bc072d32301e663a2b084590743edec19ba793920be57fc7b061d8b049685d8ebdbd25ffb15ff5e7cde9bfa50dff0843fc5e1be106e877a497f190ce17f0dfdea97c17ee10908ee9700bf0cf6ff9bff321818777fd9333709b5a0fe59d700e9ca1a4a77b077607802820726c0ca3ae86fbeb206c63d288156d6501f09f48fb1867aefda3ffceff9780756d8c0862e71d8b52f217257887d5d2bf812ea65ad4458e87706a1369614184b2580f1fffe683559d86f2fa11e4042fdea11162267c58ad115060dec5b3921e7c1b6043a3d4da89dbb24ce24a19bd6affe087a70ccce7148dc3fb10adc5020ecd79750ef990687706f32343cb42b70ec7c181acf7c08f5833b24c487c1c9c2fe9ac3e084ded0857c811b1ac2056e58022d70c3fe8515efeff4fb60e9b0845908423de6102eac916524634e1cc23197958c39847bcac8727fd19823fedc25b27c08e79fe5c82d22cce18c9438a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc9540cec4719c7fa7f7a5defd178d39e2cf5d22f78470fe0d0d772c8f7bc31cce7d12e77e89f380c47950e23c24711e96388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c47951e2bc24715e9638af489c5725cec0040dce44126762893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c126746893393c49959e2cc9240cebff3df0564fd7f70ccd924cb63f6447f7efe55eddbaf7f4464c5be09f9d82409e198734896c7f2211c734ec9f298eb2f7a6c22fedc253277a2d03dcebbd23bc69c2784631e2cf9bba9bc92f5269fc4995fe22c20711694380b499c8525ce2212675189b398c4595ce22c21719694384b499ca525ce3212675989b39cc4595ee28c90382325ce2889b382c4192d715694382b499c9525ce2a12675589b39ac4595de2ac2171d694386b499cb525ce3a12675d89b39ec4595fe26c20713694381b499c8d25ce2612675389b399c4d95ce26c2171b694385b499cad25ce3612675b89b39dc4d95ee2ec20717694383b499c9d25ce2e12675789b39bc4d95de2ec2171f694387b499cbd25ce3e12675f89b39fc4d95fe21c20710e943807499c8325ce2112e750897398c4395ce21c21718e943847499ca325ce3112e75889739cc4395ee29c20714e943827499c9325ce2912e75489739ac4395de29c2171ce943867499cb325ce3912e77512e75c89f37a89f30689f34689f32689739ec479b3c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e2bc4be2bc5be2bc47e2bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c44e27c54e27c4ce27c5ce27c42e25c20713e29713e25713e2d713e23713e2b713e27712e943817499ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce5725ced724ced725ce3724ce3725ceb724ce2512e7db12e73b12e7bb12e77b12e7fb12e70712e78712e74712e7c712e72712e7a712e76712e7e712e71712e79712e75712e7d712e73712e7b712e77712e75289f37b89f30789f34789f32789f367897399c4b95ce25c2171ae943857499cab25ce3512e75a89739dc4b95ee2dc20716e943837499c9b25ce2d12e75689739bc4b95de2dc2171ee943877499cbb25ce3d12e75e89739fc4b95fe23c20711e94380f499c8725ce2312e75189f398c4795ce23c21719e94384f499ca725ce3312e75989f39cc4795ee2bc20715e94382f499c9725ce2b12e75589332cb1c39948e24c2c71269138934a9cc924cee412670a8933a5c4994ae24c2d71a69138d34a9ce924cef41267b8c49941e2cc2871669238334b9c5924ceac1267368933bbc49943e2cc2971e69238734b9c7924cebc12673e8933bfc45940e22c28711692380b4b9c4524cea212673189b3b8c45942e22c29719692384b4b9c6524ceb212673989b3bcc4192171464a9c5112670589335ae2ac28715692382b4b9c5524ceaa12673589b3bac45943e2ac2971d692386b4b9c7524ceba12673d89b3bec4d940e26c28713692381b4b9c4d24cea612673389b3b9c4d942e26c2971b692385b4b9c6d24ceb612673b89b3bdc4d941e2ec28717692383b4b9c5d24ceae12673789b3bbc4d943e2ec2971f692387b4b9c7d24cebe12673f89b3bfc43940e21c28710e9238074b9c4324cea112e7308973b8c43942e21c29718e9238474b9c6324ceb112e7388973bcc43941e29c28714e9238274b9c5324cea912e7348973bac43943e29c2971ce9238674b9c7324ceeb24ceb912e7f512e70d12e78d12e74d12e73c89f36689f31689f3568973bec4799bc479bbc47987c479a7c47997c479b7c4798fc479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c4f988c4f9a8c4f998c4f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c56e27c4ee25c28712e92389f9738174b9c2f489c2f4a9c2f499c2f4b9caf489caf4a9caf499caf4b9c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725cef724cef725ce0f24ce0f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f24ce2f25ceaf24ceaf25ce6f24ce6f25ceef24cea512e7f712e70f12e78f12e74f12e7cf12e7328973b9c4b942e25c2971ae9238574b9c6b24ceb512e73a8973bdc4b941e2dc28716e9238374b9c5b24cead12e7368973bbc4b943e2dc2971ee9238774b9c7b24cebd12e73e8973bfc47940e23c28711e92380f4b9c4724cea312e73189f3b8c47942e23c29719e92384f4b9c6724ceb312e73989f3bcc47941e2bc28715e92382f4b9c5724ceab12675812873391c49958e24c227126953893499cc925ce1412674a893395c4995ae24c2371a69538d3499ce925ce70893383c49951e2cc2471669638b3489c5925ce6c126776893387c49953e2cc2571e69638f3489c7925ce7c12677e89b380c45950e22c24711696388b489c4525ce6212677189b384c45952e22c2571969638cb489c6525ce72126779893342e28c9438a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc2571ee9638f7489c7b25ce7d12e77e89f380c47950e23c24711e96388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c47951e2bc24715e9638af489c5725ceb0a40e67228933b1c49944e24c2a71269338934b9c2924ce9412672a8933b5c49946e24c2b71a69338d34b9ce11267068933a3c49949e2cc2c71669138b34a9cd924ceec12670e8933a7c4994be2cc2d71e69138f34a9cf924cefc12670189b3a0c45948e22c2c711691388b4a9cc524cee212670989b3a4c4594ae22c2d71969138cb4a9ce524cef2126784c419297146499c1524ce6889b3a2c45949e2ac2c71569138ab4a9cd524ceea12670d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa12670389b3a1c4d948e26c2c713691389b4a9ccd24cee612670b89b3a5c4d94ae26c2d71b69138db4a9ced24cef612670789b3a3c4d949e2ec2c71769138bb4a9cdd24ceee12670f89b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e7008973a0c43948e21c2c710e9138874a9cc324cee112e7088973a4c4394ae21c2d718e9138c74a9ce324cef112e7048973a2c43949e29c2c714e9138a74a9cd324cee912e70c8973a6c4394be29c2d71ce9138af9338e74a9cd74b9c37489c374a9c37499cf324ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d12e79d12e75d12e7dd12e73d12e7bd12e77d12e7fd12e70312e78312e74312e7c312e72312e7a312e76312e7e312e71312e70289f34989f32989f36989f31989f35989f3398973a1c4b948e27c5ee25c2c71be2071be2871be2471be2c71be2271be2a71be2671be2e71be2171be2971be25712e9138df9638df9138df9538df9338df97383f90383f94383f92383f96383f91383f95383f93383f9738bf9038bf9438bf9238bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c3f4a9c3f499c3f4b9ccb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a9ceb24cef512e7068973a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e8973a7c4b94be2dc2d71ee9138f74a9cfb24cefd12e70189f3a0c47948e23c2c711e91388f4a9cc724cee312e70989f3a4c4794ae23c2d719e9138cf4a9ce724cef312e70589f3a2c47949e2bc2c715e9138af4a9c61c91cce44126762893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c126746893393c49959e2cc2271669538b3499cd925ce1c12674e893397c4995be2cc2371e69538f3499cf925ce0212674189b390c45958e22c22711695388b499cc525ce1212674989b394c4595ae22c2371969538cb499ce525ce08893352e28c92382b489cd112674589b392c45959e2ac2271569538ab499cd525ce1a12674d89b396c4595be2ac2371d69538eb499cf525ce0612674389b391c4d958e26c22713695389b499ccd25ce1612674b89b395c4d95ae26c2371b69538db499ced25ce0e12674789b393c4d959e2ec2271769538bb499cdd25ce1e12674f89b397c4d95be2ec2371f69538fb499cfd25ce0112e740897390c43958e21c22710e953887499cc325ce1112e748897394c4395ae21c23718e9538c7499ce325ce0912e744897392c43959e29c22714e9538a7499cd325ce1912e74c897396c4395be29c23715e2771ce9538af97386f90386f94386f9238e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b24ce3b25cebb24cebb25ce7b24ce7b25cefb24cefb25ce0724ce0725ce8724ce8725ce4724ce4725cec724cec725ce2724ce0512e79312e75312e7d312e73312e7b312e77312e742897391c4f9bcc4b958e27c41e27c51e27c49e27c59e27c45e27c55e27c4de27c5de27c43e27c53e27c4be25c2271be2d71be2371be2b71be2771be2f717e20717e28717e24717e2c717e22717e2a717e26717e2e717e21717e29717e25717e2d717e23717e2b717e27712e9538bf97387f90387f94387f92387f963897499ccb25ce1512e74a897395c4b95ae25c2371ae9538d7499ceb25ce0d12e746897393c4b959e2dc22716e9538b7499cdb25ce1d12e74e897397c4b95be2dc2371ee9538f7499cfb25ce0312e74189f390c47958e23c22711e95388f499cc725ce1312e74989f394c4795ae23c23719e9538cf499ce725ce0b12e74589f392c47959e2bc22715e9538c3923b9c8924cec41267128933a9c4994ce24c2e71a69038534a9ca924ced412671a8933adc4994ee24c2f71864b9c1924ce8c1267268933b3c49945e2cc2a71669338b34b9c3924ce9c12672e8933b7c49947e2cc2b71e69338f34b9c0524ce8212672189b3b0c45944e22c2a711693388b4b9c2524ce9212672989b3b4c45946e22c2b71969338cb4b9c111267a4c4192571569038a325ce8a12672589b3b2c45945e2ac2a71569338ab4b9c3524ce9a12672d89b3b6c45947e2ac2b71d69338eb4b9c0d24ce8612672389b3b1c4d944e26c2a713693389b4b9c2d24ce9612672b89b3b5c4d946e26c2b71b69338db4b9c1d24ce8e12672789b3b3c4d945e2ec2a71769338bb4b9c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb4b9c0324ce8112e7208973b0c43944e21c2a710e9338874b9c2324ce9112e7288973b4c43946e21c2b718e9338c74b9c1324ce8912e7248973b2c43945e29c2a714e9338a74b9c3324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f71de2071de2871de2471ce93386f96386f91386f9538e74b9cb7499cb74b9c77489c774a9c77499c774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f499c0f4b9c8f489c8f4a9c8f499c8f4b9c4f489c0b24ce2725cea724cea725ce6724ce6725cee724ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f9b2c4f98ac4f9aac4f99ac4f9bac4f986c4f9a6c4f996c4b944e27c5be27c47e27c57e27c4fe27c5fe2fc40e2fc50e2fc48e2fc58e2fc44e2fc54e2fc4ce2fc5ce2fc42e2fc52e2fc4ae2fc5ae2fc46e2fc56e2fc4ee25c2a717e2f71fe2071fe2871fe2471fe2c712e9338974b9c2b24ce9512e72a8973b5c4b946e25c2b71ae9338d74b9c1b24ce8d12e7268973b3c4b945e2dc2a716e9338b74b9c3b24ce9d12e72e8973b7c4b947e2dc2b71ee9338f74b9c0724ce8312e72189f3b0c47944e23c2a711e93388f4b9c2724ce9312e72989f3b4c47946e23c2b719e9338cf4b9c1724ce8b12e72589f3b2c47945e2bc2a7186a5703813499c8925ce24126752893399c4995ce24c2171a6943853499ca925ce3412675a89339dc4995ee20c973833489c1925ce4c12676689338bc49955e2cc267166973873489c3925ce5c12676e89338fc49957e2cc2771e697380b489c0525ce4212676189b388c45954e22c26711697384b489c2525ce5212676989b38cc45956e22c27719697382324ce4889334ae2ac2071464b9c1525ce4a12676589b38ac45955e2ac26715697386b489c3525ce5a12676d89b38ec45957e2ac2771d697381b489c0d25ce4612676389b389c4d954e26c26713697385b489c2d25ce5612676b89b38dc4d956e26c2771b697383b489c1d25ce4e12676789b38bc4d955e2ec26717697387b489c3d25ce5e12676f89b38fc4d957e2ec2771f6973807489c0325ce4112e760897388c43954e21c26710e973847489c2325ce5112e76889738cc43956e21c27718e973827489c1325ce4912e76489738ac43955e29c26714e973867489c3325ce5912e76c89738ec4799dc43957e2bc5ee2bc41e2bc51e2bc49e29c2771de2c71de2271de2a71ce97386f93386f9738ef9038ef9438ef9238ef9638ef9138ef9538ef9338ef97381f90381f94381f92381f96381f91381f95381f93381f97389f903817489c4f4a9c4f499c4f4b9ccf489ccf4a9ccf499c0b25ce4512e7f312e76289f30589f34589f32589f36589f31589f35589f33589f37589f30d89f34d89f32d897389c4f9b6c4f98ec4f9aec4f99ec4f9bec4f981c4f9a1c4f991c4f9b1c4f989c4f9a9c4f999c4f9b9c4f985c4f9a5c4f995c4f9b5c4f98dc4f9adc4f99dc4b954e2fc5ee2fc41e2fc51e2fc49e2fc59e25c26712e973857489c2b25ce5512e76a89738dc4b956e25c2771ae973837489c1b25ce4d12e76689738bc4b955e2dc26716e973877489c3b25ce5d12e76e89738fc4b957e2dc2771ee97380f489c0725ce4312e76189f388c47954e23c26711e97384f489c2725ce5312e76989f38cc47956e23c27719e97382f489c1725ce4b12e76589f38ac47955e20c4be970269238134b9c4924cea41267328933b9c49942e24c2971a69238534b9c6924ceb412673a8933bdc4192e71669038334a9c9924cecc1267168933abc4994de2cc2e71e69038734a9cb924cedc12671e8933afc4994fe2cc2f711690380b4a9c8524cec212671189b3a8c4594ce22c2e719690384b4a9ca524ced212671989b3acc4594ee22c2f7146489c91126794c45941e28c96382b4a9c9524ceca12671589b3aac4594de2ac2e71d690386b4a9cb524ceda12671d89b3aec4594fe2ac2f713690381b4a9c8d24cec612671389b3a9c4d94ce26c2e71b690385b4a9cad24ced612671b89b3adc4d94ee26c2f717690383b4a9c9d24cece12671789b3abc4d94de2ec2e71f690387b4a9cbd24cede12671f89b3afc4d94fe2ec2f710e9038074a9c8324cec112e7108973a8c4394ce21c2e718e9038474a9ca324ced112e7188973acc4394ee21c2f714e9038274a9c9324cec912e7148973aac4394de29c2e71ce9038674a9cb324ced912e71c89f33a8973aec479bdc47983c479a3c47993c4394fe2bc59e2bc45e2bc55e29c2f71de2671de2e71de2171de2971de2571de2d71de2371de2b71de2771de2f713e20713e28713e24713e2c713e22713e2a713e26713e2e713e21712e90389f94389f92389f96389f91389f95389f9338174a9c8b24cee725cec512e70b12e78b12e74b12e7cb12e72b12e7ab12e76b12e7eb12e71b12e79b12e75b12e71289f36d89f31d89f35d89f33d89f37d89f30389f34389f32389f36389f31389f35389f33389f37389f30b89f34b89f32b89f36b89f31b89f35b89f33b8973a9c4f9bdc4f983c4f9a3c4f993c4f9b3c4b94ce25c2e71ae9038574a9cab24ced512e71a8973adc4b94ee25c2f716e9038374a9c9b24cecd12e7168973abc4b94de2dc2e71ee9038774a9cbb24cedd12e71e8973afc4b94fe2dc2f711e90380f4a9c8724cec312e71189f3a8c4794ce23c2e719e90384f4a9ca724ced312e71989f3acc4794ee23c2f715e90382f4a9c9724cecb12e71589f3aac41996cae14c247126963893489c4925ce64126772893385c49952e24c2571a69638d3489c6925ce7412677a89335ce2cc207166943833499c9925ce2c12675689339bc4995de2cc2171e6943873499cb925ce3c12675e89339fc4995fe22c20711694380b499c8525ce2212675189b398c4595ce22c21719694384b499ca525ce3212675989b39cc4595ee28c90382325ce2889b382c4192d715694382b499c9525ce2a12675589b39ac4595de2ac2171d694386b499cb525ce3a12675d89b39ec4595fe26c20713694381b499c8d25ce2612675389b399c4d95ce26c2171b694385b499cad25ce3612675b89b39dc4d95ee2ec20717694383b499c9d25ce2e12675789b39bc4d95de2ec2171f694387b499cbd25ce3e12675f89b39fc4d95fe21c20710e943807499c8325ce2112e750897398c4395ce21c21718e943847499ca325ce3112e75889739cc4395ee29c20714e943827499c9325ce2912e75489739ac4395de29c2171ce943867499cb325ce3912e77512e75c89f37a89f30689f34689f32689739ec479b3c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e2bc4be2bc5be2bc47e2bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c44e27c54e27c4ce27c5ce27c42e25c20713e29713e25713e2d713e23713e2b713e27712e943817499ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce5725ced724ced725ce3724ce3725ceb724ce2512e7db12e73b12e7bb12e77b12e7fb12e70712e78712e74712e7c712e72712e7a712e76712e7e712e71712e79712e75712e7d712e73712e7b712e77712e75289f37b89f30789f34789f32789f367897399c4b95ce25c2171ae943857499cab25ce3512e75a89739dc4b95ee2dc20716e943837499c9b25ce2d12e75689739bc4b95de2dc2171ee943877499cbb25ce3d12e75e89739fc4b95fe23c20711e94380f499c8725ce2312e75189f398c4795ce23c21719e94384f499ca725ce3312e75989f39cc4795ee2bc20715e94382f499c9725ce2b12e75589332cb5c39948e24c2c71269138934a9cc924cee412670a8933a5c4994ae24c2d71a69138d34a9ce924cef41267b8c49941e2cc2871669238334b9c5924ceac1267368933bbc49943e2cc2971e69238734b9c7924cebc12673e8933bfc45940e22c28711692380b4b9c4524cea212673189b3b8c45942e22c29719692384b4b9c6524ceb212673989b3bcc4192171464a9c5112670589335ae2ac28715692382b4b9c5524ceaa12673589b3bac45943e2ac2971d692386b4b9c7524ceba12673d89b3bec4d940e26c28713692381b4b9c4d24cea612673389b3b9c4d942e26c2971b692385b4b9c6d24ceb612673b89b3bdc4d941e2ec28717692383b4b9c5d24ceae12673789b3bbc4d943e2ec2971f692387b4b9c7d24cebe12673f89b3bfc43940e21c28710e9238074b9c4324cea112e7308973b8c43942e21c29718e9238474b9c6324ceb112e7388973bcc43941e29c28714e9238274b9c5324cea912e7348973bac43943e29c2971ce9238674b9c7324ceeb24ceb912e7f512e70d12e78d12e74d12e73c89f36689f31689f3568973bec4799bc479bbc47987c479a7c47997c479b7c4798fc479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c4f988c4f9a8c4f998c4f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c56e27c4ee25c28712e92389f9738174b9c2f489c2f4a9c2f499c2f4b9caf489caf4a9caf499caf4b9c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725cef724cef725ce0f24ce0f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f24ce2f25ceaf24ceaf25ce6f24ce6f25ceef24cea512e7f712e70f12e78f12e74f12e7cf12e7328973b9c4b942e25c2971ae9238574b9c6b24ceb512e73a8973bdc4b941e2dc28716e9238374b9c5b24cead12e7368973bbc4b943e2dc2971ee9238774b9c7b24cebd12e73e8973bfc47940e23c28711e92380f4b9c4724cea312e73189f3b8c47942e23c29719e92384f4b9c6724ceb312e73989f3bcc47941e2bc28715e92382f4b9c5724ceab1267581a873391c49958e24c227126953893499cc925ce1412674a893395c4995ae24c2371a69538d3499ce925ce70893383c49951e2cc2471669638b3489c5925ce6c126776893387c49953e2cc2571e69638f3489c7925ce7c12677e89b380c45950e22c24711696388b489c4525ce6212677189b384c45952e22c2571969638cb489c6525ce72126779893342e28c9438a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc2571ee9638f7489c7b25ce7d12e77e89f380c47950e23c24711e96388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c47951e2bc24715e9638af489c5725ceb0b40e67228933b1c49944e24c2a71269338934b9c2924ce9412672a8933b5c49946e24c2b71a69338d34b9ce11267068933a3c49949e2cc2c71669138b34a9cd924ceec12670e8933a7c4994be2cc2d71e69138f34a9cf924cefc12670189b3a0c45948e22c2c711691388b4a9cc524cee212670989b3a4c4594ae22c2d71969138cb4a9ce524cef2126784c419297146499c1524ce6889b3a2c45949e2ac2c71569138ab4a9cd524ceea12670d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa12670389b3a1c4d948e26c2c713691389b4a9ccd24cee612670b89b3a5c4d94ae26c2d71b69138db4a9ced24cef612670789b3a3c4d949e2ec2c71769138bb4a9cdd24ceee12670f89b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e7008973a0c43948e21c2c710e9138874a9cc324cee112e7088973a4c4394ae21c2d718e9138c74a9ce324cef112e7048973a2c43949e29c2c714e9138a74a9cd324cee912e70c8973a6c4394be29c2d71ce9138af9338e74a9cd74b9c37489c374a9c37499cf324ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d12e79d12e75d12e7dd12e73d12e7bd12e77d12e7fd12e70312e78312e74312e7c312e72312e7a312e76312e7e312e71312e70289f34989f32989f36989f31989f35989f3398973a1c4b948e27c5ee25c2c71be2071be2871be2471be2c71be2271be2a71be2671be2e71be2171be2971be25712e9138df9638df9138df9538df9338df97383f90383f94383f92383f96383f91383f95383f93383f9738bf9038bf9438bf9238bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c3f4a9c3f499c3f4b9ccb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a9ceb24cef512e7068973a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e8973a7c4b94be2dc2d71ee9138f74a9cfb24cefd12e70189f3a0c47948e23c2c711e91388f4a9cc724cee312e70989f3a4c4794ae23c2d719e9138cf4a9ce724cef312e70589f3a2c47949e2bc2c715e9138af4a9c61e91cce44126762893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c126746893393c49959e2cc2271669538b3499cd925ce1c12674e893397c4995be2cc2371e69538f3499cf925ce0212674189b390c45958e22c22711695388b499cc525ce1212674989b394c4595ae22c2371969538cb499ce525ce08893352e28c92382b489cd112674589b392c45959e2ac2271569538ab499cd525ce1a12674d89b396c4595be2ac2371d69538eb499cf525ce0612674389b391c4d958e26c22713695389b499ccd25ce1612674b89b395c4d95ae26c2371b69538db499ced25ce0e12674789b393c4d959e2ec2271769538bb499cdd25ce1e12674f89b397c4d95be2ec2371f69538fb499cfd25ce0112e740897390c43958e21c22710e953887499cc325ce1112e748897394c4395ae21c23718e9538c7499ce325ce0912e744897392c43959e29c22714e9538a7499cd325ce1912e74c897396c4395be29c23715e2771ce9538af97386f90386f94386f9238e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b24ce3b25cebb24cebb25ce7b24ce7b25cefb24cefb25ce0724ce0725ce8724ce8725ce4724ce4725cec724cec725ce2724ce0512e79312e75312e7d312e73312e7b312e77312e742897391c4f9bcc4b958e27c41e27c51e27c49e27c59e27c45e27c55e27c4de27c5de27c43e27c53e27c4be25c2271be2d71be2371be2b71be2771be2f717e20717e28717e24717e2c717e22717e2a717e26717e2e717e21717e29717e25717e2d717e23717e2b717e27712e9538bf97387f90387f94387f92387f963897499ccb25ce1512e74a897395c4b95ae25c2371ae9538d7499ceb25ce0d12e746897393c4b959e2dc22716e9538b7499cdb25ce1d12e74e897397c4b95be2dc2371ee9538f7499cfb25ce0312e74189f390c47958e23c22711e95388f499cc725ce1312e74989f394c4795ae23c23719e9538cf499ce725ce0b12e74589f392c47959e2bc22715e9538c3d23b9c8924cec41267128933a9c4994ce24c2e71a69038534a9ca924ced412671a8933adc4994ee24c2f71864b9c1924ce8c1267268933b3c49945e2cc2a71669338b34b9c3924ce9c12672e8933b7c49947e2cc2b71e69338f34b9c0524ce8212672189b3b0c45944e22c2a711693388b4b9c2524ce9212672989b3b4c45946e22c2b71969338cb4b9c111267a4c4192571569038a325ce8a12672589b3b2c45945e2ac2a71569338ab4b9c3524ce9a12672d89b3b6c45947e2ac2b71d69338eb4b9c0d24ce8612672389b3b1c4d944e26c2a713693389b4b9c2d24ce9612672b89b3b5c4d946e26c2b71b69338db4b9c1d24ce8e12672789b3b3c4d945e2ec2a71769338bb4b9c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb4b9c0324ce8112e7208973b0c43944e21c2a710e9338874b9c2324ce9112e7288973b4c43946e21c2b718e9338c74b9c1324ce8912e7248973b2c43945e29c2a714e9338a74b9c3324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f71de2071de2871de2471ce93386f96386f91386f9538e74b9cb7499cb74b9c77489c774a9c77499c774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f499c0f4b9c8f489c8f4a9c8f499c8f4b9c4f489c0b24ce2725cea724cea725ce6724ce6725cee724ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f9b2c4f98ac4f9aac4f99ac4f9bac4f986c4f966023913c7715688a8141d3db072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab4456ac52714054950a15065689ae52b96abfaa9523aa464657181839a862d50a8362a65d3c84637eeb2f1a73c49fbb442e491fbaf9372cdcf138270de1fc7b5bb26c270be198df918c397908c7fcae64cc294238e6f724634e19c231bf2f1973aa108ef903c998538770cc1f4ac69c268463fe4832e6b4211cf3c79231a70be1983f918c1966c8c6fca964cce1211cf36792316708e1983f978c396308c7fc8564cc994238e62f2563ce1cc2317f25197396108ef96bc998b38670ccdf48c69c2d8463fe5632e6ec211cf3779231e708e198974ac69c338463fe5e32e65c211cf30f9231e70ee1987f948c394f08c7fc9364cc794338e69f2563ce17c2312f938c397f08c7bc5c32e602211cf30ac9980b8670cc2b25632e14c231af928cb97008c7bc5a32e622211cf31ac9988b8670cc6b25632e16c231af0be1989384fdf36f7c027fdf16b894a6325496ca51f9c0cfa0488a0acc078aa68a54892a5315aa4ad5a83ad5a09a548b6ac78cbb2ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae5260054b4489290925a564949c52504a4a45a9290da5a574949ec2290365a44c9499b25056ca46d92907e5a45c949bf2505eca47f9a90015a44254988a50512a46c5a90495a452549aca50592a47e5298222298a2a503455a44a5499aa5055aa46d5a906d5a45a549bea505daa47f5a90135a446d4989a50536a46cda905b5a456d49ada505b6a47eda90375a44ed499ba5057ea46dda907f5a45ed49bfa505fea47fd69000da441349886d0501a46c369048da451349ac6d0581a47e369024da4493499a6d0549a46d36906cda459349be6d0753497aea71be846ba89e6d1cd740bdd4af3e936ba9deea03be92eba9beea17be93eba9f1ea007e9217a981ea147e9317a9c9ea005f4243d454fd333f42c3d470b69113d4f8be9057a915ea297e9157a955ea3d7e90d7a93dea225f436bd43efd27bf43e7d401fd247f4317d429fd267f4397d415fd257f4357d43dfd277b494bea71fe847fa897ea665b49c56d04a5a45ab690dada575b49e36d046da449b690b6da56db49d76d04eda45bb690feda57db49f0ed0413a4487e9081da563749c4ed0493a45a7e90c9da573749e2ed045ba4497e90a5da5c0c144224a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f111449515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea523daa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1da82375a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c1348486d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d2349a4e336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d1ed7407dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f4042da027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41abd4e6fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cfe90bfa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a5a4d6b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682feda3fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f374812ed225ba4c57e82a8571909d881253124a4ac92839a5a094948a52531a4a4be9283d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e09784488aa20a144d15a91255a62a5495aa5175aa4135a916d5a63a5497ea517d6a400da91135a626d4949a51736a412da915b5a636d496da517bea401da91375a62ed495ba5177ea413da917f5a63ed497fa517f1a400369100da621349486d1701a412369148da6313496c6d1789a401369124da6293495a6d1749a41336916cda639741dcda5ebe906ba916ea2797433dd42b7d27cba8d6ea73be84eba8beea67be85eba8feea707e8417a881ea647e8517a8c1ea72768013d494fd1d3f40c3d4bcfd1425a44cfd3627a815ea497e8657a855ea5d7e8757a83dea4b76809bd4defd0bbf41ebd4f1fd087f4117d4c9fd0a7f4197d4e5fd097f4157d4ddfd0b7f41d2da5efe907fa917ea29f69192da715b49256d16a5a436b691dada70db49136d166da425b691b6da71db49376d16eda437b691feda70374900ed1613a4247e9181da71374924ed1693a4367e91c9da70b74912ed165ba4257292c29eb3f25a62494949251724a41292915a5a6349496d2517a0aa70c9491325166ca4259291b65a71c949372516eca4379291fe5a70254900a51612a4245a91815a71254924a51692a4365a91c95a7c03f4944521455a068aa4895a83255a1aa548daa530daa49b5a836d5a1ba548fea53036a488da83135a1a6d48c9a530b6a49ada835b5a1b6d48eda5307ea489da83375a1aed48dba530fea49bda837f5a1bed48ffad3001a488368300da1a1348c86d3081a49a368348da1b1348ec6d3049a489368324da1a9348da6d30c9a49b36836cda1eb682e5d4f37d08d7413cda39be916ba95e6d36d743bdd4177d25d7437dd43f7d27d743f3d400fd243f4303d428fd263f4383d410be8497a8a9ea667e8597a8e16d2227a9e16d30bf422bd442fd32bf42abd46afd31bf426bd454be86d7a87dea5f7e87dfa803ea48fe863fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d4f3fd08ff413fd4ccb6839ada095b48a56d31a5a4beb683d6da08db48936d316da4adb683beda09db48b76d31eda4bfb683f1da08374880ed3113a4ac7e8389da093748a4ed3193a4be7e83c5da08b74892ed315ba4a61c958ff293125a1a4948c92530a4a49a92835a5a1b4948ed2533865a08c9489325316ca4ad9283be5a09c948b72531eca4bf9283f15a08254880a53112a4ac5a83895a092548a4a53192a4be5a83c05fe612892a2a802455345aa4495a90a55a56a549d6a504daa45b5a90ed5a57a549f1a50436a448da90935a566d49c5a504b6a45ada90db5a576d49e3a5047ea449da90b75a56ed49d7a504fea45bda90ff5a57ed49f06d0401a448369080da561349c46d0481a45a3690c8da571349e26d0449a4493690a4da569349d66d04c9a45b3690e5d4773e97aba816ea49b681edd4cb7d0ad349f6ea3dbe90eba93eea2bbe91eba97eea3fbe9017a901ea287e9117a941ea3c7e9095a404fd253f4343d43cfd273b49016d1f3b4985ea017e9257a995ea157e9357a9ddea037e92d5a426fd33bf42ebd47efd307f4217d441fd327f4297d469fd317f4257d455fd337f42d7d474be97bfa817ea49fe8675a46cb6905ada455b49ad6d05a5a47eb69036da44db499b6d056da46db6907eda45db49bf6d05eda47fbe9001da44374988ed0513a46c7e9049da453749aced0593a47e7e9025da44b7499aed0550a4bcefa4f89290925a564949c52504a4a45a9290da5a574949ec2290365a44c9499b25056ca46d92907e5a45c949bf2505eca47f9a90015a44254988a50512a46c5a90495a452549aca50592a47e529f0cf7391144515289a2a5225aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52580ad67f4a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f817f248da428aa40d154912a5165aa4255a91a55a71a54936a516daa4375a91ed5a706d4901a51636a424da91935a716d4925a516b6a436da91db5a70ed4913a5167ea425da91b75a71ed4937a516fea437da91ff5a701349006d1601a424369180da711349246d1681a4363691c8da709349126d1649a4253691a4da719349366d16c9a43d7d15cba9e6ea01be9269a4737d32d742bcda7dbe876ba83eea4bbe86eba87eea5fbe87e7a801ea487e8617a841ea5c7e8717a8216d093f4143d4dcfd0b3f41c2da445f43c2da617e8457a895ea657e8557a8d5ea737e84d7a8b96d0dbf40ebd4befd1fbf4017d481fd1c7f4097d4a9fd1e7f4057d495fd1d7f40d7d4bdfd152fa9e7ea01fe927fa9996d1725a412b6915ada635b496d6d17ada401b69136da62db495b6d176da413b6917eda63db497f6d17e3a4007e9101da62374948ed1713a4127e9149da6337496ced179ba4017e9125da62b7495c252b2fe53624a4249291925a714949252516a4a4369291da5a770ca4019291365a62c9495b25176ca41392917e5a63c9497f2517e2a4005a91015a62254948a51712a4125a91495a6325496ca51790afc5375244551058aa68a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a086d4881a53136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a5317ea4adda83bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac368388da091348a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b66d31cba8ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd4577d33d742fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e8697a869ea5e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25bb484dea677e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abea66fe85bfa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48ed6d306da489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a4887e8301da1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da1ab14968af59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e0040391144515289a2a5225aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52586ad67f4a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f81936d44521455a068aa4895a83255a1aa548daa530daa49b5a836d5a1ba548fea53036a488da83135a1a6d48c9a530b6a49ada835b5a1b6d48eda5307ea489da83375a1aed48dba530fea49bda837f5a1bed48ffad3001a488368300da1a1348c86d3081a49a368348da1b1348ec6d3049a489368324da1a9348da6d30c9a49b36836cda1eb682e5d4f37d08d7413cda39be916ba95e6d36d743bdd4177d25d7437dd43f7d27d743f3d400fd243f4303d428fd263f4383d410be8497a8a9ea667e8597a8e16d2227a9e16d30bf422bd442fd32bf42abd46afd31bf426bd454be86d7a87dea5f7e87dfa803ea48fe863fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d4f3fd08ff413fd4ccb6839ada095b48a56d31a5a4beb683d6da08db48936d316da4adb683beda09db48b76d31eda4bfb683f1da08374880ed3113a4ac7e8389da093748a4ed3193a4be7e83c5da08b74892ed315ba4a616958ff293125a1a4948c92530a4a49a92835a5a1b4948ed2533865a08c9489325316ca4ad9283be5a09c948b72531eca4bf9283f15a08254880a53112a4ac5a83895a092548a4a53192a4be5a83c054e3c1349515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea523daa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1da82375a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c1348486d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d2349a4e336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d1ed7407dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f4042da027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41abd4e6fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cfe90bfa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a5a4d6b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682feda3fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f374812ed225ba4c57e82a85a565fda7c494849252324a4e292825a5a2d49486d2523a4a4fe19481325226ca4c59282b65a3ec948372522eca4d79282fe5a3fc54800a52212a4c45a82815a3e254824a52292a4d65a82c95a3f214380953244551058aa68a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a086d4881a53136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a5317ea4adda83bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac368388da091348a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b66d31cba8ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd4577d33d742fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e8697a869ea5e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25bb484dea677e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abea66fe85bfa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48ed6d306da489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a4887e8301da1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da1ab14968ef59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e0846491144515289a2a5225aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52587ad67f4a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f8193f345521455a068aa4895a83255a1aa548daa530daa49b5a876e07f15a92ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d81f79a0fbc8f7be03dd203ef3f1e786fefc0fb6607de933af07ecf81f7520ebc4f71e03d8003efaf1b78efdac0fbc206de7335f07ea681f70a0dbc0f67e03d2e03ef1f19786fc6c0fb1e06de5330f07e7d81f7c20bbccf5ce03ddc02ef8f1678efb1c0fb7a05de332bf07e5481f77a0abc8f52e03d8a02efff13786f9dc0fbd604de1326f07e2b81f73209bc4f48e03d3802ef6f1178ef88c0fb3204fe2734f07e028173f507ce831f38c77ce0fced81f39907ce151e38df75e0fccf81f32107ce0f1c385f6ee0fcb181f3a906ce2f1a38df66e0fc9381f33106ce4f18385f5fe0fc7581f3b905ce6f1638df57e0fc5781f34105ce8f14385f50e0fc3981f3c904ceaf1238df48e0fc1b81f35104cecf10385f41e0fff703ffcf1ef8ffeec0ff3b07feff37f0ffb089fff96f76813fb5fdc7a574d82f97987fc1098bf953dcb0983fc9098b79692e2ce629bab09843f5b09855362c707ec6c0f90a03e7ef0b9ccf2e707eb7c0f9ce02e7ff0a9c0f2b707ea8c0f99202e70f0a9c4f27707e99c0f95602e71f099c8f23707e8a0254900a51612a4245a91815a71254924a85fdf6922ae87ae6988f5977d5cd3976e9a286c1f76b1ff371c1e27c4b72ef4adc2df8b60ebf735bd7dfb9adfbefdc362de663bde22bbb2e4c34e754f06d73633e1e2954a44ea636ff9805ff7799f73b63987f8ddb52c67cac18f331769e248ef918786c038f6b9d98cf23fedc253255d074433dfd2a1115fb053fa609e00fbc3cf37fcb7b42cd9fd86926c0f4ff71cef2c0a5d99c5fa61f772c814bba98cf1305cdcbd8ef092c33b1eb4be07aeea0ef0f9e5e58ccf4e24e27f6f6841c6b9588e87eb1d34f9a00d3e7a1fac77984ff31c639bf9d97b1b7259df3eb9f1d7c5bb2a0db9206cdcf2271e64f422c6bc1f3276196b5c87f9caff35acb57ec7a5a7f4e42fcec8801b1d36f1033fdb0ff7cda9171bf103bed860963af103bfd460933fd41b1d36ffcefcf9bc83f9a78ecb49bfcfbd38ef883737cfcdfbea3e97f30ed3f3abf48e0d824b0ee958f995eecf62f785b16bb0d4be0f52632519c9f1716e76785c5f9f9a9c312769f9428cecf8bf5c49d3fb1d703c778b1fb87c10327d41f3d6ac2b8befd27341d357e42df51fd07060f2178b21982be1e7c7bf025ee7de2de2feefdd3c5737b2c334dd0d753cc09fbd5d0fef131e86bb19bead84d77cae0fbc7b92d55d06d49e7fcda953ae6f3a4413f27785ab18e6471ee5f2ee6f3f0988fc983be27f6fb33c4f3f393c7f9f9bf72c7f3b5e04528eeb492c4f3b5d8fb070ef78bc75c0fccd7d85535e99c5fa617aa45b272958888585fecbc4f16f6ebc5332ccecf4f16e7fed1319fa78e33ded85d719dffd039a872dfc84115fa0eea5bb1ef8001d1fdfb668a33fde07916984fb1bf96b80fbba307fcefb0fbf72fa13aec4e1ff6cbf56c41df13b8340f9a76a238b7b588e7e7ba0fbf23a232c7e34f1a34b6c0e57f8797bfb9fceff0f2bf787819fbab5d92b0df2ebb71f741710fb1e21e82855d631af11debc4fd1949e2995e8339bfbe2de9bf608b6fdd0b8be76bf1d992fc812d693cb6b8d34dfc3be3b8d6cf093605ffba1e775e278a735b7c76c3b14ec998cfffdbc73a2562aeffef58e7772f1512f858242a81f7cbf11eebc4b79df8bd639df87efd8e3dbef9a3e3a0e0639db8bfb227d05369fd13f8318bfcdf5369ffd1e57fc73affc5639d42bf4cfa57eb7db2b06b1fa7248b73dfbc311f03cf2fe4bac6f492ffcef462b72349aef17d0562aea78a671affce3cf9834b647c8e44f138ecc71ab1cf01fdb78f356ac75c971f6b0c941f6b44ff5d8e3592c4b95f7cdff37bc7237fd54b7109349ffeef714e9e40d38f9d6fc982e65d7cbf47c6fefcb8dbc3d8dbe3fb181616ffcb1ffff71c7958c21e7bfdded882fdb1cb468638f78f3b0fae35ad64ffe6b4fe9b8f69f0bc0e7e4cff719f39bfdcf67b2f87278b735bb239bf1d63e038227fd0fdae750c1cb85fa9a0eb5171e651426e9f136abb10b8640ebbf6b14decd7feeeaf5dc53efff0777eed2af65835f818eb7fbf4ffde6f2bfdfa7fe8bbf4f550dfb659e5f6bbb1cfc7c49ecf5f0b0dfee8362bf3781f7215189c27ebb9f8cbbbf0bfef9813f1dc81a737dfc84d1e306361dd570cac0fe13270c1d3daa7edffe4306061f14c49d48583c838fbd2d51d0d7af759018f77b9204dd3ff862f845ac56cce7ffed5fc4fac75c97ff5d69e45ff58b5802ad881563a79f2261a61fef2f62c16389bd3d76198e7d3237f87aac29f63e2d83eed3f21af76915749f5641f7095cfed32798e3fbe5a4459cdb825f9c6a19e7b6e00d73ac29b0018fddb005aee70d32062eade7fc624f14e7b63641b7fd452fde0ffadf8bf7ffd2e57f0760bf5cfe7f7f00d620667ab1eb79f25f7ed42fbf748425e876b642a2383f2f2c2cfe2747627f7eeab004ddaffcdf932329e278e2ce9fd8ed56f0df86f6ef3b62449b714327f59d30b0d1c451fd03c778c143089e6ce2788678ad43bee0cd6fdcfbc5dde4c7ddccc7ddb4076fce83a77badef8ffbb5d89f1d1ef6dbdfe393c731c67d48e37e2dee734271bf3f70896f9797e81a1f637f4ed81ffc9cf8ccbff7e7d1ffeecf49e8bfbdcb10c71afcb31278375731be4382b038f3f0f71ec7e0cd48dc75202c9ef91b16749fe0e7d09a054d37eefde27ae27b6e2fbedfd9e23e5ef13ddffb47cf1dc69defa9aef173eac47c1ef1e72e95e2db74c71d7ff03c8ffb78a40cbaeddf7d3c62c7f4ef3e1ec1f328459cdb82d7b524716e0bf6c54ec3f0ab6bd398cfffdbbfba06eff2c3c37ebbecc6ddb6c7f777657fd5f32bb1cb45ecbc8eeb491e747bf0fddbc67c0c8cb5679cb105af23bff77a475c43f0fd83c79d34cefc0a5ec753fc35f3eb770f57e29b5fb1f78f5def935fe3fec1f33ff8feb1ff021cf8bc4fccf5f8f6ab49e2dc96389e69c7b7cec7cec3c0f21aeaf5656095aa0322aa0e1ad8373232326a40c4c03f5a5f42fdf3a32bf6addcbf6fe5c8c8aad19103a3232bfed1cf8ffd955afe9afffffe85f90f2ea1fa5f8ab461bf5ccf12733d815f2fecf7df7cbdf07f4fab5cf3f2bfa755fe8b4fab648f995e607d8cfd5bde51a3270c1d34b5feb8813c3730a0d5c41123860e1a3a705cf09afc7b47e071ef97e81af7331c0de789f9fcef70341c1634bf823da13ca24d15f4331360fa11c1477e6171c612fc73e3ce83a4f17cdfb596bbc4713efede7d13fdce74d3c5735bec34639f440bf6c68e23559c8f5983a69b104742591266faf13e565983ae678933cee0f95d274486d8e9c5aeb3f13d9313f799c7e0bf4a0af6250abd2f322cce25be67da622fb1cb4c96a0afc5cecfff0f02a8a7e6659c0a00>, "metadataHash": Fr<0x1eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b944>, "selector": Selector<0xd9e0e7f1>, - "vkHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, + "vkHash": Fr<0x1dec445c8fa1078b7dce9b3ccf5de0be2245124caabca925bb78b32f1937accf>, }, "privateFunctionTreeLeafIndex": 5, "privateFunctionTreeSiblingPath": [ - Fr<0x00a5215d923c08e46ef8298acff37a856da61be92fe1536dd7b4e10cfec9590c>, + Fr<0x124ac28b575def2e243406b17fa9f0925bf1118986880d83a9b745459bc8f3a1>, Fr<0x233d10e0c959338e062b1c76fb81e17fcf61643da568eac372bb7feac8bfa357>, - Fr<0x17720805123feb41cde00457a83a9919a315c55d6117267f05edefe119df9a7a>, + Fr<0x0861b8c908d4acade859229678fac5c86ce12b5fa26c04ceef065df68e74b118>, Fr<0x1a0ca5eecb1430479902264f04e557160a4666fb42bb8b283c6397e3d17ac937>, Fr<0x2a6595890719fef7967c209488728aa5342438ba52058a3c770202f55acf6854>, ], - "unconstrainedFunctionsArtifactTreeRoot": Fr<0x049fe6a55fa21b718224c0f6e69887dd82e302b6b658c9db0a389672582a343d>, + "unconstrainedFunctionsArtifactTreeRoot": Fr<0x01bb3b34c9349b23ac39d039e544844c573e5610c8888080c4c4e906254d8c7a>, } `; diff --git a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap index 5f68110cc2fa..21734ca0b466 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap +++ b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap @@ -4,19 +4,19 @@ exports[`UnconstrainedFunctionBroadcastedEvent parses an event as emitted by the UnconstrainedFunctionBroadcastedEvent { "artifactFunctionTreeLeafIndex": 1, "artifactFunctionTreeSiblingPath": [ - Fr<0x24eb989517d084b2d95f40b9837d5e6d8468dd84e20d6ad727a7617a5eb395e1>, - Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, + Fr<0x09fdbed4bd565f3b26f4e878699a7d7c01656991c2301b73a5d853c614ca44a8>, + Fr<0x2a4bf9232d7673acf981fd8244941e3acdc98933db06afcccea33872aaad7ebd>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, ], - "artifactMetadataHash": Fr<0x16ad977a85a570bedc6785d159f137035d3bf9891042ee3af20488686aec168b>, - "contractClassId": Fr<0x23ced3716a04d81b58822bc3e1843626aa2884888b1a2d2250e79fb7d41a365e>, - "privateFunctionsArtifactTreeRoot": Fr<0x0624b9dd486acffb15815318ac8eb07814d48ffeca47da1f4de4a733b723a1e4>, + "artifactMetadataHash": Fr<0x3049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea>, + "contractClassId": Fr<0x270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f10150>, + "privateFunctionsArtifactTreeRoot": Fr<0x2caaad89f1bc2bb35d0fe39aede0ffae1f0f38fb3a97b0d79837c0afbfed1f42>, "unconstrainedFunction": BroadcastedUnconstrainedFunction { - "bytecode": Buffer<0x1f8b08000000000000ffed5dcd8f64c951cfeafae8aeeae9e99ae99e5defee98a99d9df12e60e07dd597b93402db3266910009c18d5755afec01b36dc6bdacd707d408092410321c015f913880f803cc85131790b9db075bf2d196ff005b96ebedbea8faf5afe2bd7aaf2ab3a76777539aa9ea179111911191919991f9b26ae6fd72b8f857cbbe37b3cf96592f8273967d7abb15df222dcfa59cb5e744cebde744cefa732267c3a29ca96c7573b5d896b7e940afb6656c3d0732ee5bb6bbc8d8c8be1f2cfeb517ff3ae6fdd8bb06c486ed658e93c25303a70adc079c3ca21f23e5a4e55ff656df5fca3e7fede9d3f8ddde93b766c9577be76f5ff4cee7bdc9f9db6fcdbe8215ff1d2adecf3ee38b8be44fbf7cd1bb38efc5b359ef9d27175fec9dff79f274fea5f377b0ee37b765fabf3b30fdf6b64c7fb003d31f6fcbf4567d7ba6afd4b764fac91d9886db32fdd4b6153fbd83b4bf05756f679fbf77114fff6451f3bc374b922f23f6bbdb8af8d73b88f8b7db32fda71d987e6b5ba6dfdd81e91f34b664fa47db56fce2b615df69546be632d67e2dabd8cefe96b82071fe2cfbdbdbadf86da06b9bfec88be66d73b558963f6c6734f7ddd01f09fd0337f43d91fbd72f57f4b12dc257bacb672f57bafc2cd449ff1dc17743740506e38bf90d82e1e4f2d304033f369f2158d3accb247a6b415b2cfa956bbb84d2369c27895e8577db0defa846fc8c59e91f61c2bf639cf601bf46fc441ed68ff8d651f659bf5cc9d32258e372bd1d026b024cec9b7ebe0a78ec5bfb80f74978ce3edf30eb7d44e062d73ad4b7e8b393b6b9da976cfb8da677b64903607582a1de714d207a3f59fcfbfce54a8fa2b3b4ec5f3a69d372f17390d16f026fe189b2ef113e7ec75825cf7ed1ac60efb507ea099f3a3c139ec7d9df2d80b52f37d36a28b4ba0a7e8b68ed2bb4f099b43bed130fb3efe91a2eb5dfe7324373cc4ccb59f6e96d59c259321c0583b1c82afed034ebbe2e7cb57e603341e67acc16fa1d8b7a94d2243dfe03d83522fde158602f71178ddbe66aecb04b7fd0d7e2ac3dfac3a1d06fba913fd1e63616f51f69f30b8bfa59daf7d009fd60d93f6eb9d1ff721c3d02fa16e3872ff30b59e80b0f63567def189edb8b2d7ebfecdc4ff87748565773bf639287f583f38c14d6556415dddd01983dbfe8f7bb0a6fe485306c4757698746ab6991d6ad1b2097d8e32ed4b7d84fe79aac772db6bb6e91964ddb1ede50b9b6d5bdf8c909d4b7381e459aac2716dbbd6791964ddbda6c637b4b5a62db53a86fd1b69e26eba9c576df54dbd62cd26a11ad63a22363bee02cd7f384ff97d9e791c25fe4157fb807cf2dce6f0635e2678c3ebfb947b2a23c22774781edb2811dc7e130f2a32499fb9e1ff8c31ad11759f919fbe00b0abe3657125dbf689ce85acd07bd007a7d4f3e80dd235813602223e683da44d3b6fc65f48ffcbb0a0c7300556c79d75cf535d41bf66f63d6fb8ea3bd9ad26b03e1df31ebb1c8c5da60cfacebb4a6e894f719b06e578175e03bc2904f5de1f33cd2e2fd06d4611affff7eef2ade21d0afe57c8a3cfc8ced714ba1a5adb19fc51e87f0ef90acae7cf988e461fdb0ee6e2bb2761518fbcc6d858f36465c172d81e11c48da7d6cd67d81d7af9ade8e0a64c0fa82e7d8e7fcb6d27e177b86381797f127edc3ff4a3a937959137486756f031cf17fa5bea2f96fd9b363c2415b1e9b75dbf29cf29074c23186edd72ae08330f69396c2a755c0e75609990dd03a5668d5cc7a3fe636a2adcab4e35645dedafc5feb039aad96fb43c6690c0c44d63b15db7657c1c7bc1bc7112d27a1e5a22cce25977df3c4ac1781e1ba146dcfa5417fa3dca90ffd767d4597f19827f6d75382a10e658eaaadd76de69f79bd65149971be8f7eca45d393c85d554fe8173c17c73c8aac531caf4d8647c4cf2832e3f959f4792e9a9e44eeaa7a42bff818c1705d24a7d8da8aac16f5343e227e4691f965e08d73632e9a9e44eeaa7a42bf789960b81e7f25fbce7a4acb59f6197a51304806519c24a1978cc7a3a91f4e47d32499cee2301e0e47de703649e2593f984c837938997b499c8cfafe249a0c7d6fba9c97bca4d0f6223f08423f1a4e06236fd4f766d351908ce27e3f1ef78359349b075ed01fcc13af3f0e67e368bc781cf9d3d8f3e65e3c99fbcbbdd69715da7e309ecc67fe2cee2f04f106c16c30e94751324cc2c164ec0dc341d8f7e683f9245e644382d17441771878e371df1bcffb43cf5fee83bea2c91d8f16d8c9c09b798bffe6fdd9c88bfad178168de60b7545336fe047de643c4a66437f188f27fd3088e78370a18d7eb8d8a25ceae4be463b994dfc241887d3709a8cfdc97cea45c9e26b1c2ff4134c170a98c7e399374ee54d26911726f3893f9dc7c1741286fde15c687f5cd3891ffafd41ec0d46f381177a411844de743c9844a99686d160b0306538190d7d7fda0f160ca251e007b1df9f4cbd304ae281f8d0cf01ed1af9d003786e71fc9ed5889f31fa9a4af8774856dbf3ed1af11379583fbca6ea29b2761518c62c84219f9ec247a3f5718bb41a5bd212ff78156067d967300afad3e1783a1dc4fde964b2c8510e67837834f72783d80f26e1c209e3301c45911727f385d387e345071b4d47e345e858748fb126e7ab16dbfcb2455adbea4fa3757f4b5a628b87003bcb3efd30f26783617f1e2f2244324dc245d05844f7701a87d1229e86137f3c1924e3e120f0a2c170f16c91541e05d1345a586c96847d4dce8716db6c537f2f59a4f58a455ad246891918636ad9673ba7de59f6b7b75b19978db7c2bf639cc67fbf48af0f14bd8aee5e5364ed2a305cab200cf9bca6f0d168ddb148ebae455a2716699d5aa475cf22ad172cd292b9328fdd024f4b5ba9f72c72c9c2bf639cc605bf48afdabc47f4f3c88d3c5391e7b122cf8302793ee1469e91c8f3ba224f4f91e78ed17d08f5f518bea3dcc283cf0add29c95bf037e5b8387788b192735cc8fb2cfbf4aa95901fb8cd7704218f15580486f640dd70d994eff8c69679a14704c358fe9860189b3f41308cb5e23fc7665dbf3cee68fbfef88ce368514e0bebd5723e850f3f633e9accc78a0c3cf6693e7fb780cf89c2e748a9b76b7b3499b5fceeae7cb03d9c9b3db5c8077d91f3bc98873dcb3ebddd4ae8f6dc49f558c1be8fb19cfd08633bdbfe7580b1bdde50745c3636e1d9976f56884d79fb80bf595b3d47fa79fb80b7008ef8c7b00ff86646d36d8ee966d9b6acfd4417a90df61a2bba8cc7edc0fe216dba69faad3acea22e9ef5388be3128fb3a85f1e67b57ca2368fd5c68b0724839637d8368e6b327f34ce6ee6f32cc659f13d9e37a7e52cfbf4762b91dbfc53f558c1beef7a9cc5fecd458b4dbdecbbad71f692c6d95e062b3bce0afe8ff65634ff8ac65937398d2062fb19a5dd683fb62dda8f6d8bf663dba2fdaa8eb3a28baae36c0f60d226b181bcfff28f59c5d4065faf5dad8f3694f36c29de5f6476737b66a27a3fac7ab6c4c699893263f64d9bdb543d5b82739b2a7a427bb09ed067584f6ef275419ffbb75164c6fe5df56c89c85d554fe8173c97c33828f1a56dd6e394453d0d5817469119635dd5b3252277553d75155d68fefd06c1ea0a5db73a2cbf8725fc3b665d972e72e75aae5a3b53aff507a9db35f96361cdacfb4e4379b65740ebc422ad96455aa716693db048eb358bb4ba166971cc47dfe37ee8684fa4f41e96f0ef18a771c12fd26bd11ed6eb6ee459ee61bda1c8532f90e7e7ddc8b3dcc3fa05459ec78a3cb887a5ed4f61db586ee1c17b588d92bc05bfa5e0a38ff11e16f293badabbe016c7f4e5dd1baf9af522b087c0bb6afe4be4ae9aff423d3d2418c6eed70886718ae30c8e4562b763a3eb57be234cdac8cf38d661fdebcae334a83d589fc73acd8f1b057c5a0a9f23a5deaeedd164669bdbe083ede9129fae453ed7ffde45f5feccfec9f91584696b6a2d37c23ac5f85b752f08dff3a892a3c27b3c3047f5e3daea39d2c71c15d6e51c95e07f0b72543fcd686af7607d506d5bd67ecbfbff4cb51c158e85d2a69bd677aa8e85e8cbb6c642f4351e0b8bf22c68471e0b59bff21d61d2467e5614d3af6befa4682ce4fb7daa8e854d858febb1b0497c9a16f9607bae7bcc6d9b755f7c96fd99fdb36cbc64fb60bc649de2585875bf46f454752cc475098e85dedeea39d2c7b110ebf25828f8ff096361487b006ef25637cbb665ed27baa83a16a20d38fe17e530b15f5a5c8b97be17459e5d570e538be55aae22f563396bf285e4e2f3c9bbbf1f7fe9c92cbe7872fed6ef267ff676f2950b6c0692d69ac9e66f103bc1e32b443a0a9e211c0ef745cd127c2ded80615eae39285a2a6a57963e4f532d91bbea544b9b76ee3ad5c2eb4378aa85fae5749376dd42d1151158ff9064b0717d4db740662d85c553adaad7f634153e45616fdbf668327f50a65ae27beeaed00efb6eaf79a91e2bd8f771a8673fb2318dc3fecd458b4da2a7aad338f4079cc69dd3344e60388dc3ba3c8d13fcafc334ee294de3708cf9a0dab6acfd441755a77168031e5bf83a5163ae1ea9611ac8e3a36bf0d6fddc98edafc1e3d72e77b96eee458bb47a1669e14fc0a47f97bd060f6d2a750e01ce3f8568ccfad863d91fc2b2fe29fc3b24ab2bffec903cac1ff6cfa26be210c6f3fd5daea3133d39beaa6d79d5959662401bf1156c82ff8dac119832c452a40b4de72c0fe2df269cb4c8fc167d98d3586efce98337ffc19f982a33ffe1798dd065df39227c3c9aaae1e33c09f1ff6383af959d8f156d29baddd62f1f13857f8764751513b5ad74ed5a6eed38a8d4d55e2fa8d1f75385cfa9c247a3257dc4ed31e6554c942dd1bcb4eb29c011ffbf4ac6444d179ace591ec4e7ebead3a21d9de0d7293faca97dd409171ba9fda2f10bedc93151e46ae5e0e3f88cf8ff5732266ab470aba168ebcf717f2b1d13857f8764751513b5fea96da98aeeee29b26a57b197e9d7da55ec1a2d8e896e7eae601513e5aab1bc6319183311ff3b2563a2a60b4de72c0fe2f3cf20a44562a2762de487fde84fd5d79baa1efda999753b6abec33151e46ae5e0e31121c4ff61c998a8d1c2a34882d73357db9216c757f9948e8937e12a9f1e3ce398f84891b5abc06af4fd91c2e791c247a3c557df3e72a393654cc457f54456cc1b3e0238e2ffa4644cd474d15374c1f2203eea40649398883eccaf76f500663126dea8d73a058647cd51275cb498d8cbbe578d893da2cbbec33151e46ae5e00bbd26e11f65326d8a891a2d7c8558f05ea4b618e3fc5ad7d23191af757573bd4bf1b5aea81f8e893d4556ed6a47eed73d854f4fe1a3d1e29f9eecb9d149c07e9a17137b0047fcfb1bfcb448179ace591ec4ef010ec744f461a9fb61bf2e0875c2458b8955af0baa99753b96898922575e4cc46b8510ff97b688892f022fb9bea8e82747f8aa3b173111ed9dd7dfee900e043f2ad9dfb46b02b59f2b6179101f75c0fdedfa5fc958e9ee0474a3e98ed71982ffab25fc272df8b3731887dfd3cda593b645699fbb0f7be06cc326f0dd64afb4b07db57c31da49daa7bd12c5afac6a3fa95cd4df317fa5e1e3cf0921fe6736d84b3b47253a382ae0833f69e4d2aec391e749bc149f129fe5d20038e2bfb9410769db53dff95c7dd59e94a79323a2bee7151dd177fdda4e8df819a3cf27857f8764b5dc6797f349ed5c29ea47fa62ea9b2766d52f8c622ba1d593ca360feab1818c3d6578650e01ba3a9ce7e2b0a1e86a1f6067d9a7b75bf1b5838cfb397c6d3baddb4df6d57dbe6ddb7af357b4dd1c80f1bd4def797ca1be7a8eb0bc0dc70ec011ff6db8fff28fb3efc74afda243c17cc0bc515ddffe268d082ff1d33db31e50392ef1c080ede17ed924fdd4143a7c9fd6d3928b809a2283665f913f1d4845cf070adced6fd8059ec87c04edd67c8a0f9d0afed74a2e0cb4dfffd3062b9607f15107bc898d93b1e5845aa98707e9b5baec2b47205f112dedef03854ed1617fcd0ff8dd7feda502adefb3def3368c855e93f0ff66835dddfef6e8ca2ff14059c3e4dbba49f87f57d22f353f2bf24bed801aea806d89fe2275eb4a3bb07f687537f9651eadaa7e59f43ba50705f21c923c88cb8bbca6528fc7b6b468feca075da57e9e7ff32131c1ffe792f17cd3988c8b20ae23f5d2e2f67dcaf287bc857f47699f8b458a76c819f5c363a436c65fc7fa01f9eefa8ef9f3404b7ce219be875afa0e2f7976d3de43e5f525d62d5a2fd608867cb464e975d1d2ec9dfe3bcbfef6762ced1c7dd9a2afcdc1f35e3c44393899756cf2edaaad936dea88c7c18659b731f2e735de7f6f18d7b4b6d50bdae622918e6d6b14b4cdb1bff8acbbefc3faf87fc817b4176cb47911af4bda8a9eb597111a04d35ed2753be75ed967db39f7ff6fb1d181b64e4be3d249dbd48d0e9c2737812fb6d198f5f5675ab65d17682ff1340986f1eb16c1b4f968d10b62dad82f7e77acf0633fd4721635921bdb8cf8bc76155be7cdd5392f23f8df2bb921a3e5808be63ea91cb50ce038f68db417eca414bd44aa5d42c0f30f2d56b08fb30eb8f0e610ea2295d987bec37852ae3b56babde4e2fdf9445a3e8a57373f5e69345b0534b51890370f6c2afcb4b949faef2cfbdbdbb170ccc479a0761105c7cc834cd04df93b379ba6de40db7b9352f4d232c7492dde6971428b9355e31dde755825ded51479347f14bcb652cfa2eff845feaec9cc7b8f8e72424b9fd6d6d7a8578e55451bddda3852b417acd94af660d2d2ba5cf1c2b89f96fdcb950c0d055fe468127e2f434efbc243f2aba6c2efbd17ae0af06a399f22dbdab3acaef49bf6e50ac7b67dd3d2b95ce9a1413c519e3dc2c7ef683b79f6cb8d152c2d874833fbacc333e129b63d00d8e1e5665a4d855657c13f205a6d85163e9376a7767e9c217488a765dbf8e8537987771cadb343c7736bcff1d9025f7b1108d73243f04b84e5bdfc963766bf0971e253d9f7a231a6687ea2e579f2ce98d89ebb6a6b1d1efbda6e7897de0711fed77599489be4e1b911dbc6d1652b91c8a3ed236b176ddcc9feb1cd50be43a023cfc4b7343f445db31ecae4aeb5fdf1aaeb8d1ac1b47d163c9b817d85e9885ef2fa3be76a05ff77a0bf5f507f477e2e728aec6f8e728a4b7fbbbd41477939c53fdcb08ea9517d63d67396c6545ffff20bc1da3ebea6578e738e2ee459e66af110b3a657be9047f0e3927ad5f454a457ed90b6963b10dda1ce8f893f9f5b401b48bd9beebf4f36e8f919e698facf3ac7c47924f413ce3f6967d1b6cd2361bc1559f71559d1be3c66b581569598ffd512fe90470be79a3f03c748153949c40000>, - "metadataHash": Fr<0x1a8b89c75f0ad79c19ba53a8bdfcb25bd4f8d33bfa11f1f52528a8ee58fc2543>, - "selector": Selector<0xd9183919>, + "bytecode": Buffer<0x1f8b08000000000000ffb593cb0ec2201045a9c528d2c4c4c77f4c534cbb74e1da7f20ad2c755137eefae9d664264c88d1057013324c80c35c1e85f02a304a1121821c312a8c0b365eceed8c39c4a956c1be29f91d18a3bef84b587fa39059e4e103f1339d3fac9073993c9f7ba17dd773d3ac5f09ff3e72f9a7fbcbe97fffc3b346af5bcc2be1ffc3f8baf7d7c7f3368a3fd26c919cd29b683b002abe44fe12f9a1241be7f30f986f84af8fa28ca8d3b5b6768d75f66487c1f47617f03fe287fd06f3a87a78ce040000>, + "metadataHash": Fr<0x1eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b944>, + "selector": Selector<0x83abd7ca>, }, } `; diff --git a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts index 9de837e51b58..a199a825725b 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts @@ -1,22 +1,16 @@ -import { computePublicBytecodeCommitment } from '@aztec/circuits.js'; +import { ContractClassLog } from '@aztec/circuits.js'; +import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { getSampleContractClassRegisteredEventPayload } from '../tests/fixtures.js'; import { ContractClassRegisteredEvent } from './contract_class_registered_event.js'; describe('ContractClassRegisteredEvent', () => { - it('parses an event as emitted by the ContractClassRegisterer', async () => { - const log = getSampleContractClassRegisteredEventPayload(); + beforeAll(() => setupCustomSnapshotSerializers(expect)); + it('parses an event as emitted by the ContractClassRegisterer', () => { + const log = ContractClassLog.fromBuffer(getSampleContractClassRegisteredEventPayload()); expect(ContractClassRegisteredEvent.isContractClassRegisteredEvent(log)).toBe(true); const event = ContractClassRegisteredEvent.fromLog(log); - expect(event.contractClassId.toString()).toEqual( - '0x1c9a43d08a1af21c35e4201262a49497a488b0686209370a70f2434af643b4f7', - ); - expect(event.artifactHash.toString()).toEqual('0x072dce903b1a299d6820eeed695480fe9ec46658b1101885816aed6dd86037f0'); - expect(event.packedPublicBytecode.length).toEqual(27090); - const publicBytecodeCommitment = await computePublicBytecodeCommitment(event.packedPublicBytecode); - expect(publicBytecodeCommitment.toString()).toEqual( - '0x1d7d509f736d09975b88d01b5779a6f52e70905ba9294776d4881e811e6c1e9f', - ); + expect(event).toMatchSnapshot(); }); }); diff --git a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts index 9f9a9caeb17c..c2baa43d061a 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts @@ -1,4 +1,5 @@ import { + type ContractClassLog, type ContractClassPublic, PUBLIC_DISPATCH_SELECTOR, type PublicFunction, @@ -7,9 +8,7 @@ import { } from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader } from '@aztec/foundation/serialize'; - -import chunk from 'lodash.chunk'; +import { FieldReader } from '@aztec/foundation/serialize'; import { REGISTERER_CONTRACT_CLASS_REGISTERED_TAG } from '../protocol_contract_data.js'; @@ -23,19 +22,17 @@ export class ContractClassRegisteredEvent { public readonly packedPublicBytecode: Buffer, ) {} - static isContractClassRegisteredEvent(log: Buffer) { - return log.subarray(0, 32).equals(REGISTERER_CONTRACT_CLASS_REGISTERED_TAG.toBuffer()); + static isContractClassRegisteredEvent(log: ContractClassLog) { + return log.fields[0].equals(REGISTERER_CONTRACT_CLASS_REGISTERED_TAG); } - static fromLog(log: Buffer) { - const reader = new BufferReader(log.subarray(32)); - const contractClassId = reader.readObject(Fr); - const version = reader.readObject(Fr).toNumber(); - const artifactHash = reader.readObject(Fr); - const privateFunctionsRoot = reader.readObject(Fr); - const packedPublicBytecode = bufferFromFields( - chunk(reader.readToEnd(), Fr.SIZE_IN_BYTES).map(Buffer.from).map(Fr.fromBuffer), - ); + static fromLog(log: ContractClassLog) { + const reader = new FieldReader(log.fields.slice(1)); + const contractClassId = reader.readField(); + const version = reader.readField().toNumber(); + const artifactHash = reader.readField(); + const privateFunctionsRoot = reader.readField(); + const packedPublicBytecode = bufferFromFields(reader.readFieldArray(log.fields.slice(1).length - reader.cursor)); return new ContractClassRegisteredEvent( contractClassId, diff --git a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts index 9dd2cdd9a8f3..3b51c36db20c 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts @@ -1,3 +1,4 @@ +import { ContractClassLog } from '@aztec/circuits.js'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { getSamplePrivateFunctionBroadcastedEventPayload } from '../tests/fixtures.js'; @@ -7,7 +8,7 @@ describe('PrivateFunctionBroadcastedEvent', () => { beforeAll(() => setupCustomSnapshotSerializers(expect)); it('parses an event as emitted by the ContractClassRegisterer', () => { - const log = getSamplePrivateFunctionBroadcastedEventPayload(); + const log = ContractClassLog.fromBuffer(getSamplePrivateFunctionBroadcastedEventPayload()); expect(PrivateFunctionBroadcastedEvent.isPrivateFunctionBroadcastedEvent(log)).toBe(true); const event = PrivateFunctionBroadcastedEvent.fromLog(log); diff --git a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts index 8a30be9c346b..c08985fd65fc 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts @@ -1,16 +1,14 @@ import { ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, + type ContractClassLog, type ExecutablePrivateFunctionWithMembershipProof, FUNCTION_TREE_HEIGHT, MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS, type PrivateFunction, - REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS, } from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, type Tuple } from '@aztec/foundation/serialize'; - -import chunk from 'lodash.chunk'; +import { type Fr } from '@aztec/foundation/fields'; +import { FieldReader, type Tuple } from '@aztec/foundation/serialize'; import { REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG } from '../protocol_contract_data.js'; @@ -27,42 +25,33 @@ export class PrivateFunctionBroadcastedEvent { public readonly privateFunction: BroadcastedPrivateFunction, ) {} - static isPrivateFunctionBroadcastedEvent(log: Buffer) { - return log.subarray(0, 32).equals(REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG.toBuffer()); + static isPrivateFunctionBroadcastedEvent(log: ContractClassLog) { + return log.fields[0].equals(REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG); } - static fromLog(log: Buffer) { - const expectedLength = - 32 * - (MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS + - REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS); - if (log.length !== expectedLength) { - throw new Error( - `Unexpected PrivateFunctionBroadcastedEvent log length: got ${log.length} but expected ${expectedLength}`, - ); - } - - const reader = new BufferReader(log.subarray(32)); - const event = PrivateFunctionBroadcastedEvent.fromBuffer(reader); - if (!reader.isEmpty()) { - throw new Error( - `Unexpected data after parsing PrivateFunctionBroadcastedEvent: ${reader.readToEnd().toString('hex')}`, - ); + static fromLog(log: ContractClassLog) { + const reader = new FieldReader(log.fields.slice(1)); + const event = PrivateFunctionBroadcastedEvent.fromFields(reader); + while (!reader.isFinished()) { + const field = reader.readField(); + if (!field.isZero()) { + throw new Error(`Unexpected data after parsing PrivateFunctionBroadcastedEvent: ${field.toString()}`); + } } return event; } - static fromBuffer(buffer: Buffer | BufferReader) { - const reader = BufferReader.asReader(buffer); - const contractClassId = reader.readObject(Fr); - const artifactMetadataHash = reader.readObject(Fr); - const unconstrainedFunctionsArtifactTreeRoot = reader.readObject(Fr); - const privateFunctionTreeSiblingPath = reader.readArray(FUNCTION_TREE_HEIGHT, Fr); - const privateFunctionTreeLeafIndex = reader.readObject(Fr).toNumber(); - const artifactFunctionTreeSiblingPath = reader.readArray(ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, Fr); - const artifactFunctionTreeLeafIndex = reader.readObject(Fr).toNumber(); - const privateFunction = BroadcastedPrivateFunction.fromBuffer(reader); + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + const contractClassId = reader.readField(); + const artifactMetadataHash = reader.readField(); + const unconstrainedFunctionsArtifactTreeRoot = reader.readField(); + const privateFunctionTreeSiblingPath = reader.readFieldArray(FUNCTION_TREE_HEIGHT); + const privateFunctionTreeLeafIndex = reader.readField().toNumber(); + const artifactFunctionTreeSiblingPath = reader.readFieldArray(ARTIFACT_FUNCTION_TREE_MAX_HEIGHT); + const artifactFunctionTreeLeafIndex = reader.readField().toNumber(); + const privateFunction = BroadcastedPrivateFunction.fromFields(reader); return new PrivateFunctionBroadcastedEvent( contractClassId, @@ -103,13 +92,14 @@ export class BroadcastedPrivateFunction implements PrivateFunction { public readonly bytecode: Buffer, ) {} - static fromBuffer(buffer: Buffer | BufferReader) { - const reader = BufferReader.asReader(buffer); - const selector = FunctionSelector.fromField(reader.readObject(Fr)); - const metadataHash = reader.readObject(Fr); - const vkHash = reader.readObject(Fr); - const encodedBytecode = reader.readBytes(MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS * 32); - const bytecode = bufferFromFields(chunk(encodedBytecode, Fr.SIZE_IN_BYTES).map(Buffer.from).map(Fr.fromBuffer)); + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + const selector = FunctionSelector.fromField(reader.readField()); + const metadataHash = reader.readField(); + const vkHash = reader.readField(); + // The '* 1' removes the 'Type instantiation is excessively deep and possibly infinite. ts(2589)' err + const encodedBytecode = reader.readFieldArray(MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS * 1); + const bytecode = bufferFromFields(encodedBytecode); return new BroadcastedPrivateFunction(selector, metadataHash, vkHash, bytecode); } } diff --git a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts index db3ae210eabe..0f1ea24e5e0b 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts @@ -1,3 +1,4 @@ +import { ContractClassLog } from '@aztec/circuits.js'; import { FunctionSelector } from '@aztec/foundation/abi'; import { randomBytes } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; @@ -14,7 +15,7 @@ describe('UnconstrainedFunctionBroadcastedEvent', () => { beforeAll(() => setupCustomSnapshotSerializers(expect)); it('parses an event as emitted by the ContractClassRegisterer', () => { - const log = getSampleUnconstrainedFunctionBroadcastedEventPayload(); + const log = ContractClassLog.fromBuffer(getSampleUnconstrainedFunctionBroadcastedEventPayload()); expect(UnconstrainedFunctionBroadcastedEvent.isUnconstrainedFunctionBroadcastedEvent(log)).toBe(true); const event = UnconstrainedFunctionBroadcastedEvent.fromLog(log); diff --git a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts index 0bc22385f077..29bf30a77c72 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts @@ -1,16 +1,14 @@ import { ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, + type ContractClassLog, MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS, - REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS, type UnconstrainedFunction, type UnconstrainedFunctionWithMembershipProof, } from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/foundation/abi'; import { removeArrayPaddingEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, type Tuple } from '@aztec/foundation/serialize'; - -import chunk from 'lodash.chunk'; +import { FieldReader, type Tuple } from '@aztec/foundation/serialize'; import { REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG } from '../protocol_contract_data.js'; @@ -25,40 +23,31 @@ export class UnconstrainedFunctionBroadcastedEvent { public readonly unconstrainedFunction: BroadcastedUnconstrainedFunction, ) {} - static isUnconstrainedFunctionBroadcastedEvent(log: Buffer) { - return log.subarray(0, 32).equals(REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG.toBuffer()); + static isUnconstrainedFunctionBroadcastedEvent(log: ContractClassLog) { + return log.fields[0].equals(REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG); } - static fromLog(log: Buffer) { - const expectedLength = - 32 * - (MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS + - REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS); - if (log.length !== expectedLength) { - throw new Error( - `Unexpected UnconstrainedFunctionBroadcastedEvent log length: got ${log.length} but expected ${expectedLength}`, - ); - } - - const reader = new BufferReader(log.subarray(32)); - const event = UnconstrainedFunctionBroadcastedEvent.fromBuffer(reader); - if (!reader.isEmpty()) { - throw new Error( - `Unexpected data after parsing UnconstrainedFunctionBroadcastedEvent: ${reader.readToEnd().toString('hex')}`, - ); + static fromLog(log: ContractClassLog) { + const reader = new FieldReader(log.fields.slice(1)); + const event = UnconstrainedFunctionBroadcastedEvent.fromFields(reader); + while (!reader.isFinished()) { + const field = reader.readField(); + if (!field.isZero()) { + throw new Error(`Unexpected data after parsing UnconstrainedFunctionBroadcastedEvent: ${field.toString()}`); + } } return event; } - static fromBuffer(buffer: Buffer | BufferReader) { - const reader = BufferReader.asReader(buffer); - const contractClassId = reader.readObject(Fr); - const artifactMetadataHash = reader.readObject(Fr); - const privateFunctionsArtifactTreeRoot = reader.readObject(Fr); - const artifactFunctionTreeSiblingPath = reader.readArray(ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, Fr); - const artifactFunctionTreeLeafIndex = reader.readObject(Fr).toNumber(); - const unconstrainedFunction = BroadcastedUnconstrainedFunction.fromBuffer(reader); + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + const contractClassId = reader.readField(); + const artifactMetadataHash = reader.readField(); + const privateFunctionsArtifactTreeRoot = reader.readField(); + const artifactFunctionTreeSiblingPath = reader.readFieldArray(ARTIFACT_FUNCTION_TREE_MAX_HEIGHT); + const artifactFunctionTreeLeafIndex = reader.readField().toNumber(); + const unconstrainedFunction = BroadcastedUnconstrainedFunction.fromFields(reader); return new UnconstrainedFunctionBroadcastedEvent( contractClassId, @@ -98,12 +87,13 @@ export class BroadcastedUnconstrainedFunction implements UnconstrainedFunction { public readonly bytecode: Buffer, ) {} - static fromBuffer(buffer: Buffer | BufferReader) { - const reader = BufferReader.asReader(buffer); - const selector = FunctionSelector.fromField(reader.readObject(Fr)); - const metadataHash = reader.readObject(Fr); - const encodedBytecode = reader.readBytes(MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS * 32); - const bytecode = bufferFromFields(chunk(encodedBytecode, Fr.SIZE_IN_BYTES).map(Buffer.from).map(Fr.fromBuffer)); + static fromFields(fields: Fr[] | FieldReader) { + const reader = FieldReader.asReader(fields); + const selector = FunctionSelector.fromField(reader.readField()); + const metadataHash = reader.readField(); + // The '* 1' removes the 'Type instantiation is excessively deep and possibly infinite. ts(2589)' err + const encodedBytecode = reader.readFieldArray(MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS * 1); + const bytecode = bufferFromFields(encodedBytecode); return new BroadcastedUnconstrainedFunction(selector, metadataHash, bytecode); } } diff --git a/yarn-project/protocol-contracts/src/scripts/generate_data.ts b/yarn-project/protocol-contracts/src/scripts/generate_data.ts index e518047ceb28..c2cb373fad4c 100644 --- a/yarn-project/protocol-contracts/src/scripts/generate_data.ts +++ b/yarn-project/protocol-contracts/src/scripts/generate_data.ts @@ -131,10 +131,20 @@ async function generateRoot(names: string[], leaves: Fr[]) { } async function generateLogTags() { + // See silo_contract_class_log for all registerer tags return ` - export const REGISTERER_CONTRACT_CLASS_REGISTERED_TAG = new Fr(${REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE}n); - export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG = new Fr(${REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE}n); - export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG = new Fr(${REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE}n); + export const REGISTERER_CONTRACT_CLASS_REGISTERED_TAG = Fr.fromHexString('${await poseidon2Hash([ + REGISTERER_CONTRACT_ADDRESS, + REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE, + ])}'); + export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG = Fr.fromHexString('${await poseidon2Hash([ + REGISTERER_CONTRACT_ADDRESS, + REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE, + ])}'); + export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG = Fr.fromHexString('${await poseidon2Hash([ + REGISTERER_CONTRACT_ADDRESS, + REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE, + ])}'); export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_TAG = Fr.fromHexString('${await poseidon2Hash([ DEPLOYER_CONTRACT_ADDRESS, DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE, diff --git a/yarn-project/sequencer-client/src/publisher/sequencer-publisher.test.ts b/yarn-project/sequencer-client/src/publisher/sequencer-publisher.test.ts index 9df7ebedfe4c..85e686442181 100644 --- a/yarn-project/sequencer-client/src/publisher/sequencer-publisher.test.ts +++ b/yarn-project/sequencer-client/src/publisher/sequencer-publisher.test.ts @@ -47,7 +47,6 @@ describe('SequencerPublisher', () => { let header: Buffer; let archive: Buffer; let blockHash: Buffer; - let body: Buffer; let blobSinkClient: HttpBlobSinkClient; let mockBlobSinkServer: Server | undefined = undefined; @@ -66,7 +65,6 @@ describe('SequencerPublisher', () => { header = l2Block.header.toBuffer(); archive = l2Block.archive.root.toBuffer(); blockHash = (await l2Block.header.hash()).toBuffer(); - body = l2Block.body.toBuffer(); proposeTxHash = `0x${Buffer.from('txHashPropose').toString('hex')}`; // random tx hash @@ -144,7 +142,6 @@ describe('SequencerPublisher', () => { header = l2Block.header.toBuffer(); archive = l2Block.archive.root.toBuffer(); blockHash = (await l2Block.header.hash()).toBuffer(); - body = l2Block.body.toBuffer(); }); const closeServer = (server: Server): Promise => { @@ -227,7 +224,6 @@ describe('SequencerPublisher', () => { txHashes: [], }, [], - `0x${body.toString('hex')}`, blobInput, ] as const; expect(forwarder.forward).toHaveBeenCalledWith( diff --git a/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts b/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts index 94e1fc07ef15..4f480a826a28 100644 --- a/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts +++ b/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts @@ -47,8 +47,6 @@ type L1ProcessArgs = { archive: Buffer; /** The L2 block's leaf in the archive tree. */ blockHash: Buffer; - /** L2 block body. TODO(#9101): Remove block body once we can extract blobs. */ - body: Buffer; /** L2 block blobs containing all tx effects. */ blobs: Blob[]; /** L2 block tx hashes */ @@ -487,8 +485,6 @@ export class SequencerPublisher { txHashes, }, attestations, - // TODO(#9101): Extract blobs from beacon chain => calldata will only contain what's needed to verify blob and body input can be removed - `0x${encodedData.body.toString('hex')}`, blobInput, ] as const; diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index e1cd1aed5b65..d8e32b0f2f74 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -1,4 +1,5 @@ -import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types'; +import { MerkleTreeId } from '@aztec/circuit-types'; +import { ContractClassLog } from '@aztec/circuits.js'; import { FunctionSelector, NoteSelector } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; @@ -280,12 +281,11 @@ export class Oracle { return newValues.map(toACVMField); } - emitContractClassLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): ACVMField { - const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer())); - const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), logPayload); + emitContractClassLog([_contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): void { + const logPayload = message.map(fromACVMField); + const log = new ContractClassLog(logPayload); - const logHash = this.typedOracle.emitContractClassLog(log, +counter); - return toACVMField(logHash); + this.typedOracle.emitContractClassLog(log, +counter); } debugLog(message: ACVMField[], _ignoredFieldsSize: ACVMField[], fields: ACVMField[]): void { diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index e8594211633b..4f945acc8c03 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -5,10 +5,10 @@ import { type NoteStatus, type NullifierMembershipWitness, type PublicDataWitness, - type UnencryptedL2Log, } from '@aztec/circuit-types'; import { type BlockHeader, + type ContractClassLog, type ContractInstance, type IndexedTaggingSecret, type KeyValidationRequest, @@ -175,8 +175,8 @@ export abstract class TypedOracle { return Promise.reject(new OracleMethodNotAvailableError('storageWrite')); } - emitContractClassLog(_log: UnencryptedL2Log, _counter: number): Fr { - throw new OracleMethodNotAvailableError('emitContractClassUnencryptedLog'); + emitContractClassLog(_log: ContractClassLog, _counter: number): void { + throw new OracleMethodNotAvailableError('emitContractClassLog'); } callPrivateFunction( diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index 380c1a4e4841..db1f7964cc94 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -9,11 +9,11 @@ import { type NoteStatus, type PrivateCallExecutionResult, PublicExecutionRequest, - type UnencryptedL2Log, } from '@aztec/circuit-types'; import { type BlockHeader, CallContext, + ContractClassLog, FunctionSelector, PRIVATE_CONTEXT_INPUTS_LENGTH, PUBLIC_DISPATCH_SELECTOR, @@ -323,20 +323,19 @@ export class ClientExecutionContext extends ViewDataOracle { } /** - * Emit a contract class unencrypted log. - * This fn exists because sha hashing the preimage - * is too large to compile (16,200 fields, 518,400 bytes) => the oracle hashes it. - * See private_context.nr - * TODO(#8945): Contract class logs are currently sha hashes. When these are fields, delete this. - * @param log - The unencrypted log to be emitted. + * Emit a contract class log. + * This fn exists because we only carry a poseidon hash through the kernels, and need to + * keep the preimage in ts for later. + * We could also return the hash here if we must save extra gates. + * @param log - The contract class log to be emitted. + * @param counter - The contract class log's counter. */ - public override emitContractClassLog(log: UnencryptedL2Log, counter: number) { + public override emitContractClassLog(log: ContractClassLog, counter: number) { this.contractClassLogs.push(new CountedContractClassLog(log, counter)); - const text = log.toHumanReadable(); + const text = log.toBuffer(); this.log.verbose( `Emitted log from ContractClassRegisterer: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`, ); - return Fr.fromBuffer(log.hash()); } #checkValidStaticCall(childExecutionResult: PrivateCallExecutionResult) { diff --git a/yarn-project/simulator/src/public/public_db_sources.ts b/yarn-project/simulator/src/public/public_db_sources.ts index 69b2a5871b43..a41fd1b93c9c 100644 --- a/yarn-project/simulator/src/public/public_db_sources.ts +++ b/yarn-project/simulator/src/public/public_db_sources.ts @@ -1,5 +1,4 @@ import { - ContractClassTxL2Logs, MerkleTreeId, type MerkleTreeReadOperations, type MerkleTreeWriteOperations, @@ -47,10 +46,10 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { */ public async addNewContracts(tx: Tx): Promise { // Extract contract class and instance data from logs and add to cache for this block - const logs = tx.contractClassLogs.unrollLogs(); - const contractClassRegisteredEvents = logs - .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data)) - .map(log => ContractClassRegisteredEvent.fromLog(log.data)); + const siloedLogs = await tx.filterContractClassLogs(tx.data.getNonEmptyContractClassLogsHashes(), true); + const contractClassRegisteredEvents = siloedLogs + .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log)) + .map(log => ContractClassRegisteredEvent.fromLog(log)); await Promise.all( contractClassRegisteredEvents.map(async event => { this.log.debug(`Adding class ${event.contractClassId.toString()} to public execution contract cache`); @@ -76,22 +75,15 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { * @param tx - The tx's contracts to be removed * @param onlyRevertible - Whether to only remove contracts added from revertible contract class logs */ - public removeNewContracts(tx: Tx, onlyRevertible: boolean = false): Promise { + public async removeNewContracts(tx: Tx, onlyRevertible: boolean = false): Promise { // TODO(@spalladino): Can this inadvertently delete a valid contract added by another tx? // Let's say we have two txs adding the same contract on the same block. If the 2nd one reverts, // wouldn't that accidentally remove the contract added on the first one? - const contractClassLogs = onlyRevertible - ? tx.contractClassLogs - .filterScoped( - tx.data.forPublic!.revertibleAccumulatedData.contractClassLogsHashes, - ContractClassTxL2Logs.empty(), - ) - .unrollLogs() - : tx.contractClassLogs.unrollLogs(); + const contractClassLogs = onlyRevertible ? await tx.getSplitContractClassLogs(true, true) : tx.contractClassLogs; contractClassLogs - .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data)) + .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log)) .forEach(log => { - const event = ContractClassRegisteredEvent.fromLog(log.data); + const event = ContractClassRegisteredEvent.fromLog(log); this.classCache.delete(event.contractClassId.toString()); }); diff --git a/yarn-project/simulator/src/public/public_processor.ts b/yarn-project/simulator/src/public/public_processor.ts index 23a0de010d60..fbef64d77418 100644 --- a/yarn-project/simulator/src/public/public_processor.ts +++ b/yarn-project/simulator/src/public/public_processor.ts @@ -21,6 +21,7 @@ import { NULLIFIER_SUBTREE_HEIGHT, PublicDataWrite, } from '@aztec/circuits.js'; +import { siloContractClassLog } from '@aztec/circuits.js/hash'; import { padArrayEnd } from '@aztec/foundation/collection'; import { createLogger } from '@aztec/foundation/log'; import { type DateProvider, Timer, elapsed, executeTimeout } from '@aztec/foundation/timer'; @@ -309,7 +310,7 @@ export class PublicProcessor implements Traceable { publicDataWriteCount: processedTx.txEffect.publicDataWrites.length, nullifierCount: processedTx.txEffect.nullifiers.length, noteHashCount: processedTx.txEffect.noteHashes.length, - contractClassLogCount: processedTx.txEffect.contractClassLogs.getTotalLogCount(), + contractClassLogCount: processedTx.txEffect.contractClassLogs.length, publicLogCount: processedTx.txEffect.publicLogs.length, privateLogCount: processedTx.txEffect.privateLogs.length, l2ToL1MessageCount: processedTx.txEffect.l2ToL1Msgs.length, @@ -434,11 +435,15 @@ export class PublicProcessor implements Traceable { this.globalVariables, ); + const siloedContractClassLogs = await tx.filterContractClassLogs( + tx.data.getNonEmptyContractClassLogsHashes(), + true, + ); + this.metrics.recordClassRegistration( - ...tx.contractClassLogs - .unrollLogs() - .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data)) - .map(log => ContractClassRegisteredEvent.fromLog(log.data)), + ...siloedContractClassLogs + .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log)) + .map(log => ContractClassRegisteredEvent.fromLog(log)), ); return [processedTx, undefined]; } @@ -465,11 +470,15 @@ export class PublicProcessor implements Traceable { } }); + const siloedContractClassLogs = await tx.filterContractClassLogs( + tx.data.getNonEmptyContractClassLogsHashes(), + true, + ); + this.metrics.recordClassRegistration( - ...tx.contractClassLogs - .unrollLogs() - .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data)) - .map(log => ContractClassRegisteredEvent.fromLog(log.data)), + ...siloedContractClassLogs + .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log)) + .map(log => ContractClassRegisteredEvent.fromLog(log)), ); const phaseCount = processedPhases.length; diff --git a/yarn-project/simulator/src/public/public_tx_simulator.test.ts b/yarn-project/simulator/src/public/public_tx_simulator.test.ts index bde8d830956a..c0406f9fea13 100644 --- a/yarn-project/simulator/src/public/public_tx_simulator.test.ts +++ b/yarn-project/simulator/src/public/public_tx_simulator.test.ts @@ -4,14 +4,14 @@ import { SimulationError, type Tx, TxExecutionPhase, - UnencryptedFunctionL2Logs, - UnencryptedL2Log, mockTx, } from '@aztec/circuit-types'; import { AppendOnlyTreeSnapshot, AztecAddress, BlockHeader, + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + ContractClassLog, type ContractDataSource, Fr, Gas, @@ -24,6 +24,7 @@ import { PublicDataTreeLeaf, PublicDataWrite, REGISTERER_CONTRACT_ADDRESS, + REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE, RevertCode, ScopedLogHash, StateReference, @@ -35,7 +36,7 @@ import { bufferAsFields } from '@aztec/foundation/abi'; import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/lmdb'; import { type AppendOnlyTree, Poseidon, StandardTree, newTree } from '@aztec/merkle-tree'; -import { ProtocolContractAddress, REGISTERER_CONTRACT_CLASS_REGISTERED_TAG } from '@aztec/protocol-contracts'; +import { ProtocolContractAddress } from '@aztec/protocol-contracts'; import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice'; import { NativeWorldStateService } from '@aztec/world-state'; @@ -171,7 +172,7 @@ describe('public_tx_simulator', () => { const mockContractClassForTx = async (tx: Tx, revertible = true) => { const publicContractClass = await makeContractClassPublic(42); const contractClassLogFields = [ - REGISTERER_CONTRACT_CLASS_REGISTERED_TAG, + new Fr(REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE), publicContractClass.id, new Fr(publicContractClass.version), publicContractClass.artifactHash, @@ -181,19 +182,16 @@ describe('public_tx_simulator', () => { Math.ceil(publicContractClass.packedBytecode.length / 32) + 1, ), ]; - const contractClassLogBuffer = Buffer.concat([ - ...contractClassLogFields.map(f => f.toBuffer()), - publicContractClass.packedBytecode, - Buffer.alloc(32 - (publicContractClass.packedBytecode.length % 32)), - ]); - const contractClassLog = new UnencryptedFunctionL2Logs([ - new UnencryptedL2Log(AztecAddress.fromNumber(REGISTERER_CONTRACT_ADDRESS), contractClassLogBuffer), - ]); - tx.contractClassLogs.addFunctionLogs([contractClassLog]); + const contractClassLog = new ContractClassLog( + contractClassLogFields.concat( + new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - contractClassLogFields.length).fill(Fr.ZERO), + ), + ); + tx.contractClassLogs.push(contractClassLog); const contractClassLogHash = ScopedLogHash.fromFields([ - Fr.fromBuffer(contractClassLog.logs[0].hash()), + await contractClassLog.hash(), new Fr(7), - new Fr(contractClassLog.getKernelLength()), + new Fr(contractClassLog.getEmittedLength()), new Fr(REGISTERER_CONTRACT_ADDRESS), ]); if (revertible) { @@ -874,10 +872,10 @@ describe('public_tx_simulator', () => { const contractClass = await worldStateDB.getContractClass(contractClassId); if (kind == 'revertible') { - expect(tx.contractClassLogs.unrollLogs().length).toEqual(0); + expect(tx.contractClassLogs.length).toEqual(0); expect(contractClass).toBeUndefined(); } else { - expect(tx.contractClassLogs.unrollLogs().length).toEqual(1); + expect(tx.contractClassLogs.length).toEqual(1); expect(contractClass).toBeDefined(); } }); diff --git a/yarn-project/simulator/src/public/public_tx_simulator.ts b/yarn-project/simulator/src/public/public_tx_simulator.ts index 371b6db33277..c4721d8f8d19 100644 --- a/yarn-project/simulator/src/public/public_tx_simulator.ts +++ b/yarn-project/simulator/src/public/public_tx_simulator.ts @@ -129,7 +129,7 @@ export class PublicTxSimulator { // FIXME: we shouldn't need to directly modify worldStateDb here! await this.worldStateDB.removeNewContracts(tx, true); // FIXME(dbanks12): should not be changing immutable tx - tx.filterRevertedLogs(tx.data.forPublic!.nonRevertibleAccumulatedData); + await tx.filterRevertedLogs(); } return { diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index 69a6c2e89ecf..4d2f0b3ac8f6 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -13,13 +13,13 @@ import { SimulationError, TxEffect, TxHash, - type UnencryptedL2Log, } from '@aztec/circuit-types'; import { type CircuitWitnessGenerationStats } from '@aztec/circuit-types/stats'; import { AppendOnlyTreeSnapshot, BlockHeader, CallContext, + type ContractClassLog, type ContractInstance, type ContractInstanceWithAddress, Gas, @@ -768,7 +768,7 @@ export class TXE implements TypedOracle { return new Fr(this.blockNumber + 6969); } - emitContractClassLog(_log: UnencryptedL2Log, _counter: number): Fr { + emitContractClassLog(_log: ContractClassLog, _counter: number): Fr { throw new Error('Method not implemented.'); } From 2160e382e0430727cbda051cad02e4f312c5b98e Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Tue, 18 Feb 2025 11:32:40 +0000 Subject: [PATCH 02/21] feat: final changes, fix hash, cleanup --- .../src/main.nr | 3 +- .../crates/rollup-base-private/Prover.toml | 3698 ++++++++- .../crates/rollup-base-public/Prover.toml | 7041 +---------------- .../src/base/private_base_rollup.nr | 2 +- .../rollup-lib/src/base/public_base_rollup.nr | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 17 +- .../structs/private_circuit_public_inputs.ts | 1 - .../src/structs/rollup/base_rollup_hints.ts | 47 +- .../circuits.js/src/tests/factories.ts | 15 +- .../src/conversion/client.ts | 4 - .../src/conversion/server.ts | 35 +- .../orchestrator/block-building-helpers.ts | 9 + .../src/client/client_execution_context.ts | 2 +- .../simulator/src/public/public_processor.ts | 1 - 14 files changed, 3814 insertions(+), 7063 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index 0b5b4eef779d..eee06327f5cb 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -222,7 +222,8 @@ pub contract ContractClassRegisterer { let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = array_concat(log, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); // TODO(MW): use chunked poseidon if cheaper? Use variable poseidon with length of non-0 fields? - let log_hash = std::hash::poseidon2::Poseidon2::hash(log, N); + let log_hash = + std::hash::poseidon2::Poseidon2::hash(log_to_emit, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS); /// Safety: TODO(MW): constraining below length in the base rollup. Is this good/safe? let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; /// Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml index b2a887ee5e57..1112f5141fea 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml @@ -1,57 +1,57 @@ [inputs.tube_data.public_inputs.rollup_validation_requests.max_block_number._opt] -_is_some = false -_value = "0x0000000000000000000000000000000000000000000000000000000000000000" +_is_some = true +_value = "0x0000000000000000000000000000000000000000000000000000000000000e17" [inputs.tube_data.public_inputs.constants] -vk_tree_root = "0x048e6bd7b9c1bee68207fabe01c023a98b343a54ef593e1931cb25ded7fc5bd8" -protocol_contract_tree_root = "0x2a22cd0a794cac972cdb72767be4c8375625d1de577ffdde150b685809f19423" +vk_tree_root = "0x2fc1b47fee588fde394861b5b35b31e48ce08a2743680ee10a0bfc326c84e68f" +protocol_contract_tree_root = "0x2441db7b78376b274378567694caed716258c913a57e2a3c3f5aefc733c3a305" [inputs.tube_data.public_inputs.constants.historical_header] - total_fees = "0x0000000000000000000000000000000000000000000000000031330b0a66bc54" - total_mana_used = "0x000000000000000000000000000000000000000000000000000000000003e6e6" + total_fees = "0x00000000000000000000000000000000000000000000000000000015b099d070" + total_mana_used = "0x0000000000000000000000000000000000000000000000000000000000015991" [inputs.tube_data.public_inputs.constants.historical_header.last_archive] - root = "0x04b19a2b9704f0fdd79af2ab20cc465cba8067b4ace1c2fcf684d9294a443f37" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000005" + root = "0x06e9bf09a8e559c396d6ec21fbca6f63158166ccbdb0ba99a2e329b1ff918a01" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000007" [inputs.tube_data.public_inputs.constants.historical_header.content_commitment] num_txs = "0x0000000000000000000000000000000000000000000000000000000000000001" - blobs_hash = "0x005d3a589a8e94da5a124b547aaea5338761ab52ec8ffb81b5172cd90ac3022f" + blobs_hash = "0x00bcf69bb2b284eafafedf0734a202710ace21934a69ebc2191b3bdc57bb7302" in_hash = "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c" out_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.state.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000050" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000070" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.note_hash_tree] -root = "0x263f05e22af6bb2956b81d6f8de8d384bde3893253c8e04fc73aa3946147eecf" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000180" +root = "0x23ccd4a84b1f3467e2e1a4985b4048bf9a23eb842afa0d1801e33810096755c5" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x1ff29c18e0b396c446900d13fdfa93601c41e32feb210e77930dbe5ef7afa0aa" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" +root = "0x2b7fab0d9e8927bcb7f81824553454e36ce4daafb7bc8e3cca78fe746eec4feb" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.public_data_tree] -root = "0x01cd675b23dcd28b8cb36c75b645ea13691ee485576d6c06a5e21fa30a5601ba" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000096" +root = "0x170a79aadd7b6108a1865ac60053d7b096cfe6bf24e7fa024014ffc1d352e784" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000005" - slot_number = "0x000000000000000000000000000000000000000000000000000000000000000a" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067a0ebc7" + block_number = "0x0000000000000000000000000000000000000000000000000000000000000007" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000013" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b45f3a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.coinbase] - inner = "0x000000000000000000000000a6d65a1ad1795526cb63f95cb3685b634407b98c" + inner = "0x0000000000000000000000008009a7f59868805bab145ef4dd5096e6fe52325e" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000c9be302ae" + fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000101170" [inputs.tube_data.public_inputs.constants.tx_context] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" @@ -67,7 +67,7 @@ l2_gas = "0x00000000000000000000000000000000000000000000000000000000005b8d80" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" -fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000012e9d48405" +fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000000c6f2a" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_priority_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -75,8 +75,8 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 [inputs.tube_data.public_inputs.end] note_hashes = [ - "0x14a8869b4c064cd11dad6a80a437685de5d864aafeba4d93fbcea2e1041b45cd", - "0x2acbc369c9c5848ca056ab178cefe87403ad77461af07f424fb9a76919682fa7", + "0x2a2cbfa3dbc614d60ad5ccd59127a60f536f8d12bd6426e3ed55ddc8f66c0291", + "0x2aa4a0c50316efa3f814b087e8b13091171011abfc5268cc57b5101517aa65aa", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -141,8 +141,8 @@ note_hashes = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x05dabc410b39490a7c4b51782d96d87af26a14149a789edf5f35e0088eeb495b", - "0x304121529a17d54cc0598d2fbf58e89a6fbd887120f93ae04ee8fcc1cdb89979", + "0x26aaffe98b86a1da133b889ada04fcdecff6f42a222c93f507b7f6e8f4f69668", + "0x2849f14086316ffea97a60a615a2078da4cf2b52dd561bee44fb0d18c622f1a4", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -206,7 +206,6 @@ nullifiers = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000" ] -contract_class_log_preimages_length = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.tube_data.public_inputs.end.l2_to_l1_msgs]] [inputs.tube_data.public_inputs.end.l2_to_l1_msgs.message] @@ -298,68 +297,68 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x1e548641f389b2d31200c26dedd8cf9a1ed050276e3c9181b977b49538f616aa", - "0x07b446c3085c62914d5ea3b1f99975b461ccf9fbe87cc2f1f5284167e22cac3b", - "0x000135c8409f04554455943f2b10aea284d4596edbf317268842530eb668fcaa", - "0x000cc01a0295a905c13335a3ffcf995347a6494c7d274c6dc5b673f9eff4b644", - "0x0040126f1c7f1da7a53911ca09f1a409901832940ad0676174d7c8341d359f44", - "0x0082de2ae8d18621f04c90b94c38b9e5a71b10c9c916df2d08b0edac206ec357", - "0x0023ff9055501934010bf3b011af13a337db6f088b3fc6b23109aeb7862e188c", - "0x00b67b53a36c098d68810676090e93a6d3b35e02bd18e0f2c9d7a20426c9c93f", - "0x00cb34d2cbb63952ee84edfb013d5934d52c4d21177c0b6f6934bc1524b563ba", - "0x00978d7734dfe53bbb065fc9139a1ff82ae9389dea9787fc0c3fbba9ef09d0e2", - "0x1478ae610ae29e0f2d6c7b414f9207e2c35ec3da149c73a236ccceb875a4d3dd", - "0x02e81f76884248749717363817a7a2374ac588cff16b1c5967880e37aee18fef", - "0x056dab5865c8637c055a2526aad8bdbb00fef0a188bc522ac78d3ba66d2c6d8d", - "0x212bb4d68ce81e4e518d29bdf03571d1b954e9112fe76d732a3ea37227383f84", - "0x1f533ebcdfc1d7aa3e8744e11f3c2a3c733c4eb9d8468aa6ae5e22241ae76e8e", - "0x2d8d2a5d068604334f9726a1d15b0e104d10634fc6101f5e526494909b45e451", - "0x0dfc34b4b98a1f93b4618007771adc93939930bab52f2b5b4a8b6566fb93c713", - "0x023b60fa9f4019ec0a8409350709d443a99f4a83867ba6f25faff4a7cb3c7b58" + "0x1ee2e7f9be167de3e8fa89733f1a1dfbb3e385bb96054bab0a919ed21b682942", + "0x19b471f1e44eb43964b2aec3f71c6095b47352e10c8cffc04f4f8f181d87410d", + "0x00006aec2664f6fdcf85c8fb4b557227d635859fead662143dfe5a48faef5f77", + "0x0031a75a7de5aeb433fdd382bd7da5237b46ed1369df2407fe426cd46cd56d0b", + "0x0045ad46076c8180c36891be633ab6c7cba42cc43fc66934b680ec34f6e66378", + "0x005a1f015c0cb428bd832e1eaae157c4b2d87efdf2dff84d178baecb493a9442", + "0x00a88333cfe189f0f01215dfab592011a8f2beee869e054718d8a0bfedf54cc2", + "0x00fae6b7f32430fa0852c4d11b030c39e94a665cecf248817835ebcf0fbb6537", + "0x009a3cb4dff2dcb5d2f03e8b0a5f39d476bb2703bfc2717977561a45ddcfec00", + "0x0090b5887250a17b04b2d88d3a04674059089756cb4d93c12ece17592461f16e", + "0x2cfb9a1af795edfd4c6919109d3e8eec75704197d17d5492bcb2b36b147c1713", + "0x08c9c06916da7a5ee5849ddf4c271e96a5df1de1dff90c4529998e0b491167ac", + "0x2597a5ab6637a9bbe147bc18e0f61cdb7d014659f5d4717d6e4c6438f5a7d5b1", + "0x030cc5b9410a02c0976ef7726f02257fa84974d8ec30efb81c02da47706d49cd", + "0x2fb2a6f5530f1db3be5f77a3adc1a36eb70cef16e50a5d78dca3a6d81dcac302", + "0x1287714639a39e278d33ba34ba33956ee632c0b666039175598c758d24fa04ad", + "0x0af61102bd6a91c9c5a74318652b7ad54e0145a8ed19f2b284c44abb9014f120", + "0x29c2173468e37f0fed47c9d3253cb8bb534a75035ce4e988de1a4732b7367702" ] [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x0a5b826a626f3e2541276948c6d1c485ef1fa01d22f78f84a425afdfa1d5de92", - "0x1dd8324ccce2593cb63fced552660417f67f582d56dbf8b1de85920ac1058dd5", - "0x00001f8f82b892c2954d6163d670cfeea6bdbb25727933f79650b88a8409b5ac", - "0x0004e0e9089f9f68cbb1e0b1f6a9e19ec507243da67f1a42842bbf522c9eb86f", - "0x00179066baa01130fd5df1be62e5f85120b140d0ece84f502ac6153816dc8bc2", - "0x00458314a72a963f4a27596b43896e0faafd3b6b587e381b8154f74c366a2265", - "0x00a00e22c11aaca64183051cec857f0d1d30104a6d18ab3ef4f8c3e45ef4aceb", - "0x006f76cfaaf05f8b16d4a99cd28cc271270d5d93ef3d40586667352e659ad000", - "0x001f12acb734244273f8cbab6eb32dc34ebbcd78f8e37e0fcdab88dc563c7542", - "0x00ca247da92080acccf6fcf5aed63132899e345a2f568c5cde50b6ed9ecaa10b", - "0x141613450a3b9d2c69a9a60dbccf59a63642b1e4015852fc2722acb4bace7445", - "0x00d8ef352be4927c13896dc456df37a746875e38f960d5e2b3b6a6e12cf6c01f", - "0x2c95ce135b36812c0c4f162945173f5b80b1c06e075e1c5a79ad6f07e59c91fd", - "0x1c27fd863042bf1e5f484d2834f193ea269278c1856bdeb03d63fe2499ce093a", - "0x14fc3e3b242b4b611ae6c0cd1637a132b0a89de58df7792893fda4a5684744c0", - "0x232e13c42a535ca4042a54c39786bed82bd5631330d2d81143e343a2baf2c775", - "0x1328b6ba78c464f6b9639c6a9e53e7fb80fd054fad2ed328d495d34460eff4f5", - "0x0b8225c45515a05bfba1845bc79e567a2aee28767280aebd2bc076b9d9a6fcd2" + "0x00cbe6b216a855fc451c8bb845dd35ee7e4a00b11540dac362e24bb270c382d4", + "0x0b1ec7f74dd64e793d985347712b7fcac7046f5724618f6ff90ff8a557446f9c", + "0x0000e17a2487451eb3889fe7855cc4a9a69591200ac7d44709d27a882cbbce9f", + "0x005d7fc40b26fe63ca6f5d7b998967e37c99e6fc225c064faf22cd82d81601fc", + "0x006a3f05ded374a4b2bea300168d5881f3db84c37cef3bd8aa41dc459cb57746", + "0x00cc71163e16ec6d4a8cbd03c544d7e4e88635c83d6b8ea3f04fd35e1cbdbb5f", + "0x00a71f92c2c36d2c6dddab39851e0ec918cad6265df6896b616da0f2de849c24", + "0x00a28a7abbcdf29ac0b5b2f7deb8869390eafa51f9b19c670f6ac62985cfa39c", + "0x0065fac6077149b6941a35ea0f5a52599a34fcd5900ba1c1f1b85ec9aeabb597", + "0x003b1c2a6a3c8a86ce37949ed24884cdf3b8af76e1ab1d9d58e3dbb40d8e1548", + "0x154c31c4584d955d2f8ee4c907ea6da686b6c7a1604a84e59f8a28c338f7d9aa", + "0x158d125c6ad17dcd6a8b0a9395545ea5d7ec10bbb78eec38aaf31d7bcb6af2be", + "0x29c4b983f147502581f813102a1ef16017eeab7f1a74b2ddc94236755191f638", + "0x12a04bd44a0286ca6271906ce49f3e562ca0ee396db5aea7d71248745dd7fa65", + "0x02167c3ff74e0eade51fbc9d6e958f75062e34731104ac9e9a271cc77ecd59f0", + "0x1e954d4c3efcf964ff4817cbb7a49c8159689bcfba6a139d5cf7c4885015a811", + "0x03a4c72eaa3a97cd23203101e06b4122c4eaefbbb44289d57d950dc2fad70345", + "0x039d4a9e0325b068fdca413d6e27cf31fe1bb8ba0c51d9bdf7a8405975c1f056" ] [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x0474c9525c558b0f19f9ebd5882aea28c2fc85f6b1015451105b17a77e1c1e28", - "0x092bee72d8cf3915ca92f150e3829ecc757e990c37e79db74dd795995abf745c", - "0x00003f2a4cf5b6234fcf2a0543008165e8d0e17a00de6f084adbb83165d75bb6", - "0x008b7f504f819efed6019b0b6a9f4caef86a3b8e57ff2d27b42bbca95abf0054", - "0x00217aa5f20bb158862b03aba920b324ee89bce52a68941cbbc3965bb428bbfa", - "0x00031c0370f3968279e47a9b89770526d7f8261abbbcd6ed8c9a9a7423214654", - "0x007d5cefd75341a3eaec31fd2f14852cb703d5a7158cec353e085dc65ff50fd1", - "0x00ac0575d48994bb6e262aea070d3db3a89c5e898d6c7912b93172046a57e751", - "0x007303b91fce265de87ec044602726f538687d39cb4241f24b3a40f6d393a583", - "0x0047b0ec041708ccee92314bdef805562d027d797bb94063d09ad4721a852c14", - "0x02d36c1f5d83c87f79b60d1bc0c37f8f85c6c51e1ffbd2a6806859a7c5b5cb17", - "0x04ad5c3ba677c8e9e70bc162ca0028175f31c1e5468c6df5a80eb1de53898323", - "0x2c2967c216ffb7cf64d7217ec6299819ba8b629bcdeedcfc3089d6b8f6d13119", - "0x20d92af9d5903d404e08fa3b0e7d121c08184be8eea1b4c536bfb396d81d6872", - "0x2d0525874b31a7974cde40f08664e78edc0ff9943d816ebe2541a8781b60a7b4", - "0x071fb7717f10fe86a95c551709738494b1aa4afe6424655a18d6df8cb9674614", - "0x252cda6a9018237478a10e1daca79a1248bc6aeb8738ac33846244fe7b1129e5", - "0x07fe97431264dc3d20fc201c971d7b3b6ce87e830ce3155475a199a5e02eb193" + "0x030ebb40198899a67e0b990fec8c919f792da0f76c506a22722ff0f4d80f6c8f", + "0x1954a619cfd1428d2c9b621c6409cc6bbcae06749d0e42e2b8f7af31e9054cc1", + "0x000174f23b06f2bfd815d8504623f8af1691b837de393294091ff4634506f733", + "0x0095b0d7d315e7cbfb4c1509faedfc3211e39ce10fb3bdaf67789e4984cda445", + "0x003454bafb03a90275d53cd2a914d0873f84c24de553d000ca1214238aa6241d", + "0x0018314d6eba8d8398a0cc6c80ffd8c7824888b60e24cc90c58bf03f4e1f43a6", + "0x00438f22f8038ee8625614e025f5c4cea6b43bd0edd4f6b4c7328d7f48623e9a", + "0x009afa3177716eb5bec198455ee3c2931d21dac01e88affcb69bd0be53af1c0b", + "0x00aa6d02a70eba57fd8f019afddaf41dd0f05a37c4e5e00a4256ea48d8982410", + "0x001dbdcd61fe8e390d7c1924fc5d3bd3c97d677838eed54b81b0eb2af169c5f9", + "0x144b7ccdd754478f8258d6736ba33bc132e7fadf20a47b304f9a60d6134ec3cb", + "0x18a34ca7a1286de702844d9a219bf4690f0fd350b89db34332d3a68804102e7d", + "0x0eec626400ec5a95e437ce4e758708947a8a165ef3031c548f1ae320456f452d", + "0x191674f8fa9f43d5973dc103bd3ac68fc34bf3ce26806ac7bfd3ba46269e097c", + "0x06c2ef4580bef61d2335ffc7c17b49e63e38130bf894d076ee2cc8e12ea2c5cf", + "0x25d8a41fb54efb54eeb415b1072bd90957c2ba4f989da088b0589bab346135c9", + "0x0f8c109e22f86d75167ce42367365f63a75c1118c08af52c6e0cf865aa19f33d", + "0x2ea16d54d66544c6e5a5383936d729f3e948137adedce852644a56a5fd06b44f" ] [[inputs.tube_data.public_inputs.end.private_logs]] @@ -1014,7 +1013,7 @@ da_gas = "0x0000000000000000000000000000000000000000000000000000000000007600" l2_gas = "0x0000000000000000000000000000000000000000000000000000000000004a40" [inputs.tube_data.public_inputs.fee_payer] -inner = "0x0739aa78c2b89115fa6a6f888f6afeadbce0e2ec3196b098ab8b1d864da54252" +inner = "0x14d6b44749e0216d02aaf579a2f57b0695fe14ba308f45b16cbf84f2ddbb09d6" [inputs.tube_data.proof] fields = [ @@ -1562,168 +1561,168 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000004" vk_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x2b77e1f090f8ac50bbc9fc28db8ea336688cb784041d63878f82f95be843118d", - "0x2f2772438e0d618a93623471f8f0c11320a737162b66f222e2068c3fb27b88fa", - "0x1ee4b31996273eccf6db40c0a6907056b06b370c9d39c9949911b799ca270169", - "0x126bb13ce4b07681f511f3a23d88cb7cfe082a76730abd5b4be5c4da3b5c51fb", - "0x050dc6390aace9c6e873b762c65e7d6a21e78e64e5ad6cc7c8fd5e69315ab5fe" + "0x220859c1fa9f36c19ef97e736131bd8d611bdff8c9be271bb7dea53fa00a0cf4", + "0x301026a8cf962faa22d530cc270d2c2d3217e8e72a24b3558048fb12e42f8d15", + "0x1ed25a38cd9d04ab5b82e40e8df5203e8601022abfa3f35de954bae2f5ab9434", + "0x24662cacfccfb2d5546980df3e5c862cc9db1fc1478d849683bc7978e2505fbe", + "0x04337049d78eb99c185b426502d49be3eae04d23b7c69e27f8c7ced3efdcdee6" ] [inputs.tube_data.vk_data.vk] key = [ - "0x26bd91b80db5151d459b915ab329b4d11c6eeafe0e97e72386eaed494d751775", - "0x1b8dd927cac755c02d9456bf63e596b59de1a52838ff8bc5763e7c00de011a38", - "0x26df3250508281b9dbb598e2e3cd3f1f476777f6d33a63bc6a4a7175551bcc62", - "0x06f3c11bc68ab447da0a2834ce0981ebb207a315c3d7dfb9e44f817fcc43fa28", - "0x0b65d264e7dccd078748c392eceb533e4b5845a6cb8ef3b976cbc8bfda8c1ac9", - "0x14c0f99b5bdbf994a0f47a91cd5b2681ee99d5be4f514f84ae52b4f3f91f9c19", - "0x2312d0e100e75fd6e710f7d1cb0539e72d4e00ee8ca63b2191d6ef0f40368e1a", - "0x1bc1bd036e24075f60d630d2eb789af63eac2d11468fdb0d9084fb795355f4f5", - "0x24ace110a4355344f76fd44091041100404b7d9dde842084f01498064a919388", - "0x2a8e2178d395174dbd4aa5a9ec5982616094c67d528d017e1e5f162ca132c3dd", - "0x0287c3e9441ac5a8a854e94ffd2b6662b7fac46ae8dc3e967739bdc553a7cc18", - "0x2909625ba37c051482fcb2a6d4b0b881fc0add32a518e9270735141a81879801", - "0x146c771a25ebfc2d3ce817a307725c635045da77ddc0bdca93ebc58b2c575999", - "0x291547f0daa3f8fb20084063c33254ef55d639cce853d950c4e6d72bb5757174", - "0x094c8da4ed92ffb622ae23aefc3af8cd19f923e1154be605b7119bdb5aff46c3", - "0x284bc726e5bc08e3b3fb40aab261900c66175a5cf68a9adaf0a0a8171dfc3ea1", - "0x2512d21f51e6e3802830a9c536c3efd39ce2cd52842d6d58f22e26992a50a5eb", - "0x13c08d379428a2d368747fc901e60e3b43ac60653438ad666f333c763d08920b", - "0x060fc28b4be84ce6eff3bed386e507f8979ab719e77c5ff665a679f52bb3ba2d", - "0x1f80fe039fd28998e2f764e8970a3cccd98d7979f0bcb0c28d0ac0a8c2cf7707", - "0x2df7696fd15bb2042ff9bb29ec8cc58c6590126a683293f7bf515dcf1314cbb3", - "0x09372093410daf79ba5945e518a59d60f775cc91559f737167412419e1e8a82a", - "0x22934541d47ff97063a6a0d69e1d12b8a695a2f163348c8ceed20f7b4401cb4c", - "0x09cb15b2e94258dceea00f9a985fbaeef76b363d3fd04a64a3fb49c0457f0dea", - "0x2a5adbef3a7adcf9612cc8b271d84a8558926b01ae92685db8e3126f9550240b", - "0x293b45bbfc9f1e2663af13f16d17986dd3d0bcf2c93c8cb2e107fb8c94bafb1b", - "0x00763fce24b45259836f8ddfb649e382ef270b91a8dfa2769d78d2fc487f0c8b", - "0x00300372deb5a39be40c9d60268cb20bae5de098e991f55ba3e4a614ddf671eb", - "0x263e3f6b00fa8f60ddf22fbf0d52b13d78e820410eb1af951c01e22ccc244f73", - "0x22fb2b082d541cecae3caa0b9b11dd584a4b20c5c80234a5f665661bbebdbb6a", - "0x1443e617c482645da7d500a89e3fa32b93cbdfcfe7d42fa82f2f04a1e6e6657f", - "0x01eeae7356e7717eb3db51311fc80889d2bb5a175e53f795365bbd1cfe91988b", - "0x21c9c316e002ef671e29db4118c52f359cfb5ea42d61c721eaea7c0f41e4beea", - "0x022369d920581fe330a296bad35997abef23606b57a17b0016c3c93c3ccb3b08", - "0x139aed40053bb41c57426c95dafc6cbfd25e2f43c385907b62d5438db5db32a3", - "0x07571f580597030070341bcca314590d924bfc6929e3ebc63c8babbc7529d15d", - "0x033229c39041873e98c4eb9e8b0cfb7087ed342b880098c0c4140632474a5ba8", - "0x0c7670533834beb760260f94d6a84e3fdebf1923c976146480bea3d4da5cfd2f", - "0x0583748d7c12d509ec41b92b8785f82adad663626a7b39db624c363ec1af6a51", - "0x00c8a2528cdf8505553eac2e7a84ba275f689c0f0e8f1d30310e52860562eccd", - "0x02648fbe372de92acff07992211d4cb3cb888e0a988070db2a27e92060b6620a", - "0x06cd877c062a68f198a5799fb29940f1b2039e4e359325342482d8884aa0f67c", - "0x26c25cba72e271b517ad3c049f08991023fc74f5323fc12480c050e3d0e22bca", - "0x25369fc0a8ec089fc953a9595d84e40028d2bb70659ea6a7114fbf228fb75721", - "0x097316f9f1d51204afb92a26e62eddb6bf5d47fc281b4710dbb4903d7d9db199", - "0x2b7aefbbb7ed80bc5a81400aa5a18a0f35313e2c303d91b470d8b9f411b22fb7", - "0x04418c85aa86c312f089bd2867554237df33ebf40272e9f712aaec92175b3140", - "0x086df016152930ee482bedf8e51a5f6bd1babbd9199e6fa33240b0ccb54a5af1", - "0x1b3f231b19c45208233f89bb7348a34ff97e52bade3c4491477a2c927298fc01", - "0x1ef3d56925dba212212bdcae3fc42fb0282a86af1583fe458bf093faac437655", - "0x1f3f7dca03da8e11c1bfda572977110f9dd7a97ad5cbccbf7826d8e0892fc9b2", - "0x05d64abb087a14394875bcf1b9f36b38f1193a87ee6522755dc47b5527bf43c4", - "0x025d0e12cd2d25694acca0db0b2b6eb9159cd738d6265448c04ad0e7e6ba99ad", - "0x1a274aeb65ab06da14031aa43b3737eddfeb04cd3bd0c47f1a4eab77162d5df6", - "0x1ef48788632ca2df917e33d61bac1d32a90000d692f38888fcd254cca13b0370", - "0x075d8493022d55ff5e6d8ce597e55c1ff941e1a9486e6e82b53c3059dcba07e3", - "0x1131d7db819c97f403f2830605cfee452e1550ac883e5c764bd18e164aa933c3", - "0x05ca28e403fb459fee8bf50f4abd4891482fc318966e6cb4e2f13b3b705d31d4", - "0x02bedb1a6aa45c3d2e45f02a24001696dd4dcfd6f72bdb793cce5df22868726d", - "0x0f8849d7c39967e8443f8a1dc9da3ca693c6b6a9f49eb8d13f6fe0f1612a3565", - "0x1a7703847ca4238f554ec07be9d226d4518746e978bf24ca5f8f07e0a96b369f", - "0x2cb2600f8666649fbf2c4131db49804b97a13a1037fbb270b18285ae3e560a37", - "0x01d11e7ae966e9bbacd0f0768afca8952b4f8c231b3f0b0b407e7913547fa448", - "0x0c39e463df513f6452e9193daf801e5241cffad4648552917dbd8c8a73d8970a", - "0x09d3cf03e4a55f4ed5bb76da7a159f7ba90a2acb22e5eb7a7d4d9ef9da481f06", - "0x281f649f6d07cf7fead741ebd721b074952aaeb874421592b1ab25962c65a120", - "0x0067c824e9d5b3103c0f27447517d98fd2caf420c34d546049590f12a3362a49", - "0x07a3cbb78cae41705b2747cfec6405546218648e9359ccdef78e72f22e121463", - "0x2604a3f36ac6778a015697ca421b47cfa1497fd354da9e1e6bcb7245c6f6ddea", - "0x08572ea80d140660ea5d63710ed602b6b47c171b4115337eb251976fdd671589", - "0x1fdc5c450ac18b51cb36cc6e7a44fe1fdcb7c44014d12362a59b3fe21c6a4dc4", - "0x15c9fa1bf955a77fafb5de26f382d3734f766165b17afa3f13d857612c21f7ec", - "0x24c8ff5791c6fd4960e96a44088734e423f6b58ad62e3207eb849a955345230a", - "0x000efe7396487d95535d01adf9a181a579724ae525ca5a276e07b6c8dee00287", - "0x04175f1658ea2f7cc2325b7a4bf70d4e4b7124799bcd26f9647e723ed8a7518f", - "0x165b81f7b5ed4cde25285cb58aa09a9dbf3af8ada8613d4179eb2ccef6d14549", - "0x0875c761b22a82c51e23979f67d2c4f625cc9ce3f11e832df471662796148a66", - "0x1a43d12531333061c8730eb0b7f018b98c8e2755240ef0971d460ec6acd4b27c", - "0x1cb675c41c3b6def4f2e621e2b74d976bb41829e99c22116e60355effbfa9d6a", - "0x018c54e81acc8ec1d38db4237fd461b5075f2ed949fec6e5b495e71b6a1599d3", - "0x11f9175a3c3ff2365a8bbf0b2246934f4177b6f628c5b2d403da33553ed09dd4", - "0x28e87715956a4934743f0d9a3d64d20218c0082f5be99ef31d129bcd5a793bb7", - "0x101ced94abd7f21da465aea4320b155318471218ec93790ac6a8fdf01764248a", - "0x2fcff60dc8d062eb76173481ab8a2721905eb63fe62741dc6d5d6160d3c9a5d9", - "0x04607684855cedafae48bcc7d445e0bc3fa31daed9d729c74d54467e77657abb", - "0x04b2eb7adcde0e7ce70de8467df97ec3e23a8e186ab74b1421590a931d6c9479", - "0x295bcecb9bf68de1252fceac76d90136a4a7ffc4027da3065fa490832c71955e", - "0x12ae07fc4899474717750712ae3a7887cc90dba054387041d58f75e56e2ed6ec", - "0x13530c27ef877414a10445c514e4ed0ca027d4a85032b651bc8636f8c4196456", - "0x20e73ce80905b8b67e32a43a3584226cf05d58bfe1dd5b069647f0e3dfc4aaa0", - "0x20e10820999383607a59f053564fba4f0b01701b6e6df80139d94224bb8cca62", - "0x2379dbf1653e687867bca6915e63199fb99f7d0421f3c00e5613012f90f2e840", - "0x09f80555f2d7a05f3838726b319cf039ae36fa37ba23fa06fff1c69da83d1379", - "0x1e4afac09400bcdb014d916ffecbef73dd1154da1fabd939f86017ec3560973b", - "0x1f25e67686532e64552b40ca235478d51db140e24c890c45019732b22b1e0c77", - "0x2d396ce3f7b1432357fc476e705a6224bc8171d4d2e14026d6924cb1744f5e7c", - "0x04834069d669e993eb1706720e16fc0ef65cf8f83f822379f7b6acba6c7b5f0a", - "0x1bcfd2208e062ae8fa829f68a1caab5cf4618128e605942bc49803600d0061e4", - "0x0484ee970df58251206b76c2929837397def93e3684484b98bf47bf21c5ce278", - "0x292a36315540cc0e38f2feb31578f348bf7a02398bc34684b124a0841b43dcf5", - "0x2330cac2257790e2fd94e24f2e604c6b78bd7fb14f43ad9c3e37a3a0a5a2182a", - "0x1bff040fa1de695ee30f875d98eab4cfdfc3c11f47e2b7e7cf3ea411f0c5a569", - "0x02175ca7d5c55179f99eb6e917861dcf75eb3fb1fb41c46780b620f72a05f0aa", - "0x27313ea87f60ac0ba38caa015a4c0788cc4cd3743abcf843919338c72433b24c", - "0x2b22fceb46e93c691d3a461ceacf80670ede738a5ca682718ca1048699b6b591", - "0x2d329f682c75f11783a7029fdf7fb7cae1a340769b6a2fd3c0a9b5d8eedef049", - "0x1fa6eecee4412851ee655c64d5b9a8a24ea7aab1e3f42957e17c93abf9285ccc", - "0x0bafc2e9bd9e95a8b854456e42134b0466ba2186dc3b179dc702ee57a21b8fbf", - "0x09655b6c20373f478d0d0a38686b541f92e6a9b0a0a6535c68ab1507a157709e", - "0x19b7a838cf44beecddbe9e1381dcea7209e494b5c00e7ea8d190216310a12c3f", - "0x17da7eac110d6210be1a3cfc10fb57396dda247caa36cb0965d385b0a4c71e29", - "0x26e2b967013c3d4bd776f357ed5a8562d14e36729ed0ed1099824c9db1d0c17b", - "0x2b92537f950f88ab3cb40437eee4a6f57a5b9bfc2399239aadf63f632eb176cb", - "0x04d1136be50c654ab359c77446f8638c5acddb86953ac1e9772b240f1e045d81", - "0x241d48ee512eb573c28d77de8b2d4c0df1bde3259e81178606c9438700e3d21d", - "0x2a7cec0776d0e9292cf68e9706a4f692a0fac5acc52edb71e7a55c9ee780b306", - "0x11f190dcd63126ee76fb9644b110bdf6657c1837e75d904f475493997fdfe1f3", - "0x04781d7e5a587373596013c54ad8b76fa12be66b456621580cd939d82688f5d8", - "0x0111fa67b86fea5ae231939a1e192136a13d799cff186842a697c64d9eb2b52d", - "0x28cb727c86b01509233e982ec5f2d840f89f53162f9bfdd83c4808a29f15bf09", - "0x0d265f5948bd836c0739a15ef0d7ffb91decba209a198e8a81e6eca4b3817576", - "0x184fd3670c857a737f46595b8d5f22190554033160e248969921dbf9755ab97a", - "0x18c0746001ece819aa561c5253383c78deabe6b8e43905ba568a98fbc4b15fbb", - "0x1eb313149dbed86d5d979f554611a68df89c53a4ace8715a889f2c92b353ccdb", - "0x004d6f5aeb386796864aa5d314ab608d4c99a2fe72e18dead127ebf56fc97869", - "0x305724c8040e4155fa3f14c3c3a9fded89e30338734ac6b1ecc5daf3fa9886a4", - "0x0fe70f40b853335ac371c5168321927c053f7f884fb0bcdca6f29c6955bea372", - "0x1d15aba750be26d312f35a36d7ed2658d73c65ac38970bbadba351d2fba545f1", - "0x274451f099016007ebb4fac4dd4929f1c4853bcb450fe140014a3f3e939fedc7", - "0x0036d0e6846cf7a083c9680aeae473446ef6390546057ac91fd0bd7728d19586", - "0x20126f03c9cc5370b68e6a649c6dbb3c863e6965e5690c0134157d36b0a083aa", - "0x1a3090ff3130708a609fb0515708e692e5fb392ec9dcd8d306b1dfdd02816784", - "0x24e5cdbd9ef6a944d7f81c0965a29e6a4a5da4858394fb2cc88b5feb52d0f161", - "0x1792a4a618617047a5927d26fe6a03a64759f53ccc9d9d9ec58ba01ec285f5d2", - "0x2e76ccf67d5e8006e4c1aff6dfc7eda0a71275e42e8ac84f4ef50732cf5d5e3a", - "0x15bba33d94ad939d7c15f9648fa9914ec1be82e717537b7714d51734ad0111ab", - "0x2bf643fd632eb0da929b73e8936bec6988029cd4e19425f7a68c8fe271283c7b", - "0x24bac2991f7c3e9a746b488ab7c4e7e9c549a8c6db4a1ac6d117f47e25767886", - "0x274a2a04dc4dec9559ee38126921c9f75491b2bc34386dbe5a3896dfc3b19e2c" + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x0000000000000000000000000000000000000000000000000000000000000005", + "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000007", + "0x0000000000000000000000000000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000009", + "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000000000000000000000000000b", + "0x000000000000000000000000000000000000000000000000000000000000000c", + "0x000000000000000000000000000000000000000000000000000000000000000d", + "0x000000000000000000000000000000000000000000000000000000000000000e", + "0x000000000000000000000000000000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000000000000000000000000000010", + "0x0000000000000000000000000000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000000000000000000000000000013", + "0x0000000000000000000000000000000000000000000000000000000000000014", + "0x0000000000000000000000000000000000000000000000000000000000000015", + "0x0000000000000000000000000000000000000000000000000000000000000016", + "0x0000000000000000000000000000000000000000000000000000000000000017", + "0x0000000000000000000000000000000000000000000000000000000000000018", + "0x0000000000000000000000000000000000000000000000000000000000000019", + "0x000000000000000000000000000000000000000000000000000000000000001a", + "0x000000000000000000000000000000000000000000000000000000000000001b", + "0x000000000000000000000000000000000000000000000000000000000000001c", + "0x000000000000000000000000000000000000000000000000000000000000001d", + "0x000000000000000000000000000000000000000000000000000000000000001e", + "0x000000000000000000000000000000000000000000000000000000000000001f", + "0x0000000000000000000000000000000000000000000000000000000000000020", + "0x0000000000000000000000000000000000000000000000000000000000000021", + "0x0000000000000000000000000000000000000000000000000000000000000022", + "0x0000000000000000000000000000000000000000000000000000000000000023", + "0x0000000000000000000000000000000000000000000000000000000000000024", + "0x0000000000000000000000000000000000000000000000000000000000000025", + "0x0000000000000000000000000000000000000000000000000000000000000026", + "0x0000000000000000000000000000000000000000000000000000000000000027", + "0x0000000000000000000000000000000000000000000000000000000000000028", + "0x0000000000000000000000000000000000000000000000000000000000000029", + "0x000000000000000000000000000000000000000000000000000000000000002a", + "0x000000000000000000000000000000000000000000000000000000000000002b", + "0x000000000000000000000000000000000000000000000000000000000000002c", + "0x000000000000000000000000000000000000000000000000000000000000002d", + "0x000000000000000000000000000000000000000000000000000000000000002e", + "0x000000000000000000000000000000000000000000000000000000000000002f", + "0x0000000000000000000000000000000000000000000000000000000000000030", + "0x0000000000000000000000000000000000000000000000000000000000000031", + "0x0000000000000000000000000000000000000000000000000000000000000032", + "0x0000000000000000000000000000000000000000000000000000000000000033", + "0x0000000000000000000000000000000000000000000000000000000000000034", + "0x0000000000000000000000000000000000000000000000000000000000000035", + "0x0000000000000000000000000000000000000000000000000000000000000036", + "0x0000000000000000000000000000000000000000000000000000000000000037", + "0x0000000000000000000000000000000000000000000000000000000000000038", + "0x0000000000000000000000000000000000000000000000000000000000000039", + "0x000000000000000000000000000000000000000000000000000000000000003a", + "0x000000000000000000000000000000000000000000000000000000000000003b", + "0x000000000000000000000000000000000000000000000000000000000000003c", + "0x000000000000000000000000000000000000000000000000000000000000003d", + "0x000000000000000000000000000000000000000000000000000000000000003e", + "0x000000000000000000000000000000000000000000000000000000000000003f", + "0x0000000000000000000000000000000000000000000000000000000000000040", + "0x0000000000000000000000000000000000000000000000000000000000000041", + "0x0000000000000000000000000000000000000000000000000000000000000042", + "0x0000000000000000000000000000000000000000000000000000000000000043", + "0x0000000000000000000000000000000000000000000000000000000000000044", + "0x0000000000000000000000000000000000000000000000000000000000000045", + "0x0000000000000000000000000000000000000000000000000000000000000046", + "0x0000000000000000000000000000000000000000000000000000000000000047", + "0x0000000000000000000000000000000000000000000000000000000000000048", + "0x0000000000000000000000000000000000000000000000000000000000000049", + "0x000000000000000000000000000000000000000000000000000000000000004a", + "0x000000000000000000000000000000000000000000000000000000000000004b", + "0x000000000000000000000000000000000000000000000000000000000000004c", + "0x000000000000000000000000000000000000000000000000000000000000004d", + "0x000000000000000000000000000000000000000000000000000000000000004e", + "0x000000000000000000000000000000000000000000000000000000000000004f", + "0x0000000000000000000000000000000000000000000000000000000000000050", + "0x0000000000000000000000000000000000000000000000000000000000000051", + "0x0000000000000000000000000000000000000000000000000000000000000052", + "0x0000000000000000000000000000000000000000000000000000000000000053", + "0x0000000000000000000000000000000000000000000000000000000000000054", + "0x0000000000000000000000000000000000000000000000000000000000000055", + "0x0000000000000000000000000000000000000000000000000000000000000056", + "0x0000000000000000000000000000000000000000000000000000000000000057", + "0x0000000000000000000000000000000000000000000000000000000000000058", + "0x0000000000000000000000000000000000000000000000000000000000000059", + "0x000000000000000000000000000000000000000000000000000000000000005a", + "0x000000000000000000000000000000000000000000000000000000000000005b", + "0x000000000000000000000000000000000000000000000000000000000000005c", + "0x000000000000000000000000000000000000000000000000000000000000005d", + "0x000000000000000000000000000000000000000000000000000000000000005e", + "0x000000000000000000000000000000000000000000000000000000000000005f", + "0x0000000000000000000000000000000000000000000000000000000000000060", + "0x0000000000000000000000000000000000000000000000000000000000000061", + "0x0000000000000000000000000000000000000000000000000000000000000062", + "0x0000000000000000000000000000000000000000000000000000000000000063", + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x0000000000000000000000000000000000000000000000000000000000000065", + "0x0000000000000000000000000000000000000000000000000000000000000066", + "0x0000000000000000000000000000000000000000000000000000000000000067", + "0x0000000000000000000000000000000000000000000000000000000000000068", + "0x0000000000000000000000000000000000000000000000000000000000000069", + "0x000000000000000000000000000000000000000000000000000000000000006a", + "0x000000000000000000000000000000000000000000000000000000000000006b", + "0x000000000000000000000000000000000000000000000000000000000000006c", + "0x000000000000000000000000000000000000000000000000000000000000006d", + "0x000000000000000000000000000000000000000000000000000000000000006e", + "0x000000000000000000000000000000000000000000000000000000000000006f", + "0x0000000000000000000000000000000000000000000000000000000000000070", + "0x0000000000000000000000000000000000000000000000000000000000000071", + "0x0000000000000000000000000000000000000000000000000000000000000072", + "0x0000000000000000000000000000000000000000000000000000000000000073", + "0x0000000000000000000000000000000000000000000000000000000000000074", + "0x0000000000000000000000000000000000000000000000000000000000000075", + "0x0000000000000000000000000000000000000000000000000000000000000076", + "0x0000000000000000000000000000000000000000000000000000000000000077", + "0x0000000000000000000000000000000000000000000000000000000000000078", + "0x0000000000000000000000000000000000000000000000000000000000000079", + "0x000000000000000000000000000000000000000000000000000000000000007a", + "0x000000000000000000000000000000000000000000000000000000000000007b", + "0x000000000000000000000000000000000000000000000000000000000000007c", + "0x000000000000000000000000000000000000000000000000000000000000007d", + "0x000000000000000000000000000000000000000000000000000000000000007e", + "0x000000000000000000000000000000000000000000000000000000000000007f", + "0x0000000000000000000000000000000000000000000000000000000000000080", + "0x0000000000000000000000000000000000000000000000000000000000000081", + "0x0000000000000000000000000000000000000000000000000000000000000082", + "0x0000000000000000000000000000000000000000000000000000000000000083", + "0x0000000000000000000000000000000000000000000000000000000000000084", + "0x0000000000000000000000000000000000000000000000000000000000000085", + "0x0000000000000000000000000000000000000000000000000000000000000086", + "0x0000000000000000000000000000000000000000000000000000000000000087", + "0x0000000000000000000000000000000000000000000000000000000000000088", + "0x0000000000000000000000000000000000000000000000000000000000000089", + "0x000000000000000000000000000000000000000000000000000000000000008a", + "0x000000000000000000000000000000000000000000000000000000000000008b" ] - hash = "0x26a156d7dff9738d14d18bbdd97ddde7ca8e5e330ef0e6338eef607842f175fe" + hash = "0x0000000000000000000000000000000000000000000000000000000000000002" [inputs.start.note_hash_tree] -root = "0x263f05e22af6bb2956b81d6f8de8d384bde3893253c8e04fc73aa3946147eecf" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000180" +root = "0x23ccd4a84b1f3467e2e1a4985b4048bf9a23eb842afa0d1801e33810096755c5" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.start.nullifier_tree] -root = "0x1ff29c18e0b396c446900d13fdfa93601c41e32feb210e77930dbe5ef7afa0aa" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" +root = "0x2b7fab0d9e8927bcb7f81824553454e36ce4daafb7bc8e3cca78fe746eec4feb" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.start.public_data_tree] -root = "0x01cd675b23dcd28b8cb36c75b645ea13691ee485576d6c06a5e21fa30a5601ba" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000096" +root = "0x170a79aadd7b6108a1865ac60053d7b096cfe6bf24e7fa024014ffc1d352e784" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.start_sponge_blob] fields = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -1746,8 +1745,8 @@ expected_fields = "0x00000000000000000000000000000000000000000000000000000000000 [inputs.state_diff_hints] sorted_nullifiers = [ - "0x304121529a17d54cc0598d2fbf58e89a6fbd887120f93ae04ee8fcc1cdb89979", - "0x05dabc410b39490a7c4b51782d96d87af26a14149a789edf5f35e0088eeb495b", + "0x2849f14086316ffea97a60a615a2078da4cf2b52dd561bee44fb0d18c622f1a4", + "0x26aaffe98b86a1da133b889ada04fcdecff6f42a222c93f507b7f6e8f4f69668", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1879,9 +1878,9 @@ sorted_nullifier_indexes = [ ] note_hash_subtree_sibling_path = [ "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x287b1c7a4ac00b80184a37f0f3cdf81f43901940c7d8742c83f2ef5df6f0846e", - "0x1efa4a253d3f711f89cb32936d7e581269e3b912d92119cd1c818193b0414695", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", + "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", + "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", + "0x246dbf1a7578c0431edd6ad5815668e6dc1bcc19251832e47f43bfe072dd1dc9", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -1915,9 +1914,9 @@ note_hash_subtree_sibling_path = [ ] nullifier_subtree_sibling_path = [ "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", + "0x19c31078929326e529b17eb08c4176f63746041cf94ff8cbc9fa6e74a6c343fd", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x1357e79b986c6b7d239f16476b28a8d8457a6503708f3a22c9647972ffad7253", + "0x08f7ef0f79bc9bf1592eda1a665aa46050e01509e656a0cf0ed98e8ce0c28f6f", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -1993,14 +1992,14 @@ fee_write_sibling_path = [ ] [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x2ddc0778fbcb0b9571ab08ed97b809ddf2dc0be76a62824e1afd67333fe4f1f7" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" + nullifier = "0x220b77d46cf96bf6f593c9f370b6464ce2c241d71f4c6dce4f7d3bb85a4f2dac" + next_nullifier = "0x2b1e43323516b12b3242f5fb21dae7fcfc0e1d4043368753d3d9b5a03d00c41e" + next_index = "0x00000000000000000000000000000000000000000000000000000000000000c1" [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0492da62a8519570468c66894b510cb38fc1661d4a9b19aff87e81cff59b5d0c" - next_nullifier = "0x0c7c4e35ae49e662bdf65e4f71f199343770862903506f1f35639239c12aeb64" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000143" + nullifier = "0x220b77d46cf96bf6f593c9f370b6464ce2c241d71f4c6dce4f7d3bb85a4f2dac" + next_nullifier = "0x2849f14086316ffea97a60a615a2078da4cf2b52dd561bee44fb0d18c622f1a4" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000281" [[inputs.state_diff_hints.nullifier_predecessor_preimages]] nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -2313,18 +2312,18 @@ fee_write_sibling_path = [ next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "192" + leaf_index = "257" sibling_path = [ - "0x01aa8894671815b1a1c99ab5aa65d66e42addf285aabf8740438e0f1b9c13d7a", - "0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1", + "0x2472acbe5340e93c92009df1b835ca0c755502d3aebec7f36c56949da9b54001", + "0x0dbd6fdaa9c314740bfa943811df5e737718a91c5a173cb3d57f993b837c5844", "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x0505eb1f61f7e17f47fd84c0cfbf485f601e13ae949d56fd0c19fc601cbc3fe9", - "0x0e13f607038d73e229de7a58d6cdf07443ec33bc19f867fd6f64f262979eee90", - "0x0bfc6d0cda4f1282036ba421c80d872a2c21fd338cc1cf7c0237d1e9edd3d9c7", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", + "0x2e9a018240c3a4bcd32edac1cdff8486ad0df0815d0aa3cb0bedd592fb038988", + "0x01dc543e7ae44fa39b6f0303967bcfa4aa2558a1f472d5faafd45575e49618ae", + "0x2cce59f30b6ffdc5d76249588f1635254c446dea7c404e401ec94e755815cb39", + "0x260adc84edb7f4b6b19313e51f88e98553694e68e406ccab0846c52ae43fc385", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -2358,18 +2357,18 @@ fee_write_sibling_path = [ ] [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "256" + leaf_index = "257" sibling_path = [ - "0x24a33b963ca23018aa7af8154e6b96933981f79fcfa16f46c58fd258c7bb83d7", - "0x1fed9a23872b418e24e9b357feda17940c31fed3fdfa5ef8f56fefdc3b241343", + "0x2472acbe5340e93c92009df1b835ca0c755502d3aebec7f36c56949da9b54001", + "0x0dbd6fdaa9c314740bfa943811df5e737718a91c5a173cb3d57f993b837c5844", "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x0378cd071afd07958b152d6ea60a3b6dcb2299821b34e847adea5a8df77ec9c2", - "0x2c9fead6b6c8be7e719e69d0212c46639a3a8154b5489317098c6efc7777d37d", - "0x072ebe02c060be186d9278856e0aee5904c7705fa7d0d8c8db41233dc57d700f", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", + "0x2e9a018240c3a4bcd32edac1cdff8486ad0df0815d0aa3cb0bedd592fb038988", + "0x01dc543e7ae44fa39b6f0303967bcfa4aa2558a1f472d5faafd45575e49618ae", + "0x2cce59f30b6ffdc5d76249588f1635254c446dea7c404e401ec94e755815cb39", + "0x260adc84edb7f4b6b19313e51f88e98553694e68e406ccab0846c52ae43fc385", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -5193,22 +5192,22 @@ fee_write_sibling_path = [ ] [inputs.state_diff_hints.fee_write_low_leaf_preimage] - slot = "0x26599f328e161f0a207b32c35117416f0c5b3717a718c1901affc89da47d46a2" - value = "0x00000000000000000000000000000000000000000000021e18aecccebf9f206c" - next_slot = "0x277658932a5ec6c236eb07131b793e2acfd4d6c1170536bcfcbdfcb5eb1a8ae6" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000087" + slot = "0x11c1ccbc812c10e399aa560b861a50343db8ec4e6d880f273366d3304f3bff36" + value = "0x00000000000000000000000000000000000000000000021e19e0c2205e5c76a4" + next_slot = "0x139e67f3d21015c92ac134509b978af7eff93cc401daf949a829a272b2d31000" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000093" [inputs.state_diff_hints.fee_write_low_leaf_membership_witness] - leaf_index = "127" + leaf_index = "122" sibling_path = [ - "0x0da3a1ac63a0ffed9060613c4f7449a69bebea90c517a88041bf136f4aa075bd", - "0x1c4f90e9eb942ca6a4696a7efd3aa45f3a4fc9e8576d18c95dff999d12bd5fba", - "0x0fe501ab7faba8fe726351d18bb39013221ff7cc0d34e7e8636b2963559e5400", - "0x088ac1334458ef29ce3d969205db12bf3326a80d38a1ee89e86a371bc17c8a6b", + "0x2365efbc25c5defb08aae61a0dc66ad3e0b85cf2e36ca2568fe3e582c6827bbc", + "0x1fd13a46cb53b64043e1c9419454e29229120eb88b2f65f5f630e1ac92d26c1a", + "0x20f17e5a61bac437b665076bb3633afd7af3d94665ebe9579d7c19abb8a3bf31", + "0x223ba2ab9242824ab1f382fe0ff96f754eddc61abd82a6ef9b78f14cdb9e690c", "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", - "0x1e9e35608b017f9568274ce7d302fc59e85bb588c44b59855bae0b6596364ac6", + "0x056a9d7dd1e0900e9ed2eba7cf538aa4e70677114fea5dbe4f3df6a3922abf9b", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5243,17 +5242,21 @@ fee_write_sibling_path = [ "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" ] -[inputs.archive_root_membership_witness] -leaf_index = "5" -sibling_path = [ - "0x254c2380da37e6bc8bc76d3f564a9c369fdfd9317059e419065608da81ca14e2", - "0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1", - "0x0b61237fe1f54ebe56c699858d9e52e1396fe978122732ac0743b10be8dbf89b", - "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", - "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", - "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", +[inputs.fee_payer_fee_juice_balance_read_hint] +leaf_slot = "0x11c1ccbc812c10e399aa560b861a50343db8ec4e6d880f273366d3304f3bff36" +value = "0x00000000000000000000000000000000000000000000021e19e0c2205e5c76a4" + + [inputs.fee_payer_fee_juice_balance_read_hint.membership_witness] + leaf_index = "122" + sibling_path = [ + "0x2365efbc25c5defb08aae61a0dc66ad3e0b85cf2e36ca2568fe3e582c6827bbc", + "0x1fd13a46cb53b64043e1c9419454e29229120eb88b2f65f5f630e1ac92d26c1a", + "0x20f17e5a61bac437b665076bb3633afd7af3d94665ebe9579d7c19abb8a3bf31", + "0x223ba2ab9242824ab1f382fe0ff96f754eddc61abd82a6ef9b78f14cdb9e690c", + "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", + "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", + "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", + "0x056a9d7dd1e0900e9ed2eba7cf538aa4e70677114fea5dbe4f3df6a3922abf9b", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5274,49 +5277,37 @@ sibling_path = [ "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f" + "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", + "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", + "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", + "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", + "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", + "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", + "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", + "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", + "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", + "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", + "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", + "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" ] -[inputs.constants] -vk_tree_root = "0x048e6bd7b9c1bee68207fabe01c023a98b343a54ef593e1931cb25ded7fc5bd8" -protocol_contract_tree_root = "0x2a22cd0a794cac972cdb72767be4c8375625d1de577ffdde150b685809f19423" - - [inputs.constants.last_archive] - root = "0x1736d03c667400d1681bba55a6f8da405d5bdbb1f2a2f170bd780d1d46cb73e8" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000006" - - [inputs.constants.global_variables] - chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000006" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000013" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067a0ec9f" - - [inputs.constants.global_variables.coinbase] - inner = "0x000000000000000000000000a6d65a1ad1795526cb63f95cb3685b634407b98c" - - [inputs.constants.global_variables.fee_recipient] - inner = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [inputs.constants.global_variables.gas_fees] - fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000c9be302ae" - -[inputs.fee_payer_fee_juice_balance_read_hint] -leaf_slot = "0x26599f328e161f0a207b32c35117416f0c5b3717a718c1901affc89da47d46a2" -value = "0x00000000000000000000000000000000000000000000021e18aecccebf9f206c" + [inputs.fee_payer_fee_juice_balance_read_hint.leaf_preimage] + slot = "0x11c1ccbc812c10e399aa560b861a50343db8ec4e6d880f273366d3304f3bff36" + value = "0x00000000000000000000000000000000000000000000021e19e0c2205e5c76a4" + next_slot = "0x139e67f3d21015c92ac134509b978af7eff93cc401daf949a829a272b2d31000" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000093" - [inputs.fee_payer_fee_juice_balance_read_hint.membership_witness] - leaf_index = "127" - sibling_path = [ - "0x0da3a1ac63a0ffed9060613c4f7449a69bebea90c517a88041bf136f4aa075bd", - "0x1c4f90e9eb942ca6a4696a7efd3aa45f3a4fc9e8576d18c95dff999d12bd5fba", - "0x0fe501ab7faba8fe726351d18bb39013221ff7cc0d34e7e8636b2963559e5400", - "0x088ac1334458ef29ce3d969205db12bf3326a80d38a1ee89e86a371bc17c8a6b", - "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", - "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", - "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", - "0x1e9e35608b017f9568274ce7d302fc59e85bb588c44b59855bae0b6596364ac6", +[inputs.archive_root_membership_witness] +leaf_index = "7" +sibling_path = [ + "0x096c94ed0d8af44115ef6df4a976dbd3b59076d9dcc8e008cb088773cb9699fc", + "0x0990cb45b8cef914f72171a72a0e2f2069e890d3551177b4ec5dfec234b8f7e3", + "0x06c9c9248c60420908ed38bc935ab6ca296e5eb17631d967e9a46e874eeed998", + "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", + "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", + "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", + "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", + "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5337,22 +5328,3053 @@ value = "0x00000000000000000000000000000000000000000000021e18aecccebf9f206c" "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" + "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f" ] - [inputs.fee_payer_fee_juice_balance_read_hint.leaf_preimage] - slot = "0x26599f328e161f0a207b32c35117416f0c5b3717a718c1901affc89da47d46a2" - value = "0x00000000000000000000000000000000000000000000021e18aecccebf9f206c" - next_slot = "0x277658932a5ec6c236eb07131b793e2acfd4d6c1170536bcfcbdfcb5eb1a8ae6" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000087" +[[inputs.contract_class_logs_preimages]] +fields = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" +] + +[inputs.constants] +vk_tree_root = "0x2fc1b47fee588fde394861b5b35b31e48ce08a2743680ee10a0bfc326c84e68f" +protocol_contract_tree_root = "0x2441db7b78376b274378567694caed716258c913a57e2a3c3f5aefc733c3a305" + + [inputs.constants.last_archive] + root = "0x1bc506785dce2d8c957496651a1821e9eac490152e79765ba57cd1441f2dd835" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" + + [inputs.constants.global_variables] + chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" + version = "0x0000000000000000000000000000000000000000000000000000000000000001" + block_number = "0x0000000000000000000000000000000000000000000000000000000000000008" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000022" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b460a2" + + [inputs.constants.global_variables.coinbase] + inner = "0x0000000000000000000000008009a7f59868805bab145ef4dd5096e6fe52325e" + + [inputs.constants.global_variables.fee_recipient] + inner = "0x0000000000000000000000000000000000000000000000000000000000000000" + + [inputs.constants.global_variables.gas_fees] + fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" + fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000084a1c" diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml index fbf2afa565b5..0f720d15cd8a 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml @@ -1,53 +1,53 @@ [inputs.tube_data.public_inputs.constants] -vk_tree_root = "0x048e6bd7b9c1bee68207fabe01c023a98b343a54ef593e1931cb25ded7fc5bd8" -protocol_contract_tree_root = "0x2a22cd0a794cac972cdb72767be4c8375625d1de577ffdde150b685809f19423" +vk_tree_root = "0x2fc1b47fee588fde394861b5b35b31e48ce08a2743680ee10a0bfc326c84e68f" +protocol_contract_tree_root = "0x2441db7b78376b274378567694caed716258c913a57e2a3c3f5aefc733c3a305" [inputs.tube_data.public_inputs.constants.historical_header] - total_fees = "0x0000000000000000000000000000000000000000000000000031330b0a66bc54" - total_mana_used = "0x000000000000000000000000000000000000000000000000000000000003e6e6" + total_fees = "0x00000000000000000000000000000000000000000000000000000015b099d070" + total_mana_used = "0x0000000000000000000000000000000000000000000000000000000000015991" [inputs.tube_data.public_inputs.constants.historical_header.last_archive] - root = "0x04b19a2b9704f0fdd79af2ab20cc465cba8067b4ace1c2fcf684d9294a443f37" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000005" + root = "0x06e9bf09a8e559c396d6ec21fbca6f63158166ccbdb0ba99a2e329b1ff918a01" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000007" [inputs.tube_data.public_inputs.constants.historical_header.content_commitment] num_txs = "0x0000000000000000000000000000000000000000000000000000000000000001" - blobs_hash = "0x005d3a589a8e94da5a124b547aaea5338761ab52ec8ffb81b5172cd90ac3022f" + blobs_hash = "0x00bcf69bb2b284eafafedf0734a202710ace21934a69ebc2191b3bdc57bb7302" in_hash = "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c" out_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.state.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000050" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000070" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.note_hash_tree] -root = "0x263f05e22af6bb2956b81d6f8de8d384bde3893253c8e04fc73aa3946147eecf" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000180" +root = "0x23ccd4a84b1f3467e2e1a4985b4048bf9a23eb842afa0d1801e33810096755c5" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x1ff29c18e0b396c446900d13fdfa93601c41e32feb210e77930dbe5ef7afa0aa" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" +root = "0x2b7fab0d9e8927bcb7f81824553454e36ce4daafb7bc8e3cca78fe746eec4feb" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.public_data_tree] -root = "0x01cd675b23dcd28b8cb36c75b645ea13691ee485576d6c06a5e21fa30a5601ba" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000096" +root = "0x170a79aadd7b6108a1865ac60053d7b096cfe6bf24e7fa024014ffc1d352e784" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000005" - slot_number = "0x000000000000000000000000000000000000000000000000000000000000000a" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067a0ebc7" + block_number = "0x0000000000000000000000000000000000000000000000000000000000000007" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000013" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b45f3a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.coinbase] - inner = "0x000000000000000000000000a6d65a1ad1795526cb63f95cb3685b634407b98c" + inner = "0x0000000000000000000000008009a7f59868805bab145ef4dd5096e6fe52325e" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000c9be302ae" + fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000101170" [inputs.tube_data.public_inputs.constants.tx_context] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" @@ -63,15 +63,15 @@ l2_gas = "0x00000000000000000000000000000000000000000000000000000000005b8d80" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" -fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000012e9d48405" +fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000000c6f2a" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_priority_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.rollup_validation_requests.max_block_number._opt] -_is_some = false -_value = "0x0000000000000000000000000000000000000000000000000000000000000000" +_is_some = true +_value = "0x0000000000000000000000000000000000000000000000000000000000000e17" [inputs.tube_data.public_inputs.non_revertible_accumulated_data] note_hashes = [ @@ -141,7 +141,7 @@ note_hashes = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x2cb4c12c94db55803224748d4995ab0b9d0401b167e925408eb57b71f3c5435a", + "0x21ad6dd98958cddf707f768bab37ddce8c93db4250d96e74642ffeaca29fb4c8", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2361,13 +2361,13 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests]] is_static_call = false - args_hash = "0x29448498899e3eaaa4ff071ee2950f9f5b6ebb42af4ee323edfa1362e05c4966" + args_hash = "0x2fcaef9c0cbb476d68ebe86fb5b6bc3d4fd5dbadb1714e96499845813862672d" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.msg_sender] - inner = "0x0739aa78c2b89115fa6a6f888f6afeadbce0e2ec3196b098ab8b1d864da54252" + inner = "0x14d6b44749e0216d02aaf579a2f57b0695fe14ba308f45b16cbf84f2ddbb09d6" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.contract_address] - inner = "0x2269225dd372f7e0b33082b098987be85ea7236a03df03ef19dbd92926ff848c" + inner = "0x1e4896ec29452e630feab5f15a2e67ef04b0cb7ba709a79631ea5df7b6931eea" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.function_selector] inner = "0x00000000000000000000000000000000000000000000000000000000d5441b0d" @@ -2793,7 +2793,7 @@ da_gas = "0x0000000000000000000000000000000000000000000000000000000000000400" l2_gas = "0x0000000000000000000000000000000000000000000000000000000000006500" [inputs.tube_data.public_inputs.fee_payer] -inner = "0x0739aa78c2b89115fa6a6f888f6afeadbce0e2ec3196b098ab8b1d864da54252" +inner = "0x14d6b44749e0216d02aaf579a2f57b0695fe14ba308f45b16cbf84f2ddbb09d6" [inputs.tube_data.proof] fields = [ @@ -3341,193 +3341,193 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000004" vk_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x2b77e1f090f8ac50bbc9fc28db8ea336688cb784041d63878f82f95be843118d", - "0x2f2772438e0d618a93623471f8f0c11320a737162b66f222e2068c3fb27b88fa", - "0x1ee4b31996273eccf6db40c0a6907056b06b370c9d39c9949911b799ca270169", - "0x126bb13ce4b07681f511f3a23d88cb7cfe082a76730abd5b4be5c4da3b5c51fb", - "0x050dc6390aace9c6e873b762c65e7d6a21e78e64e5ad6cc7c8fd5e69315ab5fe" + "0x220859c1fa9f36c19ef97e736131bd8d611bdff8c9be271bb7dea53fa00a0cf4", + "0x301026a8cf962faa22d530cc270d2c2d3217e8e72a24b3558048fb12e42f8d15", + "0x1ed25a38cd9d04ab5b82e40e8df5203e8601022abfa3f35de954bae2f5ab9434", + "0x24662cacfccfb2d5546980df3e5c862cc9db1fc1478d849683bc7978e2505fbe", + "0x04337049d78eb99c185b426502d49be3eae04d23b7c69e27f8c7ced3efdcdee6" ] [inputs.tube_data.vk_data.vk] key = [ - "0x26bd91b80db5151d459b915ab329b4d11c6eeafe0e97e72386eaed494d751775", - "0x1b8dd927cac755c02d9456bf63e596b59de1a52838ff8bc5763e7c00de011a38", - "0x26df3250508281b9dbb598e2e3cd3f1f476777f6d33a63bc6a4a7175551bcc62", - "0x06f3c11bc68ab447da0a2834ce0981ebb207a315c3d7dfb9e44f817fcc43fa28", - "0x0b65d264e7dccd078748c392eceb533e4b5845a6cb8ef3b976cbc8bfda8c1ac9", - "0x14c0f99b5bdbf994a0f47a91cd5b2681ee99d5be4f514f84ae52b4f3f91f9c19", - "0x2312d0e100e75fd6e710f7d1cb0539e72d4e00ee8ca63b2191d6ef0f40368e1a", - "0x1bc1bd036e24075f60d630d2eb789af63eac2d11468fdb0d9084fb795355f4f5", - "0x24ace110a4355344f76fd44091041100404b7d9dde842084f01498064a919388", - "0x2a8e2178d395174dbd4aa5a9ec5982616094c67d528d017e1e5f162ca132c3dd", - "0x0287c3e9441ac5a8a854e94ffd2b6662b7fac46ae8dc3e967739bdc553a7cc18", - "0x2909625ba37c051482fcb2a6d4b0b881fc0add32a518e9270735141a81879801", - "0x146c771a25ebfc2d3ce817a307725c635045da77ddc0bdca93ebc58b2c575999", - "0x291547f0daa3f8fb20084063c33254ef55d639cce853d950c4e6d72bb5757174", - "0x094c8da4ed92ffb622ae23aefc3af8cd19f923e1154be605b7119bdb5aff46c3", - "0x284bc726e5bc08e3b3fb40aab261900c66175a5cf68a9adaf0a0a8171dfc3ea1", - "0x2512d21f51e6e3802830a9c536c3efd39ce2cd52842d6d58f22e26992a50a5eb", - "0x13c08d379428a2d368747fc901e60e3b43ac60653438ad666f333c763d08920b", - "0x060fc28b4be84ce6eff3bed386e507f8979ab719e77c5ff665a679f52bb3ba2d", - "0x1f80fe039fd28998e2f764e8970a3cccd98d7979f0bcb0c28d0ac0a8c2cf7707", - "0x2df7696fd15bb2042ff9bb29ec8cc58c6590126a683293f7bf515dcf1314cbb3", - "0x09372093410daf79ba5945e518a59d60f775cc91559f737167412419e1e8a82a", - "0x22934541d47ff97063a6a0d69e1d12b8a695a2f163348c8ceed20f7b4401cb4c", - "0x09cb15b2e94258dceea00f9a985fbaeef76b363d3fd04a64a3fb49c0457f0dea", - "0x2a5adbef3a7adcf9612cc8b271d84a8558926b01ae92685db8e3126f9550240b", - "0x293b45bbfc9f1e2663af13f16d17986dd3d0bcf2c93c8cb2e107fb8c94bafb1b", - "0x00763fce24b45259836f8ddfb649e382ef270b91a8dfa2769d78d2fc487f0c8b", - "0x00300372deb5a39be40c9d60268cb20bae5de098e991f55ba3e4a614ddf671eb", - "0x263e3f6b00fa8f60ddf22fbf0d52b13d78e820410eb1af951c01e22ccc244f73", - "0x22fb2b082d541cecae3caa0b9b11dd584a4b20c5c80234a5f665661bbebdbb6a", - "0x1443e617c482645da7d500a89e3fa32b93cbdfcfe7d42fa82f2f04a1e6e6657f", - "0x01eeae7356e7717eb3db51311fc80889d2bb5a175e53f795365bbd1cfe91988b", - "0x21c9c316e002ef671e29db4118c52f359cfb5ea42d61c721eaea7c0f41e4beea", - "0x022369d920581fe330a296bad35997abef23606b57a17b0016c3c93c3ccb3b08", - "0x139aed40053bb41c57426c95dafc6cbfd25e2f43c385907b62d5438db5db32a3", - "0x07571f580597030070341bcca314590d924bfc6929e3ebc63c8babbc7529d15d", - "0x033229c39041873e98c4eb9e8b0cfb7087ed342b880098c0c4140632474a5ba8", - "0x0c7670533834beb760260f94d6a84e3fdebf1923c976146480bea3d4da5cfd2f", - "0x0583748d7c12d509ec41b92b8785f82adad663626a7b39db624c363ec1af6a51", - "0x00c8a2528cdf8505553eac2e7a84ba275f689c0f0e8f1d30310e52860562eccd", - "0x02648fbe372de92acff07992211d4cb3cb888e0a988070db2a27e92060b6620a", - "0x06cd877c062a68f198a5799fb29940f1b2039e4e359325342482d8884aa0f67c", - "0x26c25cba72e271b517ad3c049f08991023fc74f5323fc12480c050e3d0e22bca", - "0x25369fc0a8ec089fc953a9595d84e40028d2bb70659ea6a7114fbf228fb75721", - "0x097316f9f1d51204afb92a26e62eddb6bf5d47fc281b4710dbb4903d7d9db199", - "0x2b7aefbbb7ed80bc5a81400aa5a18a0f35313e2c303d91b470d8b9f411b22fb7", - "0x04418c85aa86c312f089bd2867554237df33ebf40272e9f712aaec92175b3140", - "0x086df016152930ee482bedf8e51a5f6bd1babbd9199e6fa33240b0ccb54a5af1", - "0x1b3f231b19c45208233f89bb7348a34ff97e52bade3c4491477a2c927298fc01", - "0x1ef3d56925dba212212bdcae3fc42fb0282a86af1583fe458bf093faac437655", - "0x1f3f7dca03da8e11c1bfda572977110f9dd7a97ad5cbccbf7826d8e0892fc9b2", - "0x05d64abb087a14394875bcf1b9f36b38f1193a87ee6522755dc47b5527bf43c4", - "0x025d0e12cd2d25694acca0db0b2b6eb9159cd738d6265448c04ad0e7e6ba99ad", - "0x1a274aeb65ab06da14031aa43b3737eddfeb04cd3bd0c47f1a4eab77162d5df6", - "0x1ef48788632ca2df917e33d61bac1d32a90000d692f38888fcd254cca13b0370", - "0x075d8493022d55ff5e6d8ce597e55c1ff941e1a9486e6e82b53c3059dcba07e3", - "0x1131d7db819c97f403f2830605cfee452e1550ac883e5c764bd18e164aa933c3", - "0x05ca28e403fb459fee8bf50f4abd4891482fc318966e6cb4e2f13b3b705d31d4", - "0x02bedb1a6aa45c3d2e45f02a24001696dd4dcfd6f72bdb793cce5df22868726d", - "0x0f8849d7c39967e8443f8a1dc9da3ca693c6b6a9f49eb8d13f6fe0f1612a3565", - "0x1a7703847ca4238f554ec07be9d226d4518746e978bf24ca5f8f07e0a96b369f", - "0x2cb2600f8666649fbf2c4131db49804b97a13a1037fbb270b18285ae3e560a37", - "0x01d11e7ae966e9bbacd0f0768afca8952b4f8c231b3f0b0b407e7913547fa448", - "0x0c39e463df513f6452e9193daf801e5241cffad4648552917dbd8c8a73d8970a", - "0x09d3cf03e4a55f4ed5bb76da7a159f7ba90a2acb22e5eb7a7d4d9ef9da481f06", - "0x281f649f6d07cf7fead741ebd721b074952aaeb874421592b1ab25962c65a120", - "0x0067c824e9d5b3103c0f27447517d98fd2caf420c34d546049590f12a3362a49", - "0x07a3cbb78cae41705b2747cfec6405546218648e9359ccdef78e72f22e121463", - "0x2604a3f36ac6778a015697ca421b47cfa1497fd354da9e1e6bcb7245c6f6ddea", - "0x08572ea80d140660ea5d63710ed602b6b47c171b4115337eb251976fdd671589", - "0x1fdc5c450ac18b51cb36cc6e7a44fe1fdcb7c44014d12362a59b3fe21c6a4dc4", - "0x15c9fa1bf955a77fafb5de26f382d3734f766165b17afa3f13d857612c21f7ec", - "0x24c8ff5791c6fd4960e96a44088734e423f6b58ad62e3207eb849a955345230a", - "0x000efe7396487d95535d01adf9a181a579724ae525ca5a276e07b6c8dee00287", - "0x04175f1658ea2f7cc2325b7a4bf70d4e4b7124799bcd26f9647e723ed8a7518f", - "0x165b81f7b5ed4cde25285cb58aa09a9dbf3af8ada8613d4179eb2ccef6d14549", - "0x0875c761b22a82c51e23979f67d2c4f625cc9ce3f11e832df471662796148a66", - "0x1a43d12531333061c8730eb0b7f018b98c8e2755240ef0971d460ec6acd4b27c", - "0x1cb675c41c3b6def4f2e621e2b74d976bb41829e99c22116e60355effbfa9d6a", - "0x018c54e81acc8ec1d38db4237fd461b5075f2ed949fec6e5b495e71b6a1599d3", - "0x11f9175a3c3ff2365a8bbf0b2246934f4177b6f628c5b2d403da33553ed09dd4", - "0x28e87715956a4934743f0d9a3d64d20218c0082f5be99ef31d129bcd5a793bb7", - "0x101ced94abd7f21da465aea4320b155318471218ec93790ac6a8fdf01764248a", - "0x2fcff60dc8d062eb76173481ab8a2721905eb63fe62741dc6d5d6160d3c9a5d9", - "0x04607684855cedafae48bcc7d445e0bc3fa31daed9d729c74d54467e77657abb", - "0x04b2eb7adcde0e7ce70de8467df97ec3e23a8e186ab74b1421590a931d6c9479", - "0x295bcecb9bf68de1252fceac76d90136a4a7ffc4027da3065fa490832c71955e", - "0x12ae07fc4899474717750712ae3a7887cc90dba054387041d58f75e56e2ed6ec", - "0x13530c27ef877414a10445c514e4ed0ca027d4a85032b651bc8636f8c4196456", - "0x20e73ce80905b8b67e32a43a3584226cf05d58bfe1dd5b069647f0e3dfc4aaa0", - "0x20e10820999383607a59f053564fba4f0b01701b6e6df80139d94224bb8cca62", - "0x2379dbf1653e687867bca6915e63199fb99f7d0421f3c00e5613012f90f2e840", - "0x09f80555f2d7a05f3838726b319cf039ae36fa37ba23fa06fff1c69da83d1379", - "0x1e4afac09400bcdb014d916ffecbef73dd1154da1fabd939f86017ec3560973b", - "0x1f25e67686532e64552b40ca235478d51db140e24c890c45019732b22b1e0c77", - "0x2d396ce3f7b1432357fc476e705a6224bc8171d4d2e14026d6924cb1744f5e7c", - "0x04834069d669e993eb1706720e16fc0ef65cf8f83f822379f7b6acba6c7b5f0a", - "0x1bcfd2208e062ae8fa829f68a1caab5cf4618128e605942bc49803600d0061e4", - "0x0484ee970df58251206b76c2929837397def93e3684484b98bf47bf21c5ce278", - "0x292a36315540cc0e38f2feb31578f348bf7a02398bc34684b124a0841b43dcf5", - "0x2330cac2257790e2fd94e24f2e604c6b78bd7fb14f43ad9c3e37a3a0a5a2182a", - "0x1bff040fa1de695ee30f875d98eab4cfdfc3c11f47e2b7e7cf3ea411f0c5a569", - "0x02175ca7d5c55179f99eb6e917861dcf75eb3fb1fb41c46780b620f72a05f0aa", - "0x27313ea87f60ac0ba38caa015a4c0788cc4cd3743abcf843919338c72433b24c", - "0x2b22fceb46e93c691d3a461ceacf80670ede738a5ca682718ca1048699b6b591", - "0x2d329f682c75f11783a7029fdf7fb7cae1a340769b6a2fd3c0a9b5d8eedef049", - "0x1fa6eecee4412851ee655c64d5b9a8a24ea7aab1e3f42957e17c93abf9285ccc", - "0x0bafc2e9bd9e95a8b854456e42134b0466ba2186dc3b179dc702ee57a21b8fbf", - "0x09655b6c20373f478d0d0a38686b541f92e6a9b0a0a6535c68ab1507a157709e", - "0x19b7a838cf44beecddbe9e1381dcea7209e494b5c00e7ea8d190216310a12c3f", - "0x17da7eac110d6210be1a3cfc10fb57396dda247caa36cb0965d385b0a4c71e29", - "0x26e2b967013c3d4bd776f357ed5a8562d14e36729ed0ed1099824c9db1d0c17b", - "0x2b92537f950f88ab3cb40437eee4a6f57a5b9bfc2399239aadf63f632eb176cb", - "0x04d1136be50c654ab359c77446f8638c5acddb86953ac1e9772b240f1e045d81", - "0x241d48ee512eb573c28d77de8b2d4c0df1bde3259e81178606c9438700e3d21d", - "0x2a7cec0776d0e9292cf68e9706a4f692a0fac5acc52edb71e7a55c9ee780b306", - "0x11f190dcd63126ee76fb9644b110bdf6657c1837e75d904f475493997fdfe1f3", - "0x04781d7e5a587373596013c54ad8b76fa12be66b456621580cd939d82688f5d8", - "0x0111fa67b86fea5ae231939a1e192136a13d799cff186842a697c64d9eb2b52d", - "0x28cb727c86b01509233e982ec5f2d840f89f53162f9bfdd83c4808a29f15bf09", - "0x0d265f5948bd836c0739a15ef0d7ffb91decba209a198e8a81e6eca4b3817576", - "0x184fd3670c857a737f46595b8d5f22190554033160e248969921dbf9755ab97a", - "0x18c0746001ece819aa561c5253383c78deabe6b8e43905ba568a98fbc4b15fbb", - "0x1eb313149dbed86d5d979f554611a68df89c53a4ace8715a889f2c92b353ccdb", - "0x004d6f5aeb386796864aa5d314ab608d4c99a2fe72e18dead127ebf56fc97869", - "0x305724c8040e4155fa3f14c3c3a9fded89e30338734ac6b1ecc5daf3fa9886a4", - "0x0fe70f40b853335ac371c5168321927c053f7f884fb0bcdca6f29c6955bea372", - "0x1d15aba750be26d312f35a36d7ed2658d73c65ac38970bbadba351d2fba545f1", - "0x274451f099016007ebb4fac4dd4929f1c4853bcb450fe140014a3f3e939fedc7", - "0x0036d0e6846cf7a083c9680aeae473446ef6390546057ac91fd0bd7728d19586", - "0x20126f03c9cc5370b68e6a649c6dbb3c863e6965e5690c0134157d36b0a083aa", - "0x1a3090ff3130708a609fb0515708e692e5fb392ec9dcd8d306b1dfdd02816784", - "0x24e5cdbd9ef6a944d7f81c0965a29e6a4a5da4858394fb2cc88b5feb52d0f161", - "0x1792a4a618617047a5927d26fe6a03a64759f53ccc9d9d9ec58ba01ec285f5d2", - "0x2e76ccf67d5e8006e4c1aff6dfc7eda0a71275e42e8ac84f4ef50732cf5d5e3a", - "0x15bba33d94ad939d7c15f9648fa9914ec1be82e717537b7714d51734ad0111ab", - "0x2bf643fd632eb0da929b73e8936bec6988029cd4e19425f7a68c8fe271283c7b", - "0x24bac2991f7c3e9a746b488ab7c4e7e9c549a8c6db4a1ac6d117f47e25767886", - "0x274a2a04dc4dec9559ee38126921c9f75491b2bc34386dbe5a3896dfc3b19e2c" -] - hash = "0x26a156d7dff9738d14d18bbdd97ddde7ca8e5e330ef0e6338eef607842f175fe" + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x0000000000000000000000000000000000000000000000000000000000000005", + "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000007", + "0x0000000000000000000000000000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000009", + "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000000000000000000000000000b", + "0x000000000000000000000000000000000000000000000000000000000000000c", + "0x000000000000000000000000000000000000000000000000000000000000000d", + "0x000000000000000000000000000000000000000000000000000000000000000e", + "0x000000000000000000000000000000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000000000000000000000000000010", + "0x0000000000000000000000000000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000000000000000000000000000013", + "0x0000000000000000000000000000000000000000000000000000000000000014", + "0x0000000000000000000000000000000000000000000000000000000000000015", + "0x0000000000000000000000000000000000000000000000000000000000000016", + "0x0000000000000000000000000000000000000000000000000000000000000017", + "0x0000000000000000000000000000000000000000000000000000000000000018", + "0x0000000000000000000000000000000000000000000000000000000000000019", + "0x000000000000000000000000000000000000000000000000000000000000001a", + "0x000000000000000000000000000000000000000000000000000000000000001b", + "0x000000000000000000000000000000000000000000000000000000000000001c", + "0x000000000000000000000000000000000000000000000000000000000000001d", + "0x000000000000000000000000000000000000000000000000000000000000001e", + "0x000000000000000000000000000000000000000000000000000000000000001f", + "0x0000000000000000000000000000000000000000000000000000000000000020", + "0x0000000000000000000000000000000000000000000000000000000000000021", + "0x0000000000000000000000000000000000000000000000000000000000000022", + "0x0000000000000000000000000000000000000000000000000000000000000023", + "0x0000000000000000000000000000000000000000000000000000000000000024", + "0x0000000000000000000000000000000000000000000000000000000000000025", + "0x0000000000000000000000000000000000000000000000000000000000000026", + "0x0000000000000000000000000000000000000000000000000000000000000027", + "0x0000000000000000000000000000000000000000000000000000000000000028", + "0x0000000000000000000000000000000000000000000000000000000000000029", + "0x000000000000000000000000000000000000000000000000000000000000002a", + "0x000000000000000000000000000000000000000000000000000000000000002b", + "0x000000000000000000000000000000000000000000000000000000000000002c", + "0x000000000000000000000000000000000000000000000000000000000000002d", + "0x000000000000000000000000000000000000000000000000000000000000002e", + "0x000000000000000000000000000000000000000000000000000000000000002f", + "0x0000000000000000000000000000000000000000000000000000000000000030", + "0x0000000000000000000000000000000000000000000000000000000000000031", + "0x0000000000000000000000000000000000000000000000000000000000000032", + "0x0000000000000000000000000000000000000000000000000000000000000033", + "0x0000000000000000000000000000000000000000000000000000000000000034", + "0x0000000000000000000000000000000000000000000000000000000000000035", + "0x0000000000000000000000000000000000000000000000000000000000000036", + "0x0000000000000000000000000000000000000000000000000000000000000037", + "0x0000000000000000000000000000000000000000000000000000000000000038", + "0x0000000000000000000000000000000000000000000000000000000000000039", + "0x000000000000000000000000000000000000000000000000000000000000003a", + "0x000000000000000000000000000000000000000000000000000000000000003b", + "0x000000000000000000000000000000000000000000000000000000000000003c", + "0x000000000000000000000000000000000000000000000000000000000000003d", + "0x000000000000000000000000000000000000000000000000000000000000003e", + "0x000000000000000000000000000000000000000000000000000000000000003f", + "0x0000000000000000000000000000000000000000000000000000000000000040", + "0x0000000000000000000000000000000000000000000000000000000000000041", + "0x0000000000000000000000000000000000000000000000000000000000000042", + "0x0000000000000000000000000000000000000000000000000000000000000043", + "0x0000000000000000000000000000000000000000000000000000000000000044", + "0x0000000000000000000000000000000000000000000000000000000000000045", + "0x0000000000000000000000000000000000000000000000000000000000000046", + "0x0000000000000000000000000000000000000000000000000000000000000047", + "0x0000000000000000000000000000000000000000000000000000000000000048", + "0x0000000000000000000000000000000000000000000000000000000000000049", + "0x000000000000000000000000000000000000000000000000000000000000004a", + "0x000000000000000000000000000000000000000000000000000000000000004b", + "0x000000000000000000000000000000000000000000000000000000000000004c", + "0x000000000000000000000000000000000000000000000000000000000000004d", + "0x000000000000000000000000000000000000000000000000000000000000004e", + "0x000000000000000000000000000000000000000000000000000000000000004f", + "0x0000000000000000000000000000000000000000000000000000000000000050", + "0x0000000000000000000000000000000000000000000000000000000000000051", + "0x0000000000000000000000000000000000000000000000000000000000000052", + "0x0000000000000000000000000000000000000000000000000000000000000053", + "0x0000000000000000000000000000000000000000000000000000000000000054", + "0x0000000000000000000000000000000000000000000000000000000000000055", + "0x0000000000000000000000000000000000000000000000000000000000000056", + "0x0000000000000000000000000000000000000000000000000000000000000057", + "0x0000000000000000000000000000000000000000000000000000000000000058", + "0x0000000000000000000000000000000000000000000000000000000000000059", + "0x000000000000000000000000000000000000000000000000000000000000005a", + "0x000000000000000000000000000000000000000000000000000000000000005b", + "0x000000000000000000000000000000000000000000000000000000000000005c", + "0x000000000000000000000000000000000000000000000000000000000000005d", + "0x000000000000000000000000000000000000000000000000000000000000005e", + "0x000000000000000000000000000000000000000000000000000000000000005f", + "0x0000000000000000000000000000000000000000000000000000000000000060", + "0x0000000000000000000000000000000000000000000000000000000000000061", + "0x0000000000000000000000000000000000000000000000000000000000000062", + "0x0000000000000000000000000000000000000000000000000000000000000063", + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x0000000000000000000000000000000000000000000000000000000000000065", + "0x0000000000000000000000000000000000000000000000000000000000000066", + "0x0000000000000000000000000000000000000000000000000000000000000067", + "0x0000000000000000000000000000000000000000000000000000000000000068", + "0x0000000000000000000000000000000000000000000000000000000000000069", + "0x000000000000000000000000000000000000000000000000000000000000006a", + "0x000000000000000000000000000000000000000000000000000000000000006b", + "0x000000000000000000000000000000000000000000000000000000000000006c", + "0x000000000000000000000000000000000000000000000000000000000000006d", + "0x000000000000000000000000000000000000000000000000000000000000006e", + "0x000000000000000000000000000000000000000000000000000000000000006f", + "0x0000000000000000000000000000000000000000000000000000000000000070", + "0x0000000000000000000000000000000000000000000000000000000000000071", + "0x0000000000000000000000000000000000000000000000000000000000000072", + "0x0000000000000000000000000000000000000000000000000000000000000073", + "0x0000000000000000000000000000000000000000000000000000000000000074", + "0x0000000000000000000000000000000000000000000000000000000000000075", + "0x0000000000000000000000000000000000000000000000000000000000000076", + "0x0000000000000000000000000000000000000000000000000000000000000077", + "0x0000000000000000000000000000000000000000000000000000000000000078", + "0x0000000000000000000000000000000000000000000000000000000000000079", + "0x000000000000000000000000000000000000000000000000000000000000007a", + "0x000000000000000000000000000000000000000000000000000000000000007b", + "0x000000000000000000000000000000000000000000000000000000000000007c", + "0x000000000000000000000000000000000000000000000000000000000000007d", + "0x000000000000000000000000000000000000000000000000000000000000007e", + "0x000000000000000000000000000000000000000000000000000000000000007f", + "0x0000000000000000000000000000000000000000000000000000000000000080", + "0x0000000000000000000000000000000000000000000000000000000000000081", + "0x0000000000000000000000000000000000000000000000000000000000000082", + "0x0000000000000000000000000000000000000000000000000000000000000083", + "0x0000000000000000000000000000000000000000000000000000000000000084", + "0x0000000000000000000000000000000000000000000000000000000000000085", + "0x0000000000000000000000000000000000000000000000000000000000000086", + "0x0000000000000000000000000000000000000000000000000000000000000087", + "0x0000000000000000000000000000000000000000000000000000000000000088", + "0x0000000000000000000000000000000000000000000000000000000000000089", + "0x000000000000000000000000000000000000000000000000000000000000008a", + "0x000000000000000000000000000000000000000000000000000000000000008b" +] + hash = "0x0000000000000000000000000000000000000000000000000000000000000002" [inputs.avm_proof_data.public_inputs] -transaction_fee = "0x00000000000000000000000000000000000000000000000000111fe21ac076a0" +transaction_fee = "0x0000000000000000000000000000000000000000000000000000000517f10c9a" reverted = false [inputs.avm_proof_data.public_inputs.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000008" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000015" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067a0eccf" + block_number = "0x000000000000000000000000000000000000000000000000000000000000000a" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000024" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b460d2" [inputs.avm_proof_data.public_inputs.global_variables.coinbase] - inner = "0x000000000000000000000000a6d65a1ad1795526cb63f95cb3685b634407b98c" + inner = "0x0000000000000000000000008009a7f59868805bab145ef4dd5096e6fe52325e" [inputs.avm_proof_data.public_inputs.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.avm_proof_data.public_inputs.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000c9bd2fa9e" + fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000003c5fa" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000070" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000090" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.note_hash_tree] -root = "0x2dfb2e7fac4613c43def7c7f8a55fc15632c6f3d16241be420b915b7ce2493aa" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" +root = "0x20d15f24478dd5285907809c885d289fd342b119c77df4c788fb70fb5bdb58c3" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000300" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.nullifier_tree] -root = "0x2a3b74294d2fd42b879553a610e47157f2f12914953d6e200638321392e3cf2d" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000300" +root = "0x2b9cabacb1a001911d20f1dabfe7cbdde8e5a80a852574504c1d666c05d2c3cb" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000380" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.public_data_tree] -root = "0x076b5935a18aad50f2b0d3fafbc5358c19a73030e346c33d3b8773b29c6c4a49" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000097" +root = "0x22c954862ff7782249fd5acd51303af48d5900badbb7e2077c619301f264418c" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.avm_proof_data.public_inputs.start_gas_used] da_gas = "0x0000000000000000000000000000000000000000000000000000000000000400" @@ -3543,14 +3543,14 @@ l2_gas = "0x00000000000000000000000000000000000000000000000000000000005b8d80" [inputs.avm_proof_data.public_inputs.gas_settings.max_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" -fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000012e9d48405" +fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000000c6f2a" [inputs.avm_proof_data.public_inputs.gas_settings.max_priority_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.avm_proof_data.public_inputs.fee_payer] - inner = "0x0739aa78c2b89115fa6a6f888f6afeadbce0e2ec3196b098ab8b1d864da54252" + inner = "0x14d6b44749e0216d02aaf579a2f57b0695fe14ba308f45b16cbf84f2ddbb09d6" [[inputs.avm_proof_data.public_inputs.public_setup_call_requests]] is_static_call = false @@ -3970,13 +3970,13 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 [[inputs.avm_proof_data.public_inputs.public_app_logic_call_requests]] is_static_call = false - args_hash = "0x29448498899e3eaaa4ff071ee2950f9f5b6ebb42af4ee323edfa1362e05c4966" + args_hash = "0x2fcaef9c0cbb476d68ebe86fb5b6bc3d4fd5dbadb1714e96499845813862672d" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.msg_sender] - inner = "0x0739aa78c2b89115fa6a6f888f6afeadbce0e2ec3196b098ab8b1d864da54252" + inner = "0x14d6b44749e0216d02aaf579a2f57b0695fe14ba308f45b16cbf84f2ddbb09d6" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.contract_address] - inner = "0x2269225dd372f7e0b33082b098987be85ea7236a03df03ef19dbd92926ff848c" + inner = "0x1e4896ec29452e630feab5f15a2e67ef04b0cb7ba709a79631ea5df7b6931eea" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.function_selector] inner = "0x00000000000000000000000000000000000000000000000000000000d5441b0d" @@ -4475,7 +4475,7 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x2cb4c12c94db55803224748d4995ab0b9d0401b167e925408eb57b71f3c5435a", + "0x21ad6dd98958cddf707f768bab37ddce8c93db4250d96e74642ffeaca29fb4c8", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4853,23 +4853,23 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000070" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000090" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.note_hash_tree] -root = "0x2dfb2e7fac4613c43def7c7f8a55fc15632c6f3d16241be420b915b7ce2493aa" -next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000002c0" +root = "0x20d15f24478dd5285907809c885d289fd342b119c77df4c788fb70fb5bdb58c3" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000340" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.nullifier_tree] -root = "0x0632b7fa6bf3c4f4f407b05d6e0cec542e5fe3746fd540889398d8241f4ef29d" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000340" +root = "0x0d0844fe80f1a15d905dffac63c95e143489ddc0357beee2d635a1ad87440ef7" +next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000003c0" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.public_data_tree] -root = "0x2b5c4355e2a7190d07d1c75e62f181051e8802989f178a072cbac1409cc5e4d1" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000097" +root = "0x0fc3aafda303d5f095ab094f3f6e9fb8423b2de5b33862ed4374d196b32d899a" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.avm_proof_data.public_inputs.end_gas_used] da_gas = "0x0000000000000000000000000000000000000000000000000000000000000800" - l2_gas = "0x0000000000000000000000000000000000000000000000000000000000015bb0" + l2_gas = "0x0000000000000000000000000000000000000000000000000000000000015991" [inputs.avm_proof_data.public_inputs.accumulated_data] note_hashes = [ @@ -4939,7 +4939,7 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x2cb4c12c94db55803224748d4995ab0b9d0401b167e925408eb57b71f3c5435a", + "0x21ad6dd98958cddf707f768bab37ddce8c93db4250d96e74642ffeaca29fb4c8", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5262,16 +5262,16 @@ fields = [ ] [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x2f07d412d3983d70f390337ced53468c83dbdecc013d629ffbbf6b33d5ae0cf7" - value = "0x0000000000000000000000000000000000000000000000000000000000001f40" + leaf_slot = "0x2ec50f5a931511a7a3948f450ca5346eecf1b15cc7fb39de50b1daf6839ce4ae" + value = "0x0000000000000000000000000000000000000000000000000000000000001c20" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x01f9a76f455f862131271354da2c58a222dfc21587f39a1a9dfcc3879b4b9c2c" - value = "0x00000000000000000000000000000000000000000000000000000000000007d0" + leaf_slot = "0x1dcbd65787c3627da42aa92f62687f53bc826277b6f68cf1388dfe6a11b1d887" + value = "0x0000000000000000000000000000000000000000000000000000000000000af0" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x26599f328e161f0a207b32c35117416f0c5b3717a718c1901affc89da47d46a2" - value = "0x00000000000000000000000000000000000000000000021e187dca1e3c31e130" + leaf_slot = "0x11c1ccbc812c10e399aa560b861a50343db8ec4e6d880f273366d3304f3bff36" + value = "0x00000000000000000000000000000000000000000000021e19e0c2066391b59a" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] leaf_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -9678,116 +9678,104 @@ fields = [ [inputs.avm_proof_data.vk_data] vk_index = "0x0000000000000000000000000000000000000000000000000000000000000005" vk_path = [ - "0x00da862b2515015fbe271dab99ccccc39fb174fd9faf50bc34521b435e116698", - "0x2b77e1f090f8ac50bbc9fc28db8ea336688cb784041d63878f82f95be843118d", - "0x2f2772438e0d618a93623471f8f0c11320a737162b66f222e2068c3fb27b88fa", - "0x1ee4b31996273eccf6db40c0a6907056b06b370c9d39c9949911b799ca270169", - "0x126bb13ce4b07681f511f3a23d88cb7cfe082a76730abd5b4be5c4da3b5c51fb", - "0x050dc6390aace9c6e873b762c65e7d6a21e78e64e5ad6cc7c8fd5e69315ab5fe" + "0x27dbd017f63a5339a96cbc9ab86dc2b137d7c0ed488f2ea3e33424d7a44562c3", + "0x220859c1fa9f36c19ef97e736131bd8d611bdff8c9be271bb7dea53fa00a0cf4", + "0x301026a8cf962faa22d530cc270d2c2d3217e8e72a24b3558048fb12e42f8d15", + "0x1ed25a38cd9d04ab5b82e40e8df5203e8601022abfa3f35de954bae2f5ab9434", + "0x24662cacfccfb2d5546980df3e5c862cc9db1fc1478d849683bc7978e2505fbe", + "0x04337049d78eb99c185b426502d49be3eae04d23b7c69e27f8c7ced3efdcdee6" ] [inputs.avm_proof_data.vk_data.vk] key = [ - "0x0ae51332b31a96b10129b67414c1501c23c145a93a586a7a33a5a9bf0e410943", - "0x125b0231d2cb3cedea55af70ff1172fc79e47dcde5b4145effaa42c2aef956eb", - "0x28b3a65e6bc93378e118fcffc1239b7083b21ff7c9739475293c03b77baeecfc", - "0x23b17f97c6311c8aeecbe1ce3403f033b9ebc4fc0c5d54e9325bf875085c4cc3", - "0x124a28e9a60be12661e6d83edb5bfad973ab4fcfbb5794c9636bbe68ffa0dcb5", - "0x1a0cfb368aa130a86a93bb1c2b01df533cd9597f549add9e9e9b9d901aadef50", - "0x0aa70d4a70d4d26018bbbb10bc44f56087465cbbf3538f6f278d64584b7c34f4", - "0x1a0c68db4644b817c7867965e9c6238ba4126497b48c953789e321048f06231b", - "0x1c8ea739e0e0a1bee53bf2fa22023efaa3b7e1b62827c590bdbc5f39136d4824", - "0x13dd5859ceed41ee56ccaea4950439b95f196825009e8b58a9855664161f95a4", - "0x0c5f6e436e4351883f9bbca0215a1a2e27ef27f79da5df77f66a90b90ac570c0", - "0x0ee27603a342e1d12f6887b2b21774c2afa5949c7bf1cfa1850c146936ecedab", - "0x2f72d61c654d611d3a4a77f81505c81d1b953f7b1bf6a18946f4452ffb06ed99", - "0x2d7a10bf783d162eac978803594af171c0d1ab6c31443b664606bf50b77c9724", - "0x035694bb2487a921513978e71d7451ec7c9806c45a812c568bd078d78c01daa8", - "0x12256f2276e663377a62f7e4a4bf70b95a453b98caaa0a148693ec31d317a360", - "0x28fbb3053bbcf5f94948936f537dd38eb3491b2fa172f544845f7e1203119206", - "0x2b2478ccb27d9bbd33185376d0dc538bab25b967c5c20c980f81f424fa891db9", - "0x2431debfd99fc17a1a8bab0613d47bbba321273dd349fe236e49ac6197f069b0", - "0x1931b5e8e351b20f6ee054571cd879203e7ad81882de26e3cda1b04546f15437", - "0x1ab0979a8905cfff871cbc70c0fc22c10fce38160b581f9afc1b2e6500345cb5", - "0x2809774c97039c7ed00d27a8eedc25bab4c11c02ff9512461a7d98860945c520", - "0x05b0a66c5ac3b7d3d3fda780438ce9c1682f99cb41fab88299fee602028615a6", - "0x2ad9813b7d861d11d99822fd7dcc45615be171d56d7b3691e29cfcf65fbbc050", - "0x0475f9b7af927806761facdbf7447da4a99c5bb27fe021e4abd9797e6b485add", - "0x0f2d3fb5a12432dbdcbf404ec013190d4eb70e3935e903361539806d3a0c760c", - "0x07c79df44f4e585161a66e1c9c05b3d377a8ca8ddfe162bd59ca7c430f3d98e7", - "0x0eecc65127352e66379f8180421bc86ac54fa41e54d3989cf082907bb05d2c99", - "0x12ad68b68777c9bfc86d7d3a561715e9d4d580ee75a4d620aa0d7280c5f326ad", - "0x04cc7b15cebfa7e434df2cf4b29d7b15b45354563d315cff34700b02948ebeda", - "0x2990b1943558eaab05225ba252db0519a0f4f9037700166d7ad28785ec6d9e1f", - "0x2cd0e886bac00c4982236c092992000afe17146ea82ce46a3533fdc7ddfec400", - "0x2153deadacbe8f969ea0ea0df3f6d9c88c87835514d0bd1f1af92743988d7a1c", - "0x290a97bcad6ce5029a750f74534b7b9b73bb0cb4ebe994d511fbf88d6a0ee070", - "0x1ccd95804afa4fffba3ce252998c9f2952a35eaedf4b2f4965990e48832bc76b", - "0x17ca09496ea9fdbe4da5f9f4605a65229712156ebe0b76c5222ef6951c03a909", - "0x1945e53b4002016ddee9985e97cd8bd508337db42aa66250d2169084213e9c1e", - "0x1eec8a453c3f8727f70a88aed0cdc185d97f4a200e484c8b31fbb2c009bc677d", - "0x1bd66a2dc0b27f7ab5bbf4dc07abe54465137cbefb9d045120a4d97144df8ef2", - "0x27144b37f7e3c4c4195de965a078bd52a6d32cf92fcd75d57a0654c08e8ec84d", - "0x119e50a7c0a715d7e1777243079663a98fe8e9a7406e4127b89a05428c05c815", - "0x1e8a692b5535134dd7f0c73818c61ab14773fe884c2e07f25dbf01d59a685bfa", - "0x201794903f64f7ae05b76b787fcf433acad2b7e91962619313d85c7cde558f69", - "0x0a41a52ea8a77e1aa0e97d4e91e7aaa881b0f681a1c2dfc5b33625fb9296b4f1", - "0x134520cd80acbcae6845e1a502cbde75520377a953336e4b88ccccb09ad4c736", - "0x28c7d120e6f10e0377f2008c58a84acbff2d41c504d076709fcca905d7b5edb9", - "0x272a8ffa0c543d87f3b39c970512ac3e1c8d58e112f1796e821581d36e405a46", - "0x1133701c6f9790a773a0a1a09dc18a30366f5fa17b5759e4302941fba7e95452", - "0x02b2fef224dffc5db62c6b275de8b0b3e68881e7dbee308c0ad08a54612787fc", - "0x0ece9b2b188d36d9a4887f3fac9d7333bdd417c44e41dd11adf7e9d7760b6b7d", - "0x0f53c5c5195ddbcd36c5c93028c194bfb355ce50892846b52c2934b3d873dd05", - "0x054a925c0c96ab114db60c74ab2ef5433f4025e16d2e4dbbdd88e594efbc6a89", - "0x0e0fc31105c5df15fdd2dd028fead7c0e62b1b00927d412bd0862826c094d312", - "0x2b97817b9a70cfd1f31c84c0aa3df2c9981814fb658c99083a4f142b5e7aa284", - "0x1e78611bbf5d494c6de1cc521f1cf59163f796e28a09d8b0f8901fbeea86f19e", - "0x18d1d656df9b136033ef6e95204ab22dad99ed143d78faf4d44519745e6c9f9d", - "0x264a1265dd5b96d26d5e298780f4b3e4beef964894f2e97c40c0d658a7829033", - "0x248c2f59e151df9f8ca919d61a0435ca518857cdc01d24cf1ece2b9d236ce72b", - "0x2122f709ce8e298b455c3215d4daa793b5d7961ec02fd584097838f32db8c8db", - "0x0c4ae4e7331d7c2d3aa5ad1c432af44fc7815fcec3caee4a58f11e75d80f2d92", - "0x23676230ad03c3af615973ce82404f8b5ade22a3ebc7c0ff4a122275707ab141", - "0x18234f35db309870381dd0198b8ca50387aaa0aed64272ee5220f2565abc7051", - "0x17be5287fc5734d657d0dde3e60d4bac1afd838e62edbfe53bace27fff75abca", - "0x20feb3a91787d22193788886b3946316aae8a0e783ce5d9930066bf71f156e94", - "0x189a0aa79b0e4e0735243ec07f923c299f709ce828ebc082c0a3be14cb30c6de", - "0x08bf0ead5676a5812074a466a30016cd7d5624344e92ce9b15bb7380db3b914b", - "0x2d7838cea8a75709c57c4a1604ee5be5d857f1c17236fc3998f82ca81bc174f6", - "0x23329669c915263ad4e3aa90e431bad963ae8b65f4088b22d0333b9f31cb58fe", - "0x044c0bdf75e1fe6376b98839da309b935f57e2d252dd6be0b0f96647822b27ef", - "0x2dd5f8505ca4ee0be8da3c09e2ce9cfbfadd6a44e22728f56ba1d9b10aa0b216", - "0x2a04bab3ab7bf74fb3cdf3190d1a42a999364d1361fe5b90d8a120b9751d962f", - "0x1f799fa6a84e8456c1042908f5cff4fa887503f47613982d156747ffbaf84b5b", - "0x248622146dc4350edde1333a76071fe6e65252a6cc7135102230a4cd1b2e6e14", - "0x26a5c045cae54265cac8bd3e123ea53c6f5b4a6b9a4af378dce04a700e2a738c", - "0x2729a99d469420fd6a6ecf5792ca558f73974156b27d51e760d9a6451a525634", - "0x1c9d978f22cc22db24449236d4593f5c327d34c36d8f67091b5647a517cffe65", - "0x0f7a2e1037287fea7f1a0c73a22bf18ec32935b762dce739569630ca99dbbb08", - "0x0d27645b5238a2c3599309955128dfad519a374c61d62f5318881b47b497c534", - "0x0aa7ca8d6f23ad39da941ba357b2c8611abc3d8b50abac7e5cf33d8bf313cab3", - "0x20a8d9ae2464fedd905f0062eb4207e496b1232bb9bd09f7689bda8faa143d8f", - "0x05992335548a58703bbd13e4ea68c16de34185ab9438527ef2b228af6091bf74", - "0x0ba193d531ac41ef03fcdc99d6e3d87c351abd00a3f9a46e4d36d106d9edd506", - "0x300869b624ae241464ef084ddfe7aba83c6ca2602887f4055f0dd857a42b90ca", - "0x159f24b54d78e54de87fe457856c5d79dd75c0a45284b742963788a5ce7a1494", - "0x0962c224f06d04d18d1f64841e5194343c9da1e11f88d8b26ef112b87d6663b6", - "0x256c2f741ba1e344adc865a912ec45796811344bf3fd3636226ea9e7dc73f807" -] - hash = "0x281c0646db17a4f95e1dd0b8bdfbf4f57ea92134b0165198cf219ebfaa5ca984" - -[inputs.start.note_hash_tree] -root = "0x2dfb2e7fac4613c43def7c7f8a55fc15632c6f3d16241be420b915b7ce2493aa" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" - -[inputs.start.nullifier_tree] -root = "0x2a3b74294d2fd42b879553a610e47157f2f12914953d6e200638321392e3cf2d" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000300" - -[inputs.start.public_data_tree] -root = "0x076b5935a18aad50f2b0d3fafbc5358c19a73030e346c33d3b8773b29c6c4a49" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000097" + "0x1c36733a9f0533214c58492b54b65a45d2f4ce94eda01ed1897dd475d5a09778", + "0x1279b865fd247fa82fdf1698a6dcd98f5e80b6a4f631cafdca7ff1ac3c31094e", + "0x02f2b2022dbe203d1e7c4269f2a1b7d6bee66698486e9a931506602a00526523", + "0x297ff67bc2f8528ed236134bd668f3ecdd1ba818d5bcfcc45f689da702a15f80", + "0x2b73cbdd9d7022231cef3fd4c9fa0a45e4d703c6e4c93e921e10dabef51a0565", + "0x08f59b10da57559d46772578cc26dedf38c266fe4d14cc81a57212ae8e63032c", + "0x117f3d09e53da9eb9730e301e79bd2847336eda8a6d75e0f88bedaca8cdc8f18", + "0x0d0ab0e05ed2a50083f58b74262dd8acdb143d91f2231c4a7deca96eeda44154", + "0x0271273c7037da9c780d272cd430cdd1e5c340ece79097203e159186f5cccd5e", + "0x2f91ed03c40982269a4681552f36c8502571e44c094eabf0143fd04112f2a215", + "0x0b9970147f2d5ab29ec4909668586e8ebb9e75d153c96133b9f10e0665b93228", + "0x1a314a37bbfafcfddbedd5185c5e9e8b7fdfbced62f6115fc1e1840e84e75083", + "0x22acaab18035b32178688be7587af32b41d654aa8230e999734c24c5f9b89103", + "0x0f149530bdfd5f583986f0535f51bcc05d983491a48e9314a2f8410821a7253d", + "0x272c0c229fff0e4f589f3a6b8e1e7aa18a79af2c8c9527ea9c5c679949fa2ba2", + "0x168da9c71d39c6d11e7c7f1d3dfc0f89fd65afe686685f53ff97b10ad76131dc", + "0x22f67b91c5039c0e419c1cece8200f16c114fe679de2738425e9586c5f1ed8fa", + "0x1e29999005ace54c7d79dea49cee63d41fcdbf3666e9f289d1664f7908fc0ef7", + "0x0a1c19ab0c4ac87496b1bbfaf27f5bbf692a4c2cd05d3cdbec884426602bbc3d", + "0x1bb242ae327915a8e6b14b888cdf4593e00da44b968e94e496ef980621c09550", + "0x2238961e4d7c09af7ede903803418bf71cdabe578db5c7631756876b75242102", + "0x102b98be76e8c825ebb39330a26961a3137c589f2633b5fdffa7e2bd9dba8487", + "0x2b04fecb8b7230dd3fa0e87d6fa293fda246791b829b78f4c598d97593554f90", + "0x0b32afda38e6f33ffb9bcce78f648511607024b0ff318b212ec8ed6f93f781f2", + "0x273327c9ed08cd337735a0ad8cc0182bb443b582b6e7f9cc816defc539f22200", + "0x23120201d1df6f17f415eba4d0cb3b91e8de2c67e7eb8f906d9b14beb074dd0c", + "0x0f46c605202fdac4dd266d7471f0d158c4523714e7eb51b35ac1a83d8a2a867a", + "0x0c1610f52ffb2f902fed2e399b26ff2dd0c6174a831d5f4235ee41caf796c54d", + "0x19e4fdabf78d590029f3b17c7ba41c9f4975fa5bf58f0dc3ccd0983f1e3a4b8f", + "0x286f0d4afc2a8eec2a3a6d1b09cb0e1f94b552f4e803edcc7272f1b7912b951a", + "0x16f17e46f66d534ae7383563f190696cf523a9617b3a18de1775b6c6025b70c7", + "0x250a6a446bb5e6e9dbf441f9995611a524fc3b253c4ff064459d0d35f02fce54", + "0x01a6636e3664e3ff78d79cd03b45f7d02c82bb3abb1d40f05cd3ea2b14077216", + "0x07a122cdf0753ab48fd1b06c35f1e5f6a30faa171e5245cc17095862851fd527", + "0x1548add6a2604c8a3f489f02d84619be9bcd08a763b8fd4bf036adfdabc2b113", + "0x2618d5514fd97de852b696581d194cc1f5145643d9382cd8b4de6f4e7c365c0e", + "0x2b2e2912d5b2be2c4a93648117483e4d99ce5382f6fe4916cd4eb6cdcff6ba22", + "0x1de5ed667e9a99beddd899462a8bae8938d2921151861ddeecfddb79cb85ed5e", + "0x22e0a788f0f237cfa578466325f4917c020623ed5bfe30aae26fe216274d8608", + "0x0d0beed64de7b8a37378d5dddc4f6231744b4ff76a7713d7b26d2ceeb4ea5342", + "0x2d5402507336d8151336d239b6760e331cf04d94226b6810a075102cd4869e9d", + "0x113b7d7a5ed52ed020332cc2b0a86bd5e5320fbdf25f9681e1125cfb21fae0b7", + "0x2d4ec157ac2a4049ac77ddb89db1e1b758f37628634d6f74298de14e390eeb51", + "0x03e8043b6121b7a4635fcf017feb3ade995ca3f6b97d3c45582cb82df4c70a0b", + "0x163434db5a14e40311385adaa153dc6126f14f82a99c48c53f5d135a674a488c", + "0x2834ea1e36a99706dbf6d472309fbbdf24c4e81195628564db3f4a5b999ff578", + "0x228da896f3a9d782d75d0a65389b232462867d21872d9790234d2f8a5ad71578", + "0x1d57203eb43163b05a150009a1a53576bcf01bdd7717463d2cd92749586ee9a2", + "0x27be3318594e9873a3c304846882d5f7f872232a27489b905d46d6295d8aef4f", + "0x0a670f26259b23695a1d78c9be05ec8e711fe5d319018e48e8544ae15a36d085", + "0x192cd0fa20d3a2f4476958e1de8aa50432b0070db7f3e752062396cb573c32c4", + "0x11b6baf3d1625e1a32af05f03bdd9a3c1c81c95edeb7d5adc0264c36e6457b18", + "0x302bef3e476c01f672eb6d3b297a3e75311f3703d3d3e47c47b35e2fa6abb732", + "0x24b7bddbf4fe8429864a732d2895e5aa04f8ab36b91a97a97594b85e4b14a9e1", + "0x2cd1ad8224e7ca74cd5d953034f6239a1d0592a5f320577cc9f463068705e56f", + "0x050e6ea981bcaf6923d84814dcb967aff393e76cafd425e549bff806302d4025", + "0x06ba8e1c3694c139c5df89b7f4fb567ed01359a869e4506fe896dcf622a60db3", + "0x0c2ae06db717a2e7821dfcb94cdaa505503b1bb503336f30ac6403fda73a25a3", + "0x09d4975f036928e5a92c66d462ab986d4bc2a81274e0a233958a9a339fb5d990", + "0x09c2ce83bb1446e20e001eefae88c6d4f4c07280bf4828becf1b503f3c8a90f9", + "0x2216bf9912b9752d2df15387e9d334b6118eabe57d860164d4257d8967885854", + "0x22058537fb174508739463e7dad588ba267b7a823d7cec58e21bf23c9e609af2", + "0x0c5735fb152cf4b0eefc77c068e03600bb1f70ffa7c102da928ef32b02e4fd2c", + "0x02f21901613498a8d9b441d354a5ba70111adc7afe26ba24e7e7543af7ef379d", + "0x233fe77e1040439e7384d2c8acdbded0faf8f9d43635649e71940b983904193e", + "0x0fd27a3eda856b92f5182a2013a416958306fc16565c3f7843300cab67b79d4e", + "0x04bf9753898eee87a4751fafb31f771bca84d13021e3265cc1af9ec7fb0ea26e", + "0x1e09abc6e5a6870627d229f110b0506d2463e88cb8fc65dff1f4f7ea12d3677e", + "0x2af8cb66581326a986c75233c64534fee83f0b2061ea667e93575bf57f203121", + "0x1eda8eec7861c6bc7719b2b119f4eb30d46ba47f3dc8b7e8514345238a33efbb", + "0x2d96c9a1a1e6a74ba15569179e4c4965f7b9fc5c0cbecac6e28de5bfe914edbb", + "0x0c3853f589cb01d191af8a31025550745bfb52dd55a6243303e810eb6f88bfaa", + "0x12e601e86d665a50c317e33b2f37261734fe35feb56df0e80f7964348b8b7caa", + "0x199705dec6059bc2bddefd16c1c0ba44f2a5f92d998c3c714254f0a1e0fafa2c", + "0x1fc53b0a012a5a18c5584a4e89370983535bea55d2e70fb1745a8c222aa80446", + "0x293f4d78d319d914808eae77889ab6d7b811224407af59435c475599407fd2dd", + "0x17af8824b5fe43e6c6af8ed2ea86758a8b277d651b539cb5a604022ea5a21e23", + "0x3020c2839957d90352b715e6e861379ae86be49b4b9727dfb0ec582da29f34ae", + "0x0639c73b9f2a8c5296fda6bac48c5a354110af5cb1f71b68b7f0be8842f7ce7b", + "0x0e092ec34b1b0e4597de67898ce3c22e1b8412fc6d4d4122afae5e7283caf703", + "0x27d51279660e5c648836bd6ea9bd5faaa317fcb0ed42c2461ddfddd3389d017f", + "0x08436ec77298c8b91ec50a259c7aea7c255dceb3d3f0069babf693d383b72104", + "0x08f731d43cac83aba6a4cc9df691d0f81243a3580f2352cbce9ad867a76a8641", + "0x12b521f6058578439bc29c3c1cf00b007890803542369c545839395f15862236", + "0x14394cc331cd8f8e743dc2158e5d6224e5375e4510edcb7ce30b4e3c3861fb7b", + "0x1b046a51f46ce272342bce489f11b7c7a6c57c4620032a1ee774c1fe71d8c34f" +] + hash = "0x13d579fe8817db71e1104697e8cb6c97ac2cacb7bd30f78450d2bcc482b3df62" [inputs.start_sponge_blob] fields = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -9808,9 +9796,42 @@ expected_fields = "0x00000000000000000000000000000000000000000000000000000000000 cache_size = "0x0000000000000000000000000000000000000000000000000000000000000000" squeeze_mode = false -[inputs.state_diff_hints] -sorted_nullifiers = [ - "0x2cb4c12c94db55803224748d4995ab0b9d0401b167e925408eb57b71f3c5435a", +[inputs.archive_root_membership_witness] +leaf_index = "7" +sibling_path = [ + "0x096c94ed0d8af44115ef6df4a976dbd3b59076d9dcc8e008cb088773cb9699fc", + "0x0990cb45b8cef914f72171a72a0e2f2069e890d3551177b4ec5dfec234b8f7e3", + "0x06c9c9248c60420908ed38bc935ab6ca296e5eb17631d967e9a46e874eeed998", + "0x25ab3e8ea43d70ca42e0823878f9d6da0c7ac9d7da72226bc1cc040fc657f688", + "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", + "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", + "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", + "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", + "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", + "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", + "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", + "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", + "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", + "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", + "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", + "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", + "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", + "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", + "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", + "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", + "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", + "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", + "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", + "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", + "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", + "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", + "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", + "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", + "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f" +] + +[[inputs.contract_class_logs_preimages]] +fields = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -9873,148 +9894,7 @@ sorted_nullifiers = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] -sorted_nullifier_indexes = [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000004", - "0x0000000000000000000000000000000000000000000000000000000000000005", - "0x0000000000000000000000000000000000000000000000000000000000000006", - "0x0000000000000000000000000000000000000000000000000000000000000007", - "0x0000000000000000000000000000000000000000000000000000000000000008", - "0x0000000000000000000000000000000000000000000000000000000000000009", - "0x000000000000000000000000000000000000000000000000000000000000000a", - "0x000000000000000000000000000000000000000000000000000000000000000b", - "0x000000000000000000000000000000000000000000000000000000000000000c", - "0x000000000000000000000000000000000000000000000000000000000000000d", - "0x000000000000000000000000000000000000000000000000000000000000000e", - "0x000000000000000000000000000000000000000000000000000000000000000f", - "0x0000000000000000000000000000000000000000000000000000000000000010", - "0x0000000000000000000000000000000000000000000000000000000000000011", - "0x0000000000000000000000000000000000000000000000000000000000000012", - "0x0000000000000000000000000000000000000000000000000000000000000013", - "0x0000000000000000000000000000000000000000000000000000000000000014", - "0x0000000000000000000000000000000000000000000000000000000000000015", - "0x0000000000000000000000000000000000000000000000000000000000000016", - "0x0000000000000000000000000000000000000000000000000000000000000017", - "0x0000000000000000000000000000000000000000000000000000000000000018", - "0x0000000000000000000000000000000000000000000000000000000000000019", - "0x000000000000000000000000000000000000000000000000000000000000001a", - "0x000000000000000000000000000000000000000000000000000000000000001b", - "0x000000000000000000000000000000000000000000000000000000000000001c", - "0x000000000000000000000000000000000000000000000000000000000000001d", - "0x000000000000000000000000000000000000000000000000000000000000001e", - "0x000000000000000000000000000000000000000000000000000000000000001f", - "0x0000000000000000000000000000000000000000000000000000000000000020", - "0x0000000000000000000000000000000000000000000000000000000000000021", - "0x0000000000000000000000000000000000000000000000000000000000000022", - "0x0000000000000000000000000000000000000000000000000000000000000023", - "0x0000000000000000000000000000000000000000000000000000000000000024", - "0x0000000000000000000000000000000000000000000000000000000000000025", - "0x0000000000000000000000000000000000000000000000000000000000000026", - "0x0000000000000000000000000000000000000000000000000000000000000027", - "0x0000000000000000000000000000000000000000000000000000000000000028", - "0x0000000000000000000000000000000000000000000000000000000000000029", - "0x000000000000000000000000000000000000000000000000000000000000002a", - "0x000000000000000000000000000000000000000000000000000000000000002b", - "0x000000000000000000000000000000000000000000000000000000000000002c", - "0x000000000000000000000000000000000000000000000000000000000000002d", - "0x000000000000000000000000000000000000000000000000000000000000002e", - "0x000000000000000000000000000000000000000000000000000000000000002f", - "0x0000000000000000000000000000000000000000000000000000000000000030", - "0x0000000000000000000000000000000000000000000000000000000000000031", - "0x0000000000000000000000000000000000000000000000000000000000000032", - "0x0000000000000000000000000000000000000000000000000000000000000033", - "0x0000000000000000000000000000000000000000000000000000000000000034", - "0x0000000000000000000000000000000000000000000000000000000000000035", - "0x0000000000000000000000000000000000000000000000000000000000000036", - "0x0000000000000000000000000000000000000000000000000000000000000037", - "0x0000000000000000000000000000000000000000000000000000000000000038", - "0x0000000000000000000000000000000000000000000000000000000000000039", - "0x000000000000000000000000000000000000000000000000000000000000003a", - "0x000000000000000000000000000000000000000000000000000000000000003b", - "0x000000000000000000000000000000000000000000000000000000000000003c", - "0x000000000000000000000000000000000000000000000000000000000000003d", - "0x000000000000000000000000000000000000000000000000000000000000003e", - "0x000000000000000000000000000000000000000000000000000000000000003f" -] -note_hash_subtree_sibling_path = [ - "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x1db1066cf8999e567f5104cd50a37efc344fa4cf91d94ee97158abf8f11dec60", - "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x2e1c53e60dab942acce000436b5f9c581b19ed25827ca74974a704c643a7b9b4", - "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", - "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", - "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", - "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", - "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", - "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", - "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", - "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", - "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", - "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", - "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", - "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", - "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", - "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", - "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", - "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", - "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", - "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -] -nullifier_subtree_sibling_path = [ - "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", - "0x296e73b90daf66f024e1e7d4d16593589aba3398894c19c4a384a332b2d0b2d6", - "0x2d1c8ee22781febaeba8413baaa536e55f68faef0ead35c6510409a945e56002", - "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", - "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", - "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", - "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", - "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", - "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", - "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", - "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", - "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", - "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", - "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", - "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", - "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", - "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", - "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", - "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", - "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", - "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -] -public_data_tree_sibling_paths = [ - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10054,9 +9934,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10096,9 +9973,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10138,9 +10012,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10180,9 +10051,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10222,9 +10090,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10264,9 +10129,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10306,9 +10168,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10348,9 +10207,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10390,9 +10246,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10432,9 +10285,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10474,9 +10324,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10516,9 +10363,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10558,9 +10402,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10600,9 +10441,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10642,9 +10480,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10684,9 +10519,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10726,9 +10558,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10768,9 +10597,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10810,9 +10636,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10852,9 +10675,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10894,9 +10714,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10936,9 +10753,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -10978,9 +10792,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11020,9 +10831,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11062,9 +10870,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11104,9 +10909,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11146,9 +10948,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11188,9 +10987,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11230,9 +11026,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11272,9 +11065,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11314,9 +11104,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11356,9 +11143,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11398,9 +11182,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11440,9 +11221,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11482,9 +11260,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11524,9 +11299,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11566,9 +11338,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11608,9 +11377,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11650,9 +11416,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -11692,5743 +11455,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -], - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] -] - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x2b26ededab40a19a863d9a82fa2b3c45163550f1d492b14b53e6c5da6200e215" - next_nullifier = "0x2ddc0778fbcb0b9571ab08ed97b809ddf2dc0be76a62824e1afd67333fe4f1f7" - next_index = "0x00000000000000000000000000000000000000000000000000000000000000c0" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "257" - sibling_path = [ - "0x0e899c2d4e06e4be4c613906eca287c85c7e7db2d65d576a10b4ae859a6ee2e9", - "0x1fed9a23872b418e24e9b357feda17940c31fed3fdfa5ef8f56fefdc3b241343", - "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", - "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", - "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", - "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x0378cd071afd07958b152d6ea60a3b6dcb2299821b34e847adea5a8df77ec9c2", - "0x0a33a833ec1d8d9f46a6c74447380c4bd5404920a26d13a033f7d91b7e03c38d", - "0x0216505bb84ac2147df7be035a893f1f12bbd627dba4de5ef82430e36fc1ba84", - "0x08c8daa11ad80b30603aac8aa7fe2411adc31423871c782f3903166748dd9d77", - "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", - "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", - "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", - "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", - "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", - "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", - "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", - "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", - "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", - "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", - "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", - "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", - "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", - "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", - "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", - "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", - "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", - "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x2f07d412d3983d70f390337ced53468c83dbdecc013d629ffbbf6b33d5ae0cf7" - value = "0x0000000000000000000000000000000000000000000000000000000000002328" - next_slot = "0x2f104507134868136355ba1952943cf5d9563427f68efbf3dbb7d3bdeea1e5e7" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000092" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x01f9a76f455f862131271354da2c58a222dfc21587f39a1a9dfcc3879b4b9c2c" - value = "0x00000000000000000000000000000000000000000000000000000000000003e8" - next_slot = "0x05845e7ef9cee47f845c62f6c03c7da6f02dce74280086377920d4a223a3a80b" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000076" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x26599f328e161f0a207b32c35117416f0c5b3717a718c1901affc89da47d46a2" - value = "0x00000000000000000000000000000000000000000000021e188eea0056f257d0" - next_slot = "0x277658932a5ec6c236eb07131b793e2acfd4d6c1170536bcfcbdfcb5eb1a8ae6" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000087" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_preimages]] - slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - value = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "136" - sibling_path = [ - "0x2a7311145e721e4e6a502ba3d512019ec27521a123892cc32040914f9f388d77", - "0x1021750868c104e13a2c10a2f6c971305a66e9aec95e97e26400f0e77323c5f0", - "0x0dc5c138aefe5215b7ec398accd60c5fd923f56fa1bafdfd1dac7adb301ce5d4", - "0x240c9a8ad325f49252e263d33e118490d3d6ca81d9899a6e87f8444aa93af681", - "0x0e4caee0800534929b4f648b85a6644ac50aa07e8b6cc004967ae2d8fd262d33", - "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x08c8c154a050b67541a9ff7c2fb5d3e75293d13fe7b7581cb4acd9b077740ca7", - "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", - "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", - "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", - "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", - "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", - "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", - "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", - "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", - "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", - "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", - "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", - "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", - "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", - "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", - "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", - "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", - "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", - "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", - "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "150" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x2b0c28a9a0e25118ad04bffe894a2764129607ce3eddb33da8c5a5bf37f34e17", - "0x28475b1159e29ddcca83b9b080e134392cde059548246aa4c3428999c98f0f8c", - "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", - "0x04558c4177205fae948898e29729212cdba9f3a7b77329a3d838c92ac3f10bcd", - "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x08c8c154a050b67541a9ff7c2fb5d3e75293d13fe7b7581cb4acd9b077740ca7", - "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", - "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", - "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", - "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", - "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", - "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", - "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", - "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", - "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", - "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", - "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", - "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", - "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", - "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", - "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", - "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", - "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", - "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", - "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "127" - sibling_path = [ - "0x0da3a1ac63a0ffed9060613c4f7449a69bebea90c517a88041bf136f4aa075bd", - "0x1c4f90e9eb942ca6a4696a7efd3aa45f3a4fc9e8576d18c95dff999d12bd5fba", - "0x0fe501ab7faba8fe726351d18bb39013221ff7cc0d34e7e8636b2963559e5400", - "0x12db316ebeceef5d96c7602b5384a6fc096abcfd84c893dfc77639b85ed8aaaa", - "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", - "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", - "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", - "0x0eceff0c1b4fbec1602167ad1ccc58b2ec4c3e8f8b5452f50fac3dd5c90a0f53", - "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", - "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", - "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", - "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", - "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", - "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", - "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", - "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", - "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", - "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", - "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", - "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", - "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", - "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", - "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", - "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", - "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", - "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", - "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17455,111 +11481,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17590,25 +11511,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17635,25 +11537,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17680,12 +11563,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17725,12 +11602,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17770,12 +11641,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17815,12 +11680,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17860,12 +11719,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17905,12 +11758,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17950,12 +11797,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -17995,12 +11836,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18040,12 +11875,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18085,12 +11914,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18130,12 +11953,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18175,12 +11992,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18220,12 +12031,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18265,12 +12070,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18310,12 +12109,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18355,12 +12148,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18400,12 +12187,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18445,12 +12226,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18490,12 +12265,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18535,12 +12304,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18580,12 +12343,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18625,12 +12382,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18670,12 +12421,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18715,12 +12460,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18760,12 +12499,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18805,12 +12538,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18850,12 +12577,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18895,12 +12616,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18940,12 +12655,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -18985,12 +12694,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -19030,12 +12733,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -19075,12 +12772,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -19120,12 +12811,6 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" -] - - [[inputs.state_diff_hints.low_public_data_writes_witnesses]] - leaf_index = "0" - sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -19168,61 +12853,27 @@ public_data_tree_sibling_paths = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] -[inputs.archive_root_membership_witness] -leaf_index = "5" -sibling_path = [ - "0x254c2380da37e6bc8bc76d3f564a9c369fdfd9317059e419065608da81ca14e2", - "0x0e8dffcc5ac0e25d409e61d275dbb9db980e2e31538745293ed06a52de67de15", - "0x0b61237fe1f54ebe56c699858d9e52e1396fe978122732ac0743b10be8dbf89b", - "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", - "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", - "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", - "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", - "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", - "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", - "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", - "0x1c4954081e324939350febc2b918a293ebcdaead01be95ec02fcbe8d2c1635d1", - "0x0197f2171ef99c2d053ee1fb5ff5ab288d56b9b41b4716c9214a4d97facc4c4a", - "0x2b9cdd484c5ba1e4d6efcc3f18734b5ac4c4a0b9102e2aeb48521a661d3feee9", - "0x14f44d672eb357739e42463497f9fdac46623af863eea4d947ca00a497dcdeb3", - "0x071d7627ae3b2eabda8a810227bf04206370ac78dbf6c372380182dbd3711fe3", - "0x2fdc08d9fe075ac58cb8c00f98697861a13b3ab6f9d41a4e768f75e477475bf5", - "0x20165fe405652104dceaeeca92950aa5adc571b8cafe192878cba58ff1be49c5", - "0x1c8c3ca0b3a3d75850fcd4dc7bf1e3445cd0cfff3ca510630fd90b47e8a24755", - "0x1f0c1a8fb16b0d2ac9a146d7ae20d8d179695a92a79ed66fc45d9da4532459b3", - "0x038146ec5a2573e1c30d2fb32c66c8440f426fbd108082df41c7bebd1d521c30", - "0x17d3d12b17fe762de4b835b2180b012e808816a7f2ff69ecb9d65188235d8fd4", - "0x0e1a6b7d63a6e5a9e54e8f391dd4e9d49cdfedcbc87f02cd34d4641d2eb30491", - "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", - "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", - "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f" -] - [inputs.constants] -vk_tree_root = "0x048e6bd7b9c1bee68207fabe01c023a98b343a54ef593e1931cb25ded7fc5bd8" -protocol_contract_tree_root = "0x2a22cd0a794cac972cdb72767be4c8375625d1de577ffdde150b685809f19423" +vk_tree_root = "0x2fc1b47fee588fde394861b5b35b31e48ce08a2743680ee10a0bfc326c84e68f" +protocol_contract_tree_root = "0x2441db7b78376b274378567694caed716258c913a57e2a3c3f5aefc733c3a305" [inputs.constants.last_archive] - root = "0x1965187918b61d4d2aa31e3e24c9fbf1a6018de37b2c82ac6cce80b4ac2e3d49" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" + root = "0x2417eed7313693000b235f65f2bd19f2756f732b7d0b5479289f64277083d7a4" + next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000a" [inputs.constants.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000008" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000015" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067a0eccf" + block_number = "0x000000000000000000000000000000000000000000000000000000000000000a" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000024" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b460d2" [inputs.constants.global_variables.coinbase] - inner = "0x000000000000000000000000a6d65a1ad1795526cb63f95cb3685b634407b98c" + inner = "0x0000000000000000000000008009a7f59868805bab145ef4dd5096e6fe52325e" [inputs.constants.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.constants.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000c9bd2fa9e" + fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000003c5fa" diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr index 4f0586f579ad..7df0b0e303a3 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr @@ -52,8 +52,8 @@ pub struct PrivateBaseRollupInputs { fee_payer_fee_juice_balance_read_hint: PublicDataHint, archive_root_membership_witness: MembershipWitness, - constants: ConstantRollupData, contract_class_logs_preimages: [ContractClassLog; MAX_CONTRACT_CLASS_LOGS_PER_TX], + constants: ConstantRollupData, } impl PrivateBaseRollupInputs { diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr index 33101d9fa288..769b1d78d926 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr @@ -33,8 +33,8 @@ pub struct PublicBaseRollupInputs { start_sponge_blob: SpongeBlob, archive_root_membership_witness: MembershipWitness, - constants: ConstantRollupData, contract_class_logs_preimages: [ContractClassLog; MAX_CONTRACT_CLASS_LOGS_PER_TX], + constants: ConstantRollupData, } impl PublicBaseRollupInputs { diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 274d6b158688..e065398bcec4 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -91,11 +91,16 @@ export const MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; export const MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; -export const REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = 11121068431693264234253912047066709627593769337094408533543930778360n; -export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = 2889881020989534926461066592611988634597302675057895885580456197069n; -export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 24399338136397901754495080759185489776044879232766421623673792970137n; -export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 14061769416655647708490531650437236735160113654556896985372298487345n; -export const DEPLOYER_CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE = 1534834688047131268740281708431107902615560100979874281215533519862n; +export const REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = + 11121068431693264234253912047066709627593769337094408533543930778360n; +export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = + 2889881020989534926461066592611988634597302675057895885580456197069n; +export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = + 24399338136397901754495080759185489776044879232766421623673792970137n; +export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = + 14061769416655647708490531650437236735160113654556896985372298487345n; +export const DEPLOYER_CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE = + 1534834688047131268740281708431107902615560100979874281215533519862n; export const MAX_PROTOCOL_CONTRACTS = 7; export const CANONICAL_AUTH_REGISTRY_ADDRESS = 1; export const DEPLOYER_CONTRACT_ADDRESS = 2; @@ -408,4 +413,4 @@ export enum GeneratorIndex { SYMMETRIC_KEY_2 = 55, PUBLIC_TX_HASH = 56, PRIVATE_TX_HASH = 57, -} \ No newline at end of file +} diff --git a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts index 94c0041a9252..f55a9cffdc49 100644 --- a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts @@ -112,7 +112,6 @@ export class PrivateCircuitPublicInputs { public privateLogs: Tuple, /** * Hash of the contract class logs emitted in this function call. - * Note: Truncated to 31 bytes to fit in Fr. */ public contractClassLogsHashes: Tuple, /** diff --git a/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts b/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts index 6b86eec3a2c6..8b13ec45e115 100644 --- a/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts +++ b/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts @@ -1,9 +1,11 @@ -import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; +import { makeTuple } from '@aztec/foundation/array'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; import { type FieldsOf } from '@aztec/foundation/types'; -import { ARCHIVE_HEIGHT } from '../../constants.gen.js'; +import { ARCHIVE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX } from '../../constants.gen.js'; import { SpongeBlob } from '../blobs/sponge_blob.js'; +import { ContractClassLog } from '../contract_class_log.js'; import { MembershipWitness } from '../membership_witness.js'; import { PartialStateReference } from '../partial_state_reference.js'; import { PublicDataHint } from '../public_data_hint.js'; @@ -14,19 +16,30 @@ export type BaseRollupHints = PrivateBaseRollupHints | PublicBaseRollupHints; export class PrivateBaseRollupHints { constructor( - /** Partial state reference at the start of the rollup. */ + /** + * Partial state reference at the start of the rollup. + */ public start: PartialStateReference, - /** Sponge state to absorb blob inputs at the start of the rollup. */ + /** + * Sponge state to absorb blob inputs at the start of the rollup. + */ public startSpongeBlob: SpongeBlob, - /** Hints used while proving state diff validity. */ + /** + * Hints used while proving state diff validity. + */ public stateDiffHints: PrivateBaseStateDiffHints, - /** Public data read hint for accessing the balance of the fee payer. */ + /** + * Public data read hint for accessing the balance of the fee payer. + */ public feePayerFeeJuiceBalanceReadHint: PublicDataHint, - /** * Membership witnesses of blocks referred by each of the 2 kernels. */ public archiveRootMembershipWitness: MembershipWitness, + /** + * Preimages to the kernel's contractClassLogsHashes. + */ + public contractClassLogsPreimages: Tuple, /** * Data which is not modified by the base rollup circuit. */ @@ -44,6 +57,7 @@ export class PrivateBaseRollupHints { fields.stateDiffHints, fields.feePayerFeeJuiceBalanceReadHint, fields.archiveRootMembershipWitness, + fields.contractClassLogsPreimages, fields.constants, ] as const; } @@ -72,6 +86,7 @@ export class PrivateBaseRollupHints { reader.readObject(PrivateBaseStateDiffHints), reader.readObject(PublicDataHint), MembershipWitness.fromBuffer(reader, ARCHIVE_HEIGHT), + reader.readArray(MAX_CONTRACT_CLASS_LOGS_PER_TX, ContractClassLog), reader.readObject(ConstantRollupData), ); } @@ -87,6 +102,7 @@ export class PrivateBaseRollupHints { PrivateBaseStateDiffHints.empty(), PublicDataHint.empty(), MembershipWitness.empty(ARCHIVE_HEIGHT), + makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, ContractClassLog.empty), ConstantRollupData.empty(), ); } @@ -94,12 +110,18 @@ export class PrivateBaseRollupHints { export class PublicBaseRollupHints { constructor( - /** Sponge state to absorb blob inputs at the start of the rollup. */ + /** + * Sponge state to absorb blob inputs at the start of the rollup. + */ public startSpongeBlob: SpongeBlob, /** * Membership witnesses of blocks referred by each of the 2 kernels. */ public archiveRootMembershipWitness: MembershipWitness, + /** + * Preimages to the kernel's contractClassLogsHashes. + */ + public contractClassLogsPreimages: Tuple, /** * Data which is not modified by the base rollup circuit. */ @@ -111,7 +133,12 @@ export class PublicBaseRollupHints { } static getFields(fields: FieldsOf) { - return [fields.startSpongeBlob, fields.archiveRootMembershipWitness, fields.constants] as const; + return [ + fields.startSpongeBlob, + fields.archiveRootMembershipWitness, + fields.contractClassLogsPreimages, + fields.constants, + ] as const; } /** @@ -135,6 +162,7 @@ export class PublicBaseRollupHints { return new PublicBaseRollupHints( reader.readObject(SpongeBlob), MembershipWitness.fromBuffer(reader, ARCHIVE_HEIGHT), + reader.readArray(MAX_CONTRACT_CLASS_LOGS_PER_TX, ContractClassLog), reader.readObject(ConstantRollupData), ); } @@ -147,6 +175,7 @@ export class PublicBaseRollupHints { return new PublicBaseRollupHints( SpongeBlob.empty(), MembershipWitness.empty(ARCHIVE_HEIGHT), + makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, ContractClassLog.empty), ConstantRollupData.empty(), ); } diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index eaeeb3264387..f45924b8a532 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -25,6 +25,7 @@ import { AvmExecutionHints, BLOBS_PER_BLOCK, BaseParityInputs, + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, CallContext, CombinedConstantData, ContractStorageRead, @@ -126,6 +127,7 @@ import { AvmNullifierWriteTreeHint, AvmPublicDataReadTreeHint, AvmPublicDataWriteTreeHint, + ContractClassLog, CountedPublicCallRequest, PrivateLog, PrivateLogData, @@ -190,6 +192,11 @@ function makeNullifier(seed: number) { return new Nullifier(fr(seed), seed + 1, fr(seed + 2)); } +function makeContractClassLog(seed: number) { + // The '* 1' removes the 'Type instantiation is excessively deep and possibly infinite. ts(2589)' err + return new ContractClassLog(makeTuple(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS * 1, fr, seed)); +} + function makePrivateLog(seed: number) { return new PrivateLog(makeTuple(PRIVATE_LOG_SIZE_IN_FIELDS, fr, seed)); } @@ -1096,6 +1103,8 @@ function makePrivateBaseRollupHints(seed = 1) { const archiveRootMembershipWitness = makeMembershipWitness(ARCHIVE_HEIGHT, seed + 0x9000); + const contractClassLogsPreimages = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, makeContractClassLog, seed + 0x800); + const constants = makeConstantRollupData(0x100); const feePayerFeeJuiceBalanceReadHint = PublicDataHint.empty(); @@ -1104,9 +1113,10 @@ function makePrivateBaseRollupHints(seed = 1) { start, startSpongeBlob, stateDiffHints, + feePayerFeeJuiceBalanceReadHint, archiveRootMembershipWitness, + contractClassLogsPreimages, constants, - feePayerFeeJuiceBalanceReadHint, }); } @@ -1115,11 +1125,14 @@ function makePublicBaseRollupHints(seed = 1) { const archiveRootMembershipWitness = makeMembershipWitness(ARCHIVE_HEIGHT, seed + 0x9000); + const contractClassLogsPreimages = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, makeContractClassLog, seed + 0x800); + const constants = makeConstantRollupData(0x100); return PublicBaseRollupHints.from({ startSpongeBlob, archiveRootMembershipWitness, + contractClassLogsPreimages, constants, }); } diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts index 814332e3a417..e50b1f5dc644 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts @@ -7,7 +7,6 @@ import { type KeyValidationHint, KeyValidationRequest, KeyValidationRequestAndGenerator, - LogHash, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_TX, MAX_KEY_VALIDATION_REQUESTS_PER_TX, @@ -45,7 +44,6 @@ import { type ReadRequestStatus, RollupValidationRequests, ScopedKeyValidationRequestAndGenerator, - ScopedLogHash, ScopedNoteHash, ScopedNullifier, ScopedPrivateLogData, @@ -66,7 +64,6 @@ import type { KeyValidationHint as KeyValidationHintNoir, KeyValidationRequestAndGenerator as KeyValidationRequestAndGeneratorNoir, KeyValidationRequest as KeyValidationRequestsNoir, - LogHash as LogHashNoir, NoteHashLeafPreimage as NoteHashLeafPreimageNoir, NoteHash as NoteHashNoir, NoteHashReadRequestHints as NoteHashReadRequestHintsNoir, @@ -93,7 +90,6 @@ import type { ReadRequestStatus as ReadRequestStatusNoir, RollupValidationRequests as RollupValidationRequestsNoir, ScopedKeyValidationRequestAndGenerator as ScopedKeyValidationRequestAndGeneratorNoir, - ScopedLogHash as ScopedLogHashNoir, ScopedNoteHash as ScopedNoteHashNoir, ScopedNullifier as ScopedNullifierNoir, Scoped as ScopedPrivateLogDataNoir, diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts index 8ccdbd971d13..4ad2f83a89c2 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts @@ -6,6 +6,8 @@ import { type AvmCircuitPublicInputs, BLOBS_PER_BLOCK, type BaseParityInputs, + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + type ContractClassLog, Fr, HONK_VERIFICATION_KEY_LENGTH_IN_FIELDS, type MembershipWitness, @@ -55,7 +57,7 @@ import { type SingleTxBlockRootRollupInputs, } from '@aztec/circuits.js/rollup'; import { toHex } from '@aztec/foundation/bigint-buffer'; -import { mapTuple } from '@aztec/foundation/serialize'; +import { type Tuple, mapTuple } from '@aztec/foundation/serialize'; import type { AvmAccumulatedData as AvmAccumulatedDataNoir, @@ -76,6 +78,7 @@ import type { EmptyBlockRootRollupInputs as EmptyBlockRootRollupInputsNoir, FeeRecipient as FeeRecipientNoir, FixedLengthArray, + Log as LogNoir, MergeRollupInputs as MergeRollupInputsNoir, Field as NoirField, ParityPublicInputs as ParityPublicInputsNoir, @@ -297,6 +300,30 @@ export function mapBlockBlobPublicInputsFromNoir( ); } +/** + * Maps a contract class log to noir. + * @param log - The ts contract class log. + * @returns The noir contract class log. + */ +export function mapContractClassLogToNoir(log: ContractClassLog): LogNoir { + return { + // @ts-expect-error - below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' + fields: Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS }, (_, idx) => + mapFieldToNoir(log.fields[idx]), + ) as Tuple, + }; +} + +/** + * Maps a contract class log from noir. + * @param log - The noir contract class log. + * @returns The ts contract class log. + */ +export function mapContractClassLogFromNoir(log: LogNoir) { + // @ts-expect-error - below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' + return new ContractClassLog(mapTupleFromNoir(log.fields, log.fields.length, mapFieldFromNoir)); +} + function mapPublicDataHintToNoir(hint: PublicDataHint): PublicDataHintNoir { return { leaf_slot: mapFieldToNoir(hint.leafSlot), @@ -804,10 +831,10 @@ export function mapPrivateBaseRollupInputsToNoir(inputs: PrivateBaseRollupInputs start: mapPartialStateReferenceToNoir(inputs.hints.start), start_sponge_blob: mapSpongeBlobToNoir(inputs.hints.startSpongeBlob), state_diff_hints: mapPrivateBaseStateDiffHintsToNoir(inputs.hints.stateDiffHints), - + fee_payer_fee_juice_balance_read_hint: mapPublicDataHintToNoir(inputs.hints.feePayerFeeJuiceBalanceReadHint), archive_root_membership_witness: mapMembershipWitnessToNoir(inputs.hints.archiveRootMembershipWitness), + contract_class_logs_preimages: mapTuple(inputs.hints.contractClassLogsPreimages, mapContractClassLogToNoir), constants: mapConstantRollupDataToNoir(inputs.hints.constants), - fee_payer_fee_juice_balance_read_hint: mapPublicDataHintToNoir(inputs.hints.feePayerFeeJuiceBalanceReadHint), }; } @@ -840,8 +867,8 @@ export function mapPublicBaseRollupInputsToNoir(inputs: PublicBaseRollupInputs): tube_data: mapPublicTubeDataToNoir(inputs.tubeData), avm_proof_data: mapAvmProofDataToNoir(inputs.avmProofData), start_sponge_blob: mapSpongeBlobToNoir(inputs.hints.startSpongeBlob), - archive_root_membership_witness: mapMembershipWitnessToNoir(inputs.hints.archiveRootMembershipWitness), + contract_class_logs_preimages: mapTuple(inputs.hints.contractClassLogsPreimages, mapContractClassLogToNoir), constants: mapConstantRollupDataToNoir(inputs.hints.constants), }; } diff --git a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts index 03de06a137c1..328ee811ee42 100644 --- a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts +++ b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts @@ -12,8 +12,10 @@ import { AppendOnlyTreeSnapshot, BlockHeader, ContentCommitment, + ContractClassLog, Fr, type GlobalVariables, + MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MembershipWitness, @@ -140,6 +142,11 @@ export const buildBaseRollupHints = runInSpan( const inputSpongeBlob = startSpongeBlob.clone(); await startSpongeBlob.absorb(tx.txEffect.toBlobFields()); + const contractClassLogsPreimages = makeTuple( + MAX_CONTRACT_CLASS_LOGS_PER_TX, + i => tx.txEffect.contractClassLogs[i] || ContractClassLog.empty(), + ); + if (tx.avmProvingRequest) { const blockHash = await tx.constants.historicalHeader.hash(); const archiveRootMembershipWitness = await getMembershipWitnessFor( @@ -152,6 +159,7 @@ export const buildBaseRollupHints = runInSpan( return PublicBaseRollupHints.from({ startSpongeBlob: inputSpongeBlob, archiveRootMembershipWitness, + contractClassLogsPreimages, constants, }); } else { @@ -206,6 +214,7 @@ export const buildBaseRollupHints = runInSpan( stateDiffHints, feePayerFeeJuiceBalanceReadHint, archiveRootMembershipWitness, + contractClassLogsPreimages, constants, }); } diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index db1f7964cc94..b25f3003b988 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -332,7 +332,7 @@ export class ClientExecutionContext extends ViewDataOracle { */ public override emitContractClassLog(log: ContractClassLog, counter: number) { this.contractClassLogs.push(new CountedContractClassLog(log, counter)); - const text = log.toBuffer(); + const text = log.toBuffer().toString('hex'); this.log.verbose( `Emitted log from ContractClassRegisterer: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`, ); diff --git a/yarn-project/simulator/src/public/public_processor.ts b/yarn-project/simulator/src/public/public_processor.ts index fbef64d77418..96e53a471442 100644 --- a/yarn-project/simulator/src/public/public_processor.ts +++ b/yarn-project/simulator/src/public/public_processor.ts @@ -21,7 +21,6 @@ import { NULLIFIER_SUBTREE_HEIGHT, PublicDataWrite, } from '@aztec/circuits.js'; -import { siloContractClassLog } from '@aztec/circuits.js/hash'; import { padArrayEnd } from '@aztec/foundation/collection'; import { createLogger } from '@aztec/foundation/log'; import { type DateProvider, Timer, elapsed, executeTimeout } from '@aztec/foundation/timer'; From 03adfc7d0cb84fea89bc92f36ae8239b8e4a7a34 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Tue, 18 Feb 2025 12:02:21 +0000 Subject: [PATCH 03/21] chore: aaaa safety doc change again --- .../contracts/contract_class_registerer_contract/src/main.nr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index eee06327f5cb..da88372d4786 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -224,9 +224,9 @@ pub contract ContractClassRegisterer { // TODO(MW): use chunked poseidon if cheaper? Use variable poseidon with length of non-0 fields? let log_hash = std::hash::poseidon2::Poseidon2::hash(log_to_emit, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS); - /// Safety: TODO(MW): constraining below length in the base rollup. Is this good/safe? + // Safety: TODO(MW): constraining below length in the base rollup. Is this good/safe? let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; - /// Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. + // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. unsafe { emit_contract_class_unencrypted_log_private(contract_address, log_to_emit, counter); } From 6057a35a0634115846ef6dc7cca547e2143ac772 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Tue, 18 Feb 2025 12:09:52 +0000 Subject: [PATCH 04/21] chore: aaaa safety doc change again again --- .../noir-protocol-circuits/crates/types/src/utils/arrays.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr index 6fbc42e14200..f1e20ecb1422 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr @@ -126,7 +126,7 @@ pub fn validate_trailing_zeroes(array: [T; N]) -> u32 where T: Empty + Eq, { - /// Safety: this value is constrained in the below loop. + // Safety: this value is constrained in the below loop. let length = unsafe { find_index_hint_from_end(array, |elem: T| !is_empty(elem)) }; // Check the elt just before length is non-zero: if length != 0 { From cb739a21aca3719ba75b41f7a68cd268bd09f448 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Wed, 19 Feb 2025 09:57:26 +0000 Subject: [PATCH 05/21] feat: add cc log validation to tx --- .../tx_validator/data_validator.test.ts | 104 +++++++++++++++++- .../tx_validator/data_validator.ts | 49 ++++++++- 2 files changed, 149 insertions(+), 4 deletions(-) diff --git a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts index 8514685bd8cb..7afd648ab657 100644 --- a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts +++ b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts @@ -1,5 +1,12 @@ import { type Tx, mockTx } from '@aztec/circuit-types'; -import { AztecAddress, Fr, FunctionSelector } from '@aztec/circuits.js'; +import { + AztecAddress, + ContractClassLog, + Fr, + FunctionSelector, + MAX_CONTRACT_CLASS_LOGS_PER_TX, + ScopedLogHash, +} from '@aztec/circuits.js'; import { timesParallel } from '@aztec/foundation/collection'; import { DataTxValidator } from './data_validator.js'; @@ -13,6 +20,30 @@ const mockTxs = (numTxs: number) => }), ); +// Added separately to avoid slowing down test with large CC logs when not required. +const mockTxsWithCCLog = (numTxs: number) => + timesParallel(numTxs, async i => { + const tx = await mockTx(i, { + numberOfNonRevertiblePublicCallRequests: 2, + numberOfRevertiblePublicCallRequests: 2, + hasPublicTeardownCallRequest: true, + }); + const contractClassLogs = Array(MAX_CONTRACT_CLASS_LOGS_PER_TX).fill(0).map(ContractClassLog.random); + const logHashes = await Promise.all( + contractClassLogs.map(async l => + ScopedLogHash.fromFields([ + await l.hash(), + new Fr(i + 3), + new Fr(l.getEmittedLength()), + (await AztecAddress.random()).toField(), + ]), + ), + ); + tx.contractClassLogs.push(...contractClassLogs); + logHashes.forEach((hash, i) => (tx.data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[i] = hash)); + return tx; + }); + describe('TxDataValidator', () => { let validator: DataTxValidator; @@ -33,6 +64,8 @@ describe('TxDataValidator', () => { it('allows transactions with the correct data', async () => { const [tx] = await mockTxs(1); await expect(validator.validateTx(tx)).resolves.toEqual({ result: 'valid' }); + const [txWithLog] = await mockTxsWithCCLog(1); + await expect(validator.validateTx(txWithLog)).resolves.toEqual({ result: 'valid' }); }); it('rejects txs with mismatch non revertible execution requests', async () => { @@ -92,4 +125,73 @@ describe('TxDataValidator', () => { await expectInvalid(badTxs[0], 'Wrong number of execution requests for public calls'); await expectInvalid(badTxs[1], 'Wrong number of execution requests for public calls'); }); + + it('rejects txs with mismatch number of contract class logs', async () => { + const goodTxs = await mockTxsWithCCLog(3); + const badTxs = await mockTxsWithCCLog(2); + // Missing log hashes/log. + badTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[ + badTxs[0].contractClassLogs.length - 1 + ] = ScopedLogHash.empty(); + badTxs[1].contractClassLogs.pop(); + // Extra log hashes/log. + // Can uncomment below if MAX_CONTRACT_CLASS_LOGS_PER_TX > 1 and we do not fill a tx's logs in mockTxsWithCCLog: + // const extraLogHash = goodTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[0]; + // badTxs[2].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[badTxs[2].contractClassLogs.length] = extraLogHash; + // const extraLog = goodTxs[0].contractClassLogs[0]; + // badTxs[3].contractClassLogs.push(extraLog); + + await expectValid(goodTxs); + + await expectInvalid(badTxs[0], 'Mismatched number of contract class logs'); + await expectInvalid(badTxs[1], 'Mismatched number of contract class logs'); + }); + + // Can uncomment below if MAX_CONTRACT_CLASS_LOGS_PER_TX > 1: + // it('rejects txs with unsorted contract class logs', async () => { + // const goodTxs = await mockTxsWithCCLog(3); + // const badTxs = await mockTxsWithCCLog(2); + // // Unsorted logHash. + // badTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[1] = badTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[0]; + // badTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[0] = ScopedLogHash.empty(); + // // Unsorted log. + // badTxs[1].contractClassLogs[1] ? badTxs[1].contractClassLogs[1] = badTxs[1].contractClassLogs[0] : badTxs[1].contractClassLogs.push(badTxs[1].contractClassLogs[0]); + // badTxs[1].contractClassLogs[0] = ContractClassLog.empty(); + + // await expectValid(goodTxs); + + // await expectInvalid(badTxs[0], 'Incorrectly sorted contract class logs'); + // await expectInvalid(badTxs[1], 'Incorrectly sorted contract class logs'); + // }); + + it('rejects txs with mismatched contract class logs', async () => { + const goodTxs = await mockTxsWithCCLog(3); + const badTxs = await mockTxsWithCCLog(2); + + const badLogHash = badTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[0]; + badLogHash.logHash.value = badLogHash.value.add(Fr.ONE); + badTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[0] = badLogHash; + badTxs[1].contractClassLogs[0].fields[0] = badTxs[1].contractClassLogs[0].fields[0].add(Fr.ONE); + + await expectValid(goodTxs); + + await expectInvalid(badTxs[0], 'Mismatched contract class logs'); + await expectInvalid(badTxs[1], 'Mismatched contract class logs'); + }); + + it('rejects txs with mismatched contract class logs length', async () => { + const goodTxs = await mockTxsWithCCLog(3); + const badTxs = await mockTxsWithCCLog(2); + + badTxs[0].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[0].logHash.length += 1; + // Note: changing the raw log to be longer/shorter results in an incorrect hash, which throws first. + badTxs[1].contractClassLogs[0].fields[badTxs[1].contractClassLogs[0].getEmittedLength()] = Fr.ONE; + badTxs[1].data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes[0].logHash.value = + await badTxs[1].contractClassLogs[0].hash(); + + await expectValid(goodTxs); + + await expectInvalid(badTxs[0], 'Mismatched contract class logs length'); + await expectInvalid(badTxs[1], 'Mismatched contract class logs length'); + }); }); diff --git a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.ts b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.ts index 3c32ec5c8b1a..312e09a1270f 100644 --- a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.ts +++ b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.ts @@ -4,8 +4,10 @@ import { createLogger } from '@aztec/foundation/log'; export class DataTxValidator implements TxValidator { #log = createLogger('p2p:tx_validator:tx_data'); - validateTx(tx: Tx): Promise { - return this.#hasCorrectExecutionRequests(tx); + async validateTx(tx: Tx): Promise { + const execRequestRes = this.#hasCorrectExecutionRequests(tx); + // Note: If we ever skip txs here, must change this return statement to account for them. + return (await execRequestRes).result === 'invalid' ? execRequestRes : this.#hasCorrectContractClassLogs(tx); } async #hasCorrectExecutionRequests(tx: Tx): Promise { @@ -49,5 +51,46 @@ export class DataTxValidator implements TxValidator { return { result: 'valid' }; } - // TODO: Check logs. + async #hasCorrectContractClassLogs(tx: Tx): Promise { + const contractClassLogsHashes = tx.data.getNonEmptyContractClassLogsHashes(); + const hashedContractClasslogs = await Promise.all(tx.contractClassLogs.map(l => l.hash())); + if (contractClassLogsHashes.length !== hashedContractClasslogs.length) { + this.#log.warn( + `Rejecting tx ${Tx.getHash(tx)} because of mismatched number of contract class logs. Expected ${ + contractClassLogsHashes.length + }. Got ${hashedContractClasslogs.length}.`, + ); + return { result: 'invalid', reason: ['Mismatched number of contract class logs'] }; + } + for (const [i, logHash] of contractClassLogsHashes.entries()) { + const hashedLog = hashedContractClasslogs[i]; + if (!logHash.value.equals(hashedLog)) { + if (hashedContractClasslogs.some(l => logHash.value.equals(l))) { + const matchingLogIndex = hashedContractClasslogs.findIndex(l => logHash.value.equals(l)); + this.#log.warn( + `Rejecting tx ${Tx.getHash( + tx, + )} because of mismatched contract class logs indices. Expected ${i} from the kernel's log hashes. Got ${matchingLogIndex} in the tx.`, + ); + return { result: 'invalid', reason: ['Incorrectly sorted contract class logs'] }; + } else { + this.#log.warn( + `Rejecting tx ${Tx.getHash(tx)} because of mismatched contract class logs. Expected hash ${ + logHash.value + } from the kernels. Got ${hashedLog} in the tx.`, + ); + return { result: 'invalid', reason: ['Mismatched contract class logs'] }; + } + } + if (logHash.logHash.length !== tx.contractClassLogs[i].getEmittedLength()) { + this.#log.warn( + `Rejecting tx ${Tx.getHash(tx)} because of mismatched contract class logs length. Expected ${ + logHash.logHash.length + } from the kernel's log hashes. Got ${tx.contractClassLogs[i].getEmittedLength()} in the tx.`, + ); + return { result: 'invalid', reason: ['Mismatched contract class logs length'] }; + } + } + return { result: 'valid' }; + } } From b6d797a003b2d198fa8a3576b3b8805a19483c34 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Thu, 20 Feb 2025 20:29:56 +0000 Subject: [PATCH 06/21] chore: post merge fixes, fmt --- .../src/archiver/kv_archiver_store/log_store.ts | 6 +----- yarn-project/circuit-types/src/body.ts | 3 ++- yarn-project/circuit-types/src/tx/tx.ts | 1 + yarn-project/circuits.js/src/hash/hash.ts | 2 +- .../src/structs/contract_class_log.test.ts | 2 +- .../circuits.js/src/structs/contract_class_log.ts | 3 +-- .../src/structs/rollup/base_rollup_hints.ts | 6 +++--- .../src/conversion/client.ts | 2 -- .../tx_validator/data_validator.test.ts | 2 +- .../private_function_broadcasted_event.ts | 8 +++++--- .../unconstrained_function_broadcasted_event.ts | 6 +++++- yarn-project/simulator/src/acvm/oracle/oracle.ts | 2 +- .../src/client/client_execution_context.ts | 8 +------- .../src/public/public_tx_simulator.test.ts | 15 ++++++++------- 14 files changed, 31 insertions(+), 35 deletions(-) diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts index 87c0ffa70b9a..8fb20e12e6b7 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts @@ -9,11 +9,7 @@ import { TxScopedL2Log, } from '@aztec/circuit-types'; import { ContractClassLog, type Fr, PrivateLog, PublicLog } from '@aztec/circuits.js'; -import { - INITIAL_L2_BLOCK_NUM, - MAX_NOTE_HASHES_PER_TX, - PUBLIC_LOG_DATA_SIZE_IN_FIELDS, -} from '@aztec/constants'; +import { INITIAL_L2_BLOCK_NUM, MAX_NOTE_HASHES_PER_TX, PUBLIC_LOG_DATA_SIZE_IN_FIELDS } from '@aztec/constants'; import { createLogger } from '@aztec/foundation/log'; import { BufferReader, numToUInt32BE } from '@aztec/foundation/serialize'; import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store'; diff --git a/yarn-project/circuit-types/src/body.ts b/yarn-project/circuit-types/src/body.ts index e1289ca9e46b..9e03125e6e34 100644 --- a/yarn-project/circuit-types/src/body.ts +++ b/yarn-project/circuit-types/src/body.ts @@ -1,4 +1,5 @@ -import { BLOBS_PER_BLOCK, FIELDS_PER_BLOB, type Fr } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/circuits.js'; +import { BLOBS_PER_BLOCK, FIELDS_PER_BLOB } from '@aztec/constants'; import { timesParallel } from '@aztec/foundation/collection'; import { type ZodFor } from '@aztec/foundation/schemas'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; diff --git a/yarn-project/circuit-types/src/tx/tx.ts b/yarn-project/circuit-types/src/tx/tx.ts index fb2d8ad8c0fa..fff6ceea0ddc 100644 --- a/yarn-project/circuit-types/src/tx/tx.ts +++ b/yarn-project/circuit-types/src/tx/tx.ts @@ -1,4 +1,5 @@ import { ClientIvcProof, ContractClassLog, Fr, type GasSettings, PrivateLog, ScopedLogHash } from '@aztec/circuits.js'; +import { siloContractClassLog } from '@aztec/circuits.js/hash'; import { PrivateKernelTailCircuitPublicInputs } from '@aztec/circuits.js/kernel'; import { Buffer32 } from '@aztec/foundation/buffer'; import { arraySerializedSizeOfNonEmpty } from '@aztec/foundation/collection'; diff --git a/yarn-project/circuits.js/src/hash/hash.ts b/yarn-project/circuits.js/src/hash/hash.ts index 498432bec8bd..573aed1e7b57 100644 --- a/yarn-project/circuits.js/src/hash/hash.ts +++ b/yarn-project/circuits.js/src/hash/hash.ts @@ -2,8 +2,8 @@ import { GeneratorIndex } from '@aztec/constants'; import { poseidon2Hash, poseidon2HashWithSeparator, sha256Trunc } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { type ContractClassLog } from '../index.js'; import { type AztecAddress } from '../aztec-address/index.js'; +import { type ContractClassLog } from '../index.js'; import { type ScopedL2ToL1Message } from '../structs/l2_to_l1_message.js'; /** diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.test.ts b/yarn-project/circuits.js/src/structs/contract_class_log.test.ts index 6b845900433b..8c5fe9773706 100644 --- a/yarn-project/circuits.js/src/structs/contract_class_log.test.ts +++ b/yarn-project/circuits.js/src/structs/contract_class_log.test.ts @@ -1,6 +1,6 @@ +import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; -import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '../constants.gen.js'; import { ContractClassLog } from './contract_class_log.js'; describe('PublicLog', () => { diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.ts b/yarn-project/circuits.js/src/structs/contract_class_log.ts index fb5b87f64a89..5cc473c0914c 100644 --- a/yarn-project/circuits.js/src/structs/contract_class_log.ts +++ b/yarn-project/circuits.js/src/structs/contract_class_log.ts @@ -1,3 +1,4 @@ +import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; import { poseidon2Hash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { schemas } from '@aztec/foundation/schemas'; @@ -6,8 +7,6 @@ import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/ import { inspect } from 'util'; import { z } from 'zod'; -import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '../constants.gen.js'; - export class ContractClassLog { static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * CONTRACT_CLASS_LOG_SIZE_IN_FIELDS; diff --git a/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts b/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts index aa78f527dd81..009615796078 100644 --- a/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts +++ b/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts @@ -1,16 +1,16 @@ import { SpongeBlob } from '@aztec/blob-lib'; import { ARCHIVE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX } from '@aztec/constants'; -import { BufferReader, serializeToBuffer, type Tuple } from '@aztec/foundation/serialize'; +import { makeTuple } from '@aztec/foundation/array'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; import { MembershipWitness } from '@aztec/foundation/trees'; import { type FieldsOf } from '@aztec/foundation/types'; +import { ContractClassLog } from '../contract_class_log.js'; import { PartialStateReference } from '../partial_state_reference.js'; import { PublicDataHint } from '../public_data_hint.js'; import { ConstantRollupData } from './constant_rollup_data.js'; import { PrivateBaseStateDiffHints } from './state_diff_hints.js'; -import { ContractClassLog } from '../contract_class_log.js'; -import { makeTuple } from '@aztec/foundation/array'; export type BaseRollupHints = PrivateBaseRollupHints | PublicBaseRollupHints; diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts index 02c16133a3ab..951ec2d9944e 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/client.ts @@ -6,7 +6,6 @@ import { type KeyValidationHint, KeyValidationRequest, KeyValidationRequestAndGenerator, - LogHash, NoteHash, type NoteHashReadRequestHints, Nullifier, @@ -21,7 +20,6 @@ import { type ReadRequestStatus, RollupValidationRequests, ScopedKeyValidationRequestAndGenerator, - ScopedLogHash, ScopedNoteHash, ScopedNullifier, ScopedPrivateLogData, diff --git a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts index c16427285045..9a4e13fbeb52 100644 --- a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts +++ b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts @@ -1,7 +1,7 @@ -import { MAX_CONTRACT_CLASS_LOGS_PER_TX } from '@aztec/constants'; import { type Tx } from '@aztec/circuit-types'; import { mockTx } from '@aztec/circuit-types/testing'; import { AztecAddress, ContractClassLog, Fr, FunctionSelector, ScopedLogHash } from '@aztec/circuits.js'; +import { MAX_CONTRACT_CLASS_LOGS_PER_TX } from '@aztec/constants'; import { timesParallel } from '@aztec/foundation/collection'; import { DataTxValidator } from './data_validator.js'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts index afde140f4bc4..4240267924af 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts @@ -1,4 +1,8 @@ -import { ContractClassLog, type ExecutablePrivateFunctionWithMembershipProof, type PrivateFunction } from '@aztec/circuits.js'; +import { + ContractClassLog, + type ExecutablePrivateFunctionWithMembershipProof, + type PrivateFunction, +} from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/circuits.js/abi'; import { ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, @@ -8,8 +12,6 @@ import { import { Fr } from '@aztec/foundation/fields'; import { FieldReader, type Tuple } from '@aztec/foundation/serialize'; -import chunk from 'lodash.chunk'; - import { REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG } from '../protocol_contract_data.js'; /** Event emitted from the ContractClassRegisterer. */ diff --git a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts index 7e8a523091c3..efbcbd5b696e 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts @@ -1,4 +1,8 @@ -import { ContractClassLog, type UnconstrainedFunction, type UnconstrainedFunctionWithMembershipProof } from '@aztec/circuits.js'; +import { + ContractClassLog, + type UnconstrainedFunction, + type UnconstrainedFunctionWithMembershipProof, +} from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/circuits.js/abi'; import { ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index d837f40b2972..6ff1609c6aff 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -1,4 +1,5 @@ import { MerkleTreeId } from '@aztec/circuit-types'; +import { ContractClassLog } from '@aztec/circuits.js'; import { FunctionSelector, NoteSelector } from '@aztec/circuits.js/abi'; import { AztecAddress } from '@aztec/circuits.js/aztec-address'; import { LogWithTxData } from '@aztec/circuits.js/logs'; @@ -8,7 +9,6 @@ import { type ACVMField } from '../acvm_types.js'; import { frToBoolean, frToNumber, fromACVMField, fromBoundedVec } from '../deserialize.js'; import { toACVMField, toACVMFieldSingleOrArray } from '../serialize.js'; import { type TypedOracle } from './typed_oracle.js'; -import { ContractClassLog } from '@aztec/circuits.js'; /** * A data source that has all the apis required by Aztec.nr. diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index 5416eadc8696..6028da9e4f85 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -1,10 +1,4 @@ -import { - type AuthWitness, - type Capsule, - Note, - type NoteStatus, - PublicExecutionRequest, -} from '@aztec/circuit-types'; +import { type AuthWitness, type Capsule, Note, type NoteStatus, PublicExecutionRequest } from '@aztec/circuit-types'; import { type AztecNode, CountedContractClassLog, diff --git a/yarn-project/simulator/src/public/public_tx_simulator.test.ts b/yarn-project/simulator/src/public/public_tx_simulator.test.ts index de9f75d1d391..af3d7b6c6513 100644 --- a/yarn-project/simulator/src/public/public_tx_simulator.test.ts +++ b/yarn-project/simulator/src/public/public_tx_simulator.test.ts @@ -1,9 +1,4 @@ -import { - MerkleTreeId, - SimulationError, - type Tx, - TxExecutionPhase, -} from '@aztec/circuit-types'; +import { MerkleTreeId, SimulationError, type Tx, TxExecutionPhase } from '@aztec/circuit-types'; import { type MerkleTreeWriteOperations } from '@aztec/circuit-types/interfaces/server'; import { mockTx } from '@aztec/circuit-types/testing'; import { @@ -27,7 +22,13 @@ import { bufferAsFields } from '@aztec/circuits.js/abi'; import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; import { fr, makeContractClassPublic } from '@aztec/circuits.js/testing'; import { AppendOnlyTreeSnapshot, PublicDataTreeLeaf } from '@aztec/circuits.js/trees'; -import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, NULLIFIER_SUBTREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, REGISTERER_CONTRACT_ADDRESS, REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE } from '@aztec/constants'; +import { + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + NULLIFIER_SUBTREE_HEIGHT, + PUBLIC_DATA_TREE_HEIGHT, + REGISTERER_CONTRACT_ADDRESS, + REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE, +} from '@aztec/constants'; import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/lmdb'; import { type AppendOnlyTree, Poseidon, StandardTree, newTree } from '@aztec/merkle-tree'; From ccb7be7b93cf8d3157c93de1736b866a239b89d7 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Thu, 20 Feb 2025 20:41:30 +0000 Subject: [PATCH 07/21] chore: fixtures + more import fixing --- .../crates/rollup-base-private/Prover.toml | 3405 ++++++++++++++++- .../crates/rollup-base-public/Prover.toml | 332 +- .../src/conversion/server.ts | 2 +- 3 files changed, 3371 insertions(+), 368 deletions(-) diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml index 1c41881d47b7..000f92a44333 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml @@ -1,61 +1,57 @@ [inputs.tube_data.public_inputs.rollup_validation_requests.max_block_number._opt] _is_some = true -_value = "0x0000000000000000000000000000000000000000000000000000000000000e16" +_value = "0x0000000000000000000000000000000000000000000000000000000000000e18" [inputs.tube_data.public_inputs.constants] -vk_tree_root = "0x1644418d6d00aefd0815a5576611abd0bf6f4770a2a2d6b5356808aac5245292" -protocol_contract_tree_root = "0x02dae744a60621d793d9f228e36975aec8ab5cdc963876aad4a3767866b1fd65" +vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" +protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" [inputs.tube_data.public_inputs.constants.historical_header] - total_fees = "0x0000000000000000000000000000000000000000000000000000021ff53c53cc" - total_mana_used = "0x000000000000000000000000000000000000000000000000000000000003dea9" + total_fees = "0x000000000000000000000000000000000000000000000000000000155eefcdb0" + total_mana_used = "0x00000000000000000000000000000000000000000000000000000000000153e8" [inputs.tube_data.public_inputs.constants.historical_header.last_archive] - root = "0x05b3bb5109d47ed6719879aaf4064be70759479be53c4e77aef08be7de6ed42c" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000006" + root = "0x27161676d92b225929dee06caca9400464216b76997721c55099edd5b6f683a2" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" [inputs.tube_data.public_inputs.constants.historical_header.content_commitment] num_txs = "0x0000000000000000000000000000000000000000000000000000000000000001" - blobs_hash = "0x008f59895cfcbae4d2c4235f44091341c26560b47821e99d39e2e208b8b844b3" + blobs_hash = "0x00d6718a08ac14832224a9c0bcc5a0a2f53dae924597125600a6259920b4c6d9" in_hash = "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c" out_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.state.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000060" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000080" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.note_hash_tree] -root = "0x0887b34d5f375a58a62bd1ff4652387c631157b2a6dede7ca0a43cc8cdf07d92" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000180" - -[inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x040941eb6ab29e9509bfeb0ee4760284aa10b9361ccc18269f1e52647b7e8f89" +root = "0x0c6f98c15c29695735f6a22a729888d3114f0252b1d66242acced08d9e0ed4fb" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x2b7fab0d9e8927bcb7f81824553454e36ce4daafb7bc8e3cca78fe746eec4feb" +root = "0x239d307a6faa52f0470e2cb9519be33e1df24b4c2f0429278f981dff5db15cab" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.public_data_tree] -root = "0x2798b6a996d1e50d16ca17964d07b47bffe461d51db772e326bf5ad11641dd29" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000099" +root = "0x22705a0d0403f1b82ba7f499c5a2781140cb7374b47deca79b8ae71028a8c7ed" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000006" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000009" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b6ec12" + block_number = "0x0000000000000000000000000000000000000000000000000000000000000008" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000013" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b794c2" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.coinbase] - inner = "0x000000000000000000000000eb6355a62d6434cf7ece9a27ea91a2167604d246" + inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000008c90ec" + fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000010186e" [inputs.tube_data.public_inputs.constants.tx_context] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" @@ -71,7 +67,7 @@ l2_gas = "0x00000000000000000000000000000000000000000000000000000000005b8d80" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" -fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000001876ad" +fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000099363" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_priority_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -79,8 +75,8 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 [inputs.tube_data.public_inputs.end] note_hashes = [ - "0x00db699b6ce5a3c347fc31d3fdcf7ce503f1c0cdd564d7c5a390cf9743d9ebe6", - "0x26e95ebb84436a6c21798c702c79ef16e23e228b6fc70bbc89dee917b1e7ede7", + "0x12de6d858a6a1783dd3f6725a50b0bd002e6315ebc8b9755cf40ee7354acfa37", + "0x27b861229665cad0edbe89912d906eb310c0ea6ee31d69470a4c1372ab553c14", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -145,8 +141,8 @@ note_hashes = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x184f3bf785d39454d7995bd1df11f4f92b3d9fd6506e2ab432ee97fbd7f9d433", - "0x020cb29dbc3790c26f7a86a99742c0e3f8aa1b2bb2692d289e944a09a2afaf13", + "0x008422e430e0292fdc60d6107747c6fd6fcb199ae8f045f9c5a2c6061d25948c", + "0x1766afe960d1233064c3d2526af69bcf42a8c56020360572d39d2ae467dea2de", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -301,68 +297,68 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x26589d73da5dee22c9df099e58037059c86acf84541616650673660395484188", - "0x037ed5e707ec4a34b350858a04a251cfa0868a973ed67d4e8ad0b80aef8502f0", - "0x0001337f0c443ce86ed1d10fdb67d25c8fa1a9bf01e2b051a9b418b300b66f45", - "0x009eaa43a94ba937a306f5ce60dee84a7eaed39f81484869fba1b0567676fe9a", - "0x005236f415c7cc506020508262bb29bb6e9333612a1342d88f81571452d77ff4", - "0x007185acffbe25fd449a0f7e8593709929227ecc88013c6bcdce6b9321043448", - "0x00bafc2f35b80fb89534162d7d249912951a646fd50754a19214bbb4d85b7b73", - "0x00f86cf3f6960b037589fd7a58f956e720f14873d0cea2abd026d0b2401b332e", - "0x007892d4489227b87b208021e9895d3922558ee0ffe6a6109c38d87575d917ec", - "0x008bf4aecb8f40ccf81456f9f23f52181212b51331dcbdb1238e0ee4e4e01c35", - "0x219eef374dc22fe55ced93fc8601dc5a48c4d575a248f4010ed183b2cf00fee8", - "0x27bfe9e85f898008e603bab40255bfda17d14251e8ad46d21416d93800e3ac29", - "0x260b843a0128a2fa9fb36ad99da5600cd67a7d9008454f92dfc2dcba8c2139d5", - "0x165f66ed4af7625985e5cf8c70b366c4d5ef072ee793cd34ae2c772a8094532c", - "0x100d612848a26bfccf050084d70ecc2a0cfca4c0f9d2271af477d6ee0b060332", - "0x2a93fb61364567a40a9a21c30746b23bef63d2b15aa3677a7f8e5b44eb660255", - "0x29ed78c9307bf7e44ee16e83385899b26648a472d767c8a1e86af04512e8ef69", - "0x1f0f5953cb04edd64cbb2a729f8da7428297a2d05407ee3c689bb7c090b56e61" + "0x22df547f56d80ab2bfe256889c1bfbdb152f7367de76d7e0c9b0b4a535a00b7b", + "0x1ba956cb225838049c5affa8a6229c10388dfbf76cf347e4a763ce7b2886fb87", + "0x000022b9a7c54d949265b4d3e81ee6d0af8d3c1060b83a9af8212ec389eb7186", + "0x00ef7f82cc7ed94cbfca62903fc429171f9e1c0c1eeba0a9675ffb67a69e7ca4", + "0x008bdf173b2fa59bfc638e09b6d732ed1f73f22b58146d048b4a2fcd8fe67d79", + "0x00bcbd457feae2628efb6dc7c7ce556e06b6de862c96b5d97dc6bbf17fed120a", + "0x00ecfe10afd438a5543967e0cb51e4cea3766ae8480482d358350f41f811d950", + "0x00ff6daabcdfffb407232fcc859e8ceba9057ba7fd3b1cd4fe9d87dc6630a22e", + "0x00fa1fa163314236fd2402c477ee5407287f7b844883d9ce1b7266876ef75d33", + "0x00e245efdcc1c72d484a8b39e108ea95e94ff455a12615cfed77aea726640c26", + "0x0ddb45f0343080e3f0a6feafef79148eed637fa52c5a81fe3874a17a16749c47", + "0x0c83f5c9f5ca94fb287c0c32b3ee16bd7beeb91e4eba560f379bf08d5b0f51b2", + "0x11ff349fdc8e5b0f91239f6bdd4dec2b134d9b7a4a14252b766a721b36acdb93", + "0x2066090512826a3b0ff32224bddc887132c93e7124e7bc89036e0027cce6e641", + "0x0fbf812f976cd51ba6f92524739d5583d2f6158d39373c3d69bcbf225dc2d271", + "0x008310e1246b14c2a2798699ee16508ec41db032139ccc4ca74298a4b531d429", + "0x235236f39c3054a5b4f99c221e6446fcd2065ed9e8830eb4c779f7c1f3d2b2ba", + "0x0cbdaf584cdb170998dcbe35fec67eb1eb7db332f33e2331e25f9a42de319167" ] [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x24195139d894da41089d11879a330988e4f0e97bdf185bcae8fabbf0d110139c", - "0x06791a018413b9f35ea527a44dfb48500659f92d633a59279174b81e331aaac5", - "0x00019333db70672b88972fa509e34b6b8e98bc2846958d3b63def714892efac7", - "0x001955de1ab02816acf5402c59057cfe9657cf84b4a8295e5cc2dc70be604969", - "0x00d81eb05be1c246145445c15a8c145a3c51da8b176223455493e87d4f87cace", - "0x0064779cc12fea7138fce38d999b2b8bdf73c904613f391b60f68eff664dbc4b", - "0x00bbc1a27dba543bbcc9818b617af49e194cfa9b1e6238ecc50a5ba9b22959c8", - "0x000d7544045fb54cb0b3b219b3cbf05e33643a014675f85b81c6bed5a4cb3e04", - "0x00be99de065c2cc3ef119abee1753413f22608e0231ed5092fe2c7d3779b4d76", - "0x00869e117b1e35f5feb6aaae8e00e1464bba4cacf849fdc482f65b938eb605cb", - "0x175401ec60fc1d8ae93a2965e9693e5c10f44e7040e7abc7a96f4c7558313007", - "0x2d22c530ea47499be87859a08dc0ac57827ded0a870e4ba7d3f93569f9c3150f", - "0x2223d28e397409d6011339d38e89c42c3683e18177c323c73c69dacefaef9241", - "0x0b3483e8a084baa91a91b82884335ce111653335d042b35bfdaa864e2991fa0d", - "0x299e8d73adadc52f1d695c94039b1c53bb322aa76a493b0b8f536040c88adb83", - "0x03a70c64ae7df165a4383c3a7c033adf848f5f982c1b85568969672654c4a966", - "0x121ffd31eee933b0b37617fce97988e05138c72a1f6ab7645eb475b8fab0f017", - "0x0863fdaa9cfa12237b87adc6f701ceacc37e1010ae467e20b8c4bace200f0359" + "0x1a159586fc1dc75411f945007ff8620114c8a0134e6a29ae362bf6260eb80635", + "0x21e27120ceccbf0b0c66aac21eb4fec7ac0ed4e30deaf9073aaef169a8c408ea", + "0x000110da86606192b671aad427827dfd163e28bb3cc1c9a2a05d7c43fb7a4b3a", + "0x00cd80ce426aeb576ddaec6b0c18438142ab6b22e12412f5794349eec912f1fc", + "0x0001fba6665c3ddc00d20f63ba2fafcdad665ac472dd39c0aa2ba91fc92ce4b8", + "0x005f7ccba88c901e571ea233d149cead9ea0e1c547f426a1cd569c850e236fe2", + "0x00b1b258f84c672af93c82647a86f4285bab1684beef9bd029a2ed5c519d2922", + "0x00a41b5db427104be9d6da20f2200d9fce39cc160f5ad788f0da587471da1c20", + "0x00b8f1b9f8fb1f86bd77032468fad06d84288e8c3d7a44ea5c63f9d72ba05ffe", + "0x00fe2c37c7b4d9c058a802eb059f31b8feeb2cb832c86321a18cba98ca043b41", + "0x0cdf2cfd2365235375ddb921a998b88331d3d62f522b09d07bd0da33934d210b", + "0x038d9198ced408df4399d3d5e52109c3b20b99723fc8b6c40104bf42cf371811", + "0x2f15dd901c48671dd7bae33b24f63f5f9d880420e4cdef300afc99fa123e4693", + "0x1e60a6b8405c5643882a9d3f605c7656d85ecb5b685840edab352da386fc013b", + "0x26c9e3ac0a0607036753f5fcab70f2cdbfd1f3d901da8b89f1880a40739d0699", + "0x06f5ca0ed09530ea8f72ae62413850970e0c3f9ef88b65c39b6c86652acca9cc", + "0x0b70e8a33d7d410d7819f34531d55d2889da4737392799b21e8028075c023cd3", + "0x05cfe0280c52de03be93c51a93ffb56a6b2c3c6d680d8bccacde7a634182a37d" ] [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x17bc978f3d29f17efaa1dd0991f0e608c309b1e2f4ab4c8e4e6af0ed136edeec", - "0x05dd6282c227ca264b4443dd0c8ce8a9e06065b20658d4488c203fe65231a4f6", - "0x0000c134d60a9f72fae2d43648b24d0e049ae533f9a2b363e2322f82d48f1941", - "0x00c724ff5c44a81d1adee6d3072d31d28cc8f47a5a397875a124051d19febaf6", - "0x00d1d43e40ead24f86e5713e7433e2d983c9cd72728d6f8a202537dc86c1219c", - "0x0072203d7e94c0ccecd02d239db3bf395f55283cd779a080eb85194723555900", - "0x0093c0108f72c6097a74e333eafaf5001a8ac89a224c4887e134ec5913dded82", - "0x00df582dd5420b314a5ae5d845dd6ffe415971802e8adcc32e32879ba122fe69", - "0x006fb8a84355e84dc7612d8b93d2cd17433fdf7e208a42e10ffae0350b5b4bdb", - "0x00c7ebf808bb90eb2be9684dd5c390b1849dce272eb39a5b32bd3d10b7d4fef6", - "0x0ffafa18fa5909844eb22f9a273abf5ebe7150c6258031e710121de1970018f1", - "0x2f1c41fd7cbf6ce297d122bb2dd309e3177d70a9c1e1d6b3ed208a9f1c7d8481", - "0x2bff32fbf584257ccd38b4b991dbb650440dea579dcb12128426f63f2c0cd0f9", - "0x2dd7e272968c958677a7dda900e0953b688b47cd41597501d6bdb493d7a23765", - "0x2fe6bf2bdec0f052fdbd30f5bd0c8456440d93a2fbd2fd13393b725ccbd0e606", - "0x211d4655cae041043790231627093e697ed3512322466388da3697d4f8f0ce0b", - "0x0e85f506b4749a82cd120bbdb6db84da9aca96f52f944c1cd21112ab954c56dc", - "0x09c7e2643dfa84045fcd3d9ca39cf466ee42286d1467cd9c49f3382a0407bf5a" + "0x2cc4fa5438a3e8e1633ed965d92625f0338f5ab7403cc906734ef8a992fe45e6", + "0x18a9ed56a6ff667f0830f34f0cfc7e1dd8ba97c8a30864b9fb30cdf8647a0618", + "0x000095bfeecb801de33089ac7c8cbc9ce54516562cc93f91246ff5b690f07721", + "0x009e3b7243c6f23bbc042d8c35f6386d2a188de72a6064fcdba5485a49e35b47", + "0x0075282b73128274047df2eb0961d68a2c26b7c4105e69e3d46b026d7b8284f0", + "0x00e9a9b877c5fae838da9ca668a7628245bec031802b7c9cc144a2d6ae3e6f6f", + "0x009d05212e31de755371dba1f1e803429b145b82cf09c46345c3d6c79dd1aba0", + "0x007298a91f92ec52f1f1f0ace90bbfa90d158c8c74df50361385357a0a92ca17", + "0x000cd5f0b9610ae4c8d2f8673c28e65b0997fe6f94fd6c1bbd3a30c415237581", + "0x00ace76b98649797416f83e63ace9c553b5233e69545068119b786841d420700", + "0x2b81b760508596550defc196bfbb12550e7824c9521ac15a3c6af41d1b5aa6cc", + "0x0047de735ff606c33bd975fba377260dac5dae63f4e6ff39e82e90d49a5c1ad6", + "0x2b25c720294c41c5beb58866e72e8e3de8eeeec69eaeb4fb7676f20051ca1fcc", + "0x118a24c3857a2943d5ec1553ef2f830cea0aaf2d11109a0f72e60d7853a45557", + "0x13dda13724fe599d73d809bda8fc76b985c7bd9bcb6e62062fcbb1c4f2e3a5d8", + "0x1f25548a16ed23d85ccf2abc312f14aafa677c4c2819885d714db934cc6f8fde", + "0x207bd9d961e9114cee69eb9b083e5d4f4a5983f8fe3e0f1b018a62f37e160633", + "0x1cb0064e7ca85fb0ff678a9063248a02dc3be160b5d46db524b91328c5dbdf65" ] [[inputs.tube_data.public_inputs.end.private_logs]] @@ -1017,7 +1013,7 @@ da_gas = "0x0000000000000000000000000000000000000000000000000000000000007600" l2_gas = "0x0000000000000000000000000000000000000000000000000000000000004a40" [inputs.tube_data.public_inputs.fee_payer] -inner = "0x1c37466c1edf1ec26e28b0978459d3c3337b8d88e25eacfb3b37687cd08d27b1" +inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" [inputs.tube_data.proof] fields = [ @@ -1565,11 +1561,11 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000004" vk_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x300dfcf0fdabe41c19a8366c83b938a27643a7c476365a16acc449dc553d65d7", - "0x2abbc11ecc9be914ffe5155d3573cd0706f814c18423a01073220dfdcffc256d", + "0x2797e6c657b9b195bb0069d39f05c408c1227dde200db71822defa3b92d83b64", + "0x1c388d7cbc55931f9d8e14a98495d9dcdf1af8cc4dedadd56c6a2ccd1b9c7b2f", "0x0d12417a9fee854bb7973bca4cd76ac021dd6df8c8bb9b63e19025c50d20cbf7", - "0x2d05b00a4513f805540187f563c1c879c324eb574a24fa0f10aa7217ee031ab0", - "0x26dba2f0cdb03057adb82271d309491b5af2606e89aa7fbe9bf82340064f52a7" + "0x1f1a86b74593ad4cca631e97bcd2831e6f5e1187ef61b5085d36f92f3540947c", + "0x0a9319e1a9dff433c5259a48d4c7ec512bb61605c4972d4155f67ad6933d8a9e" ] [inputs.tube_data.vk_data.vk] @@ -1717,20 +1713,16 @@ vk_path = [ hash = "0x0000000000000000000000000000000000000000000000000000000000000002" [inputs.start.note_hash_tree] -root = "0x0887b34d5f375a58a62bd1ff4652387c631157b2a6dede7ca0a43cc8cdf07d92" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000180" - -[inputs.start.nullifier_tree] -root = "0x040941eb6ab29e9509bfeb0ee4760284aa10b9361ccc18269f1e52647b7e8f89" +root = "0x0c6f98c15c29695735f6a22a729888d3114f0252b1d66242acced08d9e0ed4fb" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.start.nullifier_tree] -root = "0x2b7fab0d9e8927bcb7f81824553454e36ce4daafb7bc8e3cca78fe746eec4feb" +root = "0x239d307a6faa52f0470e2cb9519be33e1df24b4c2f0429278f981dff5db15cab" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.start.public_data_tree] -root = "0x2798b6a996d1e50d16ca17964d07b47bffe461d51db772e326bf5ad11641dd29" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000099" +root = "0x22705a0d0403f1b82ba7f499c5a2781140cb7374b47deca79b8ae71028a8c7ed" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.start_sponge_blob] fields = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -1753,8 +1745,8 @@ expected_fields = "0x00000000000000000000000000000000000000000000000000000000000 [inputs.state_diff_hints] sorted_nullifiers = [ - "0x184f3bf785d39454d7995bd1df11f4f92b3d9fd6506e2ab432ee97fbd7f9d433", - "0x020cb29dbc3790c26f7a86a99742c0e3f8aa1b2bb2692d289e944a09a2afaf13", + "0x1766afe960d1233064c3d2526af69bcf42a8c56020360572d39d2ae467dea2de", + "0x008422e430e0292fdc60d6107747c6fd6fcb199ae8f045f9c5a2c6061d25948c", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1819,8 +1811,8 @@ sorted_nullifiers = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] sorted_nullifier_indexes = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000004", @@ -1886,9 +1878,9 @@ sorted_nullifier_indexes = [ ] note_hash_subtree_sibling_path = [ "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x17aae8b30b1aa58f3bb50160e3a6c96c741c21b1fe4d6070d3a7575c3e7b7a4f", - "0x061db51c1d946e90a96e4e6c64f6f82316598bd6a27d049d1d132f39d0ce44dd", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", + "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", + "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", + "0x1d2a7aca7c5e29462d3adf839ccc4839dae3184dfc96f35e6cd49fe9c3986de1", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -1922,9 +1914,9 @@ note_hash_subtree_sibling_path = [ ] nullifier_subtree_sibling_path = [ "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x19c31078929326e529b17eb08c4176f63746041cf94ff8cbc9fa6e74a6c343fd", + "0x1f9fdc83fb0fa48fbbd64e8efa95d971bb79622eb8d5092eb440e1bbc4dfa1af", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x294f4b968a7abf36526c7019e79719c9bafdf8ab911fa564a9eff32cce81b28b", + "0x2508a37546412fe7977222b4336978367298cb3c0ad4e6469dfc6f26d35cd55c", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -2000,14 +1992,14 @@ fee_write_sibling_path = [ ] [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x178a357b6130edb31d9359d9aec67aec701925fdebcbae7ee54bccfb86a7b925" - next_nullifier = "0x1fbb20ef6d9e3499bbbbe372e35baf9cd6d2bad2cc362c5e04589979367633f8" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000142" + nullifier = "0x15f7b90b69f6ee6e50139771f8ce29a5b46133ec98104f928de9f644bd0ec930" + next_nullifier = "0x1dc71479cd9f5b5da03dbda8f528b23330553b90d7e4383f7276ddce7bcf0c98" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000140" [[inputs.state_diff_hints.nullifier_predecessor_preimages]] nullifier = "0x000000000000000000000000000000000000000000000000000000000000007f" - next_nullifier = "0x097aa57f45d013dac39d7e199a150f90c1026c043ad5e9d33d04e5457cc815a4" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000143" + next_nullifier = "0x018af9d4902139029bc804a90756b951711e39d7bf831c73539234323ad28ce9" + next_index = "0x00000000000000000000000000000000000000000000000000000000000000c1" [[inputs.state_diff_hints.nullifier_predecessor_preimages]] nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -2320,18 +2312,18 @@ fee_write_sibling_path = [ next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "257" + leaf_index = "322" sibling_path = [ - "0x02b0805ad4a95a4bf84c68e3f651b11fdf1450f35de0c7f7dca1cd7fdea9a871", - "0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1", + "0x147da40ba01971d5047ee443928b49eeba940cdf37f5c264db4f77a46c3d01fa", + "0x26f35db1e335f43a2f97b9f7460d82c1156343df28d409d4a4f71e414c9d5c63", "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x18c7a1dd59c584cf6b3bef01672286840aa425d59046a50385680dbcb0dc2bb9", - "0x1c752e7f9623e6c29603acd1e97392f90274946f5414bb78f90fe20aaea4fef6", - "0x02b7dd5b6976c36767dee81df1817123e1aefc08ace292e589d4964a904e4e6f", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", + "0x0ffa105677a3e8dbf90804fcccb1c230423cc759fed35e9f3f1aeeb6cedaf7b7", + "0x24d774a3c7dbbc1d9bdff185a3a1ca60c5ab7650e4b21421b3c573d572cad147", + "0x0d7200aaf41176939b8bd4074ec526f3fdccab2437e31679c5aa038e91aa4cf8", + "0x11f7cf6186b575199f1de60647b32ab3592821830a2e1e2a033af44963dc1d0e", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -2374,9 +2366,9 @@ fee_write_sibling_path = [ "0x135c2d2dc15a5acc7b43b89aaba27718b5f575df9413618552a3a1b3121c8bee", "0x28b8fd8b9d61fbe4b1c0a05c6313d3ea28b715a5c2ddab3a4f9d127c27dc6b9f", "0x169afc20aaa33427f6a9f136203922bf52f1107285f5696611645b6b55df8561", - "0x129fe0c2b21fe9185f2410052c19054be59a738aaf975801cedb3990e2c93392", - "0x02b7dd5b6976c36767dee81df1817123e1aefc08ace292e589d4964a904e4e6f", - "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", + "0x234629c74a65325c9743684ed8427482343f3cb59cf58d89980e808aece3255e", + "0x0cafa551c8e6f0da03f2cd15bb4f47061ac469840caa0f28b7d53514553415fb", + "0x11f7cf6186b575199f1de60647b32ab3592821830a2e1e2a033af44963dc1d0e", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -5200,22 +5192,22 @@ fee_write_sibling_path = [ ] [inputs.state_diff_hints.fee_write_low_leaf_preimage] - slot = "0x212fe0a872a019b69b20f11ec9f1db0ab15582b2be40c2d3121ce427f59cb1d9" - value = "0x00000000000000000000000000000000000000000000021e19e0bbd49d3781a4" - next_slot = "0x22468d1a8ac127fa5ca21e0f673fe7f40b1a49b05b37ce9a694e04ed8fba2d4c" - next_index = "0x000000000000000000000000000000000000000000000000000000000000007c" + slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" + value = "0x00000000000000000000000000000000000000000000021e19e0c22d44092f74" + next_slot = "0x2143f955eff636e7ea7967e3566bd55f74a9f21320db8016584b73ede579da27" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000089" [inputs.state_diff_hints.fee_write_low_leaf_membership_witness] - leaf_index = "123" + leaf_index = "125" sibling_path = [ - "0x0f9efbe645edd6c0f0af8637a32bf4a917223fa76482a9ee65497996bf73c52e", - "0x2538a61d3ee8d426319836531cbcb145bbcf3742b069f138998fb0d96e0fc787", - "0x0852bffa7491ff623bf08bc4e4909c87b4e7f31fae72252309867807f804280d", - "0x18adce341b4fa996f7174fef584e3aa3fbc0876bf475578a6d756dfc8e428143", + "0x0ceb7bc0b4bc0caf07b3d6a7f743910111c6ce277f9c7951760ad75467eabe1e", + "0x2556bcc00621278836547b90fb5d3a075c28624334a44bd27bd8cbc75204cf38", + "0x2eb6deb858934362b7585eda32a592487b2b2da844071616ae605359abf8199e", + "0x0ec3152c87960f28e18697a5ed6b5e314df6ec1e07c015c6be21cfb8400eb83f", "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", - "0x0a29c59fe9932a0e372ab905871bdd2b8c6374e19bc968e23067da027b7d8254", + "0x229ce3db4db7dfb5612cd56eece855d62131843b5183f1f0496db891c2a766e2", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5250,17 +5242,21 @@ fee_write_sibling_path = [ "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" ] -[inputs.archive_root_membership_witness] -leaf_index = "6" -sibling_path = [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x1b310091f25556247eb686f4fa27ebf50817b1980ff90a77ba5d283c88170d52", - "0x2dba3cd55f4dd5ce5cd321cf0c231b55b86ff019ae0451bbf37fc3da836b9cdb", - "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", - "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", - "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", +[inputs.fee_payer_fee_juice_balance_read_hint] +leaf_slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" +value = "0x00000000000000000000000000000000000000000000021e19e0c22d44092f74" + + [inputs.fee_payer_fee_juice_balance_read_hint.membership_witness] + leaf_index = "125" + sibling_path = [ + "0x0ceb7bc0b4bc0caf07b3d6a7f743910111c6ce277f9c7951760ad75467eabe1e", + "0x2556bcc00621278836547b90fb5d3a075c28624334a44bd27bd8cbc75204cf38", + "0x2eb6deb858934362b7585eda32a592487b2b2da844071616ae605359abf8199e", + "0x0ec3152c87960f28e18697a5ed6b5e314df6ec1e07c015c6be21cfb8400eb83f", + "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", + "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", + "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", + "0x229ce3db4db7dfb5612cd56eece855d62131843b5183f1f0496db891c2a766e2", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5281,49 +5277,37 @@ sibling_path = [ "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f" + "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", + "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", + "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", + "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", + "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", + "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", + "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", + "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", + "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", + "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", + "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", + "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" ] -[inputs.constants] -vk_tree_root = "0x1644418d6d00aefd0815a5576611abd0bf6f4770a2a2d6b5356808aac5245292" -protocol_contract_tree_root = "0x02dae744a60621d793d9f228e36975aec8ab5cdc963876aad4a3767866b1fd65" - - [inputs.constants.last_archive] - root = "0x0ae35faca3d8b308facdb8f4c29356dc01ea670dad43eb630b01ad61beaf6d74" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000007" - - [inputs.constants.global_variables] - chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000007" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000012" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b6ecea" - - [inputs.constants.global_variables.coinbase] - inner = "0x000000000000000000000000eb6355a62d6434cf7ece9a27ea91a2167604d246" - - [inputs.constants.global_variables.fee_recipient] - inner = "0x0000000000000000000000000000000000000000000000000000000000000000" - - [inputs.constants.global_variables.gas_fees] - fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000104f1e" - -[inputs.fee_payer_fee_juice_balance_read_hint] -leaf_slot = "0x212fe0a872a019b69b20f11ec9f1db0ab15582b2be40c2d3121ce427f59cb1d9" -value = "0x00000000000000000000000000000000000000000000021e19e0bbd49d3781a4" + [inputs.fee_payer_fee_juice_balance_read_hint.leaf_preimage] + slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" + value = "0x00000000000000000000000000000000000000000000021e19e0c22d44092f74" + next_slot = "0x2143f955eff636e7ea7967e3566bd55f74a9f21320db8016584b73ede579da27" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000089" - [inputs.fee_payer_fee_juice_balance_read_hint.membership_witness] - leaf_index = "123" - sibling_path = [ - "0x0f9efbe645edd6c0f0af8637a32bf4a917223fa76482a9ee65497996bf73c52e", - "0x2538a61d3ee8d426319836531cbcb145bbcf3742b069f138998fb0d96e0fc787", - "0x0852bffa7491ff623bf08bc4e4909c87b4e7f31fae72252309867807f804280d", - "0x18adce341b4fa996f7174fef584e3aa3fbc0876bf475578a6d756dfc8e428143", - "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", - "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", - "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", - "0x0a29c59fe9932a0e372ab905871bdd2b8c6374e19bc968e23067da027b7d8254", +[inputs.archive_root_membership_witness] +leaf_index = "8" +sibling_path = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1", + "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", + "0x133e7ead0a424929dd37c25d5e07e6edb14c13deba22fcb5bbb2faf73f540da9", + "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", + "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", + "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", + "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5344,22 +5328,3053 @@ value = "0x00000000000000000000000000000000000000000000021e19e0bbd49d3781a4" "0x09244eec34977ff795fc41036996ce974136377f521ac8eb9e04642d204783d2", "0x1646d6f544ec36df9dc41f778a7ef1690a53c730b501471b6acd202194a7e8e9", "0x064769603ba3f6c41f664d266ecb9a3a0f6567cd3e48b40f34d4894ee4c361b3", - "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f", - "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c", - "0x0c08da612363088ad0bbc78abd233e8ace4c05a56fdabdd5e5e9b05e428bdaee", - "0x14748d0241710ef47f54b931ac5a58082b1d56b0f0c30d55fb71a6e8c9a6be14", - "0x0b59baa35b9dc267744f0ccb4e3b0255c1fc512460d91130c6bc19fb2668568d", - "0x2c45bb0c3d5bc1dc98e0baef09ff46d18c1a451e724f41c2b675549bb5c80e59", - "0x121468e6710bf1ffec6d0f26743afe6f88ef55dab40b83ca0a39bc44b196374c", - "0x2042c32c823a7440ceb6c342f9125f1fe426b02c527cd8fb28c85d02b705e759", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0f55a0d491a9da093eb999fa0dffaf904620cbc78d07e63c6f795c5c7512b523", - "0x21849764e1aa64b83a69e39d27eedaec2a8f97066e5ddb74634ffdb11388dd9a", - "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" + "0x1595bb3cd19f84619dc2e368175a88d8627a7439eda9397202cdb1167531fd3f" ] - [inputs.fee_payer_fee_juice_balance_read_hint.leaf_preimage] - slot = "0x212fe0a872a019b69b20f11ec9f1db0ab15582b2be40c2d3121ce427f59cb1d9" - value = "0x00000000000000000000000000000000000000000000021e19e0bbd49d3781a4" - next_slot = "0x22468d1a8ac127fa5ca21e0f673fe7f40b1a49b05b37ce9a694e04ed8fba2d4c" - next_index = "0x000000000000000000000000000000000000000000000000000000000000007c" +[[inputs.contract_class_logs_preimages]] +fields = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" +] + +[inputs.constants] +vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" +protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" + + [inputs.constants.last_archive] + root = "0x228897df6f3083a823a7476f16fe0c6cf2546f6d496926422ec49761fe8c8574" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" + + [inputs.constants.global_variables] + chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" + version = "0x0000000000000000000000000000000000000000000000000000000000000001" + block_number = "0x0000000000000000000000000000000000000000000000000000000000000009" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000022" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b7962a" + + [inputs.constants.global_variables.coinbase] + inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" + + [inputs.constants.global_variables.fee_recipient] + inner = "0x0000000000000000000000000000000000000000000000000000000000000000" + + [inputs.constants.global_variables.gas_fees] + fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" + fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000066242" diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml index 7587a7d3bf3b..4a23548d9287 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml @@ -1,57 +1,53 @@ [inputs.tube_data.public_inputs.constants] -vk_tree_root = "0x1644418d6d00aefd0815a5576611abd0bf6f4770a2a2d6b5356808aac5245292" -protocol_contract_tree_root = "0x02dae744a60621d793d9f228e36975aec8ab5cdc963876aad4a3767866b1fd65" +vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" +protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" [inputs.tube_data.public_inputs.constants.historical_header] - total_fees = "0x0000000000000000000000000000000000000000000000000000021ff53c53cc" - total_mana_used = "0x000000000000000000000000000000000000000000000000000000000003dea9" + total_fees = "0x000000000000000000000000000000000000000000000000000000155eefcdb0" + total_mana_used = "0x00000000000000000000000000000000000000000000000000000000000153e8" [inputs.tube_data.public_inputs.constants.historical_header.last_archive] - root = "0x05b3bb5109d47ed6719879aaf4064be70759479be53c4e77aef08be7de6ed42c" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000006" + root = "0x27161676d92b225929dee06caca9400464216b76997721c55099edd5b6f683a2" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" [inputs.tube_data.public_inputs.constants.historical_header.content_commitment] num_txs = "0x0000000000000000000000000000000000000000000000000000000000000001" - blobs_hash = "0x008f59895cfcbae4d2c4235f44091341c26560b47821e99d39e2e208b8b844b3" + blobs_hash = "0x00d6718a08ac14832224a9c0bcc5a0a2f53dae924597125600a6259920b4c6d9" in_hash = "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c" out_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.state.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000060" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000080" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.note_hash_tree] -root = "0x0887b34d5f375a58a62bd1ff4652387c631157b2a6dede7ca0a43cc8cdf07d92" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000180" - -[inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x040941eb6ab29e9509bfeb0ee4760284aa10b9361ccc18269f1e52647b7e8f89" +root = "0x0c6f98c15c29695735f6a22a729888d3114f0252b1d66242acced08d9e0ed4fb" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x2b7fab0d9e8927bcb7f81824553454e36ce4daafb7bc8e3cca78fe746eec4feb" +root = "0x239d307a6faa52f0470e2cb9519be33e1df24b4c2f0429278f981dff5db15cab" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.public_data_tree] -root = "0x2798b6a996d1e50d16ca17964d07b47bffe461d51db772e326bf5ad11641dd29" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000099" +root = "0x22705a0d0403f1b82ba7f499c5a2781140cb7374b47deca79b8ae71028a8c7ed" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000006" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000009" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b6ec12" + block_number = "0x0000000000000000000000000000000000000000000000000000000000000008" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000013" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b794c2" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.coinbase] - inner = "0x000000000000000000000000eb6355a62d6434cf7ece9a27ea91a2167604d246" + inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000008c90ec" + fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000010186e" [inputs.tube_data.public_inputs.constants.tx_context] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" @@ -67,7 +63,7 @@ l2_gas = "0x00000000000000000000000000000000000000000000000000000000005b8d80" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" -fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000001876ad" +fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000099363" [inputs.tube_data.public_inputs.constants.tx_context.gas_settings.max_priority_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -75,7 +71,7 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 [inputs.tube_data.public_inputs.rollup_validation_requests.max_block_number._opt] _is_some = true -_value = "0x0000000000000000000000000000000000000000000000000000000000000e16" +_value = "0x0000000000000000000000000000000000000000000000000000000000000e18" [inputs.tube_data.public_inputs.non_revertible_accumulated_data] note_hashes = [ @@ -145,7 +141,7 @@ note_hashes = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x23e774b35ac450d2a3e1c5a28597d2ff21091b7369ee896482cbb43543f9f1ae", + "0x2923eb13b13500f805ab805be994063f84b326cd9750b42bf4fcab80af825556", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2365,13 +2361,13 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests]] is_static_call = false - args_hash = "0x265ab05f0a96a4a7844d9fa8e01d6347a26af6d02d74a40e20b54ca02c5e5d77" + args_hash = "0x22d48e09ae5c282c241e69f6bc9fe273ddcf9e199ffe05205411fb751b5920ab" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.msg_sender] - inner = "0x1c37466c1edf1ec26e28b0978459d3c3337b8d88e25eacfb3b37687cd08d27b1" + inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.contract_address] - inner = "0x1ba22c36a8f0d810f76d8abd5600129314cdd9777fc4ff0a6e241210824f1f17" + inner = "0x0c493b4d8b238330babd743196fb680b6d6aa775b75b1056227edd39e56eccd4" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.function_selector] inner = "0x00000000000000000000000000000000000000000000000000000000d5441b0d" @@ -2797,7 +2793,7 @@ da_gas = "0x0000000000000000000000000000000000000000000000000000000000000400" l2_gas = "0x0000000000000000000000000000000000000000000000000000000000006500" [inputs.tube_data.public_inputs.fee_payer] -inner = "0x1c37466c1edf1ec26e28b0978459d3c3337b8d88e25eacfb3b37687cd08d27b1" +inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" [inputs.tube_data.proof] fields = [ @@ -3345,11 +3341,11 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000004" vk_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x300dfcf0fdabe41c19a8366c83b938a27643a7c476365a16acc449dc553d65d7", - "0x2abbc11ecc9be914ffe5155d3573cd0706f814c18423a01073220dfdcffc256d", + "0x2797e6c657b9b195bb0069d39f05c408c1227dde200db71822defa3b92d83b64", + "0x1c388d7cbc55931f9d8e14a98495d9dcdf1af8cc4dedadd56c6a2ccd1b9c7b2f", "0x0d12417a9fee854bb7973bca4cd76ac021dd6df8c8bb9b63e19025c50d20cbf7", - "0x2d05b00a4513f805540187f563c1c879c324eb574a24fa0f10aa7217ee031ab0", - "0x26dba2f0cdb03057adb82271d309491b5af2606e89aa7fbe9bf82340064f52a7" + "0x1f1a86b74593ad4cca631e97bcd2831e6f5e1187ef61b5085d36f92f3540947c", + "0x0a9319e1a9dff433c5259a48d4c7ec512bb61605c4972d4155f67ad6933d8a9e" ] [inputs.tube_data.vk_data.vk] @@ -3497,44 +3493,40 @@ vk_path = [ hash = "0x0000000000000000000000000000000000000000000000000000000000000002" [inputs.avm_proof_data.public_inputs] -transaction_fee = "0x0000000000000000000000000000000000000000000000000000000897344820" +transaction_fee = "0x00000000000000000000000000000000000000000000000000000003dc59b700" reverted = false [inputs.avm_proof_data.public_inputs.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000009" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000014" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b6ed1a" + block_number = "0x000000000000000000000000000000000000000000000000000000000000000b" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000024" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b7965a" [inputs.avm_proof_data.public_inputs.global_variables.coinbase] - inner = "0x000000000000000000000000eb6355a62d6434cf7ece9a27ea91a2167604d246" + inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" [inputs.avm_proof_data.public_inputs.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.avm_proof_data.public_inputs.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000067854" + fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000002e860" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000080" +next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000000a0" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.note_hash_tree] -root = "0x1aceafa7fbf307e7f6e883c742a0058a18b641810293d44026139c6fac910c7d" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" - -[inputs.avm_proof_data.public_inputs.start_tree_snapshots.nullifier_tree] -root = "0x22281fb51972f8257db5d2371b7761f102f7eb4d326b2afb47459687cb6e1a9e" +root = "0x23f057812ef3aa6af61121c15454de28ee18e2982aab64173d02e2bb5e789e08" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000300" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.nullifier_tree] -root = "0x2b9cabacb1a001911d20f1dabfe7cbdde8e5a80a852574504c1d666c05d2c3cb" +root = "0x105d1065ad5760ef43de17c634f779677fb04c1185866e21d9283b0f0cd7d361" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000380" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.public_data_tree] -root = "0x2cb1a13b25c0cc2ff4de645f59bfb29296d2e396e3e236b7ec7deb9b1166da1f" +root = "0x2755d6668ea6db7661ffc0ec952f8b69fd1e3397fef9fb6a9eafeff9147325bc" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.avm_proof_data.public_inputs.start_gas_used] @@ -3551,14 +3543,14 @@ l2_gas = "0x00000000000000000000000000000000000000000000000000000000005b8d80" [inputs.avm_proof_data.public_inputs.gas_settings.max_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" -fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000001876ad" +fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000099363" [inputs.avm_proof_data.public_inputs.gas_settings.max_priority_fees_per_gas] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.avm_proof_data.public_inputs.fee_payer] - inner = "0x1c37466c1edf1ec26e28b0978459d3c3337b8d88e25eacfb3b37687cd08d27b1" + inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" [[inputs.avm_proof_data.public_inputs.public_setup_call_requests]] is_static_call = false @@ -3978,13 +3970,13 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 [[inputs.avm_proof_data.public_inputs.public_app_logic_call_requests]] is_static_call = false - args_hash = "0x265ab05f0a96a4a7844d9fa8e01d6347a26af6d02d74a40e20b54ca02c5e5d77" + args_hash = "0x22d48e09ae5c282c241e69f6bc9fe273ddcf9e199ffe05205411fb751b5920ab" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.msg_sender] - inner = "0x1c37466c1edf1ec26e28b0978459d3c3337b8d88e25eacfb3b37687cd08d27b1" + inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.contract_address] - inner = "0x1ba22c36a8f0d810f76d8abd5600129314cdd9777fc4ff0a6e241210824f1f17" + inner = "0x0c493b4d8b238330babd743196fb680b6d6aa775b75b1056227edd39e56eccd4" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.function_selector] inner = "0x00000000000000000000000000000000000000000000000000000000d5441b0d" @@ -4483,7 +4475,7 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x23e774b35ac450d2a3e1c5a28597d2ff21091b7369ee896482cbb43543f9f1ae", + "0x2923eb13b13500f805ab805be994063f84b326cd9750b42bf4fcab80af825556", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4861,22 +4853,18 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.l1_to_l2_message_tree] root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000080" +next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000000a0" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.note_hash_tree] -root = "0x1aceafa7fbf307e7f6e883c742a0058a18b641810293d44026139c6fac910c7d" -next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000002c0" - -[inputs.avm_proof_data.public_inputs.end_tree_snapshots.nullifier_tree] -root = "0x23abf98a13d205e04be129067b10f3ea93350b91270158bdea1b3d636f316010" +root = "0x23f057812ef3aa6af61121c15454de28ee18e2982aab64173d02e2bb5e789e08" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000340" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.nullifier_tree] -root = "0x0d0844fe80f1a15d905dffac63c95e143489ddc0357beee2d635a1ad87440ef7" +root = "0x1d9a5390c3eb4e13baf9154a78d70927b40b61c071e1019139c92de366f0ff2d" next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000003c0" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.public_data_tree] -root = "0x1c8a5fe67f9013042a75c426a6b24c7f35929ace61396b5c82e7d7da23e3f0b4" +root = "0x1cc0f2f6aa2b24bbc845c25846e176fed49871146c8a191898a01ea2dbcbb632" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.avm_proof_data.public_inputs.end_gas_used] @@ -4951,7 +4939,7 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x23e774b35ac450d2a3e1c5a28597d2ff21091b7369ee896482cbb43543f9f1ae", + "0x2923eb13b13500f805ab805be994063f84b326cd9750b42bf4fcab80af825556", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5274,16 +5262,16 @@ fields = [ ] [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x0928749370556e745f6e1c3fe59fe0dad30d60e56d4bd1d19ef866a752c383df" - value = "0x0000000000000000000000000000000000000000000000000000000000001f40" + leaf_slot = "0x0e94969977013720e63fca32a7b45df66faae6e9d14d798f872ba2e18300def1" + value = "0x0000000000000000000000000000000000000000000000000000000000001c20" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x1226347a21faacc3aa3a632d28792c91ed8200f544741805651bdd2da5e141b9" - value = "0x00000000000000000000000000000000000000000000000000000000000007d0" + leaf_slot = "0x2c6834c0fbb4b0e8f57416ad662fd8db020e6d4b006900fb21a9554c82711be8" + value = "0x0000000000000000000000000000000000000000000000000000000000000af0" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x212fe0a872a019b69b20f11ec9f1db0ab15582b2be40c2d3121ce427f59cb1d9" - value = "0x00000000000000000000000000000000000000000000021e19e0bba35ff221e0" + leaf_slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" + value = "0x00000000000000000000000000000000000000000000021e19e0c2197e759cd8" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] leaf_slot = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -9691,103 +9679,103 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000005" vk_path = [ "0x27dbd017f63a5339a96cbc9ab86dc2b137d7c0ed488f2ea3e33424d7a44562c3", - "0x300dfcf0fdabe41c19a8366c83b938a27643a7c476365a16acc449dc553d65d7", - "0x2abbc11ecc9be914ffe5155d3573cd0706f814c18423a01073220dfdcffc256d", + "0x2797e6c657b9b195bb0069d39f05c408c1227dde200db71822defa3b92d83b64", + "0x1c388d7cbc55931f9d8e14a98495d9dcdf1af8cc4dedadd56c6a2ccd1b9c7b2f", "0x0d12417a9fee854bb7973bca4cd76ac021dd6df8c8bb9b63e19025c50d20cbf7", - "0x2d05b00a4513f805540187f563c1c879c324eb574a24fa0f10aa7217ee031ab0", - "0x26dba2f0cdb03057adb82271d309491b5af2606e89aa7fbe9bf82340064f52a7" + "0x1f1a86b74593ad4cca631e97bcd2831e6f5e1187ef61b5085d36f92f3540947c", + "0x0a9319e1a9dff433c5259a48d4c7ec512bb61605c4972d4155f67ad6933d8a9e" ] [inputs.avm_proof_data.vk_data.vk] key = [ - "0x2e1213ef1d0845cce0bf3b2422b883c72da46114bc1abaec0e49498e0fe0e097", - "0x145503a3aa111bb4ddd37b54cae906cd6cfd9ae0d777a12091ddbb7563171e24", - "0x26f0861a4aab57a4fdc58d11ac15b23de0e928833484f4ca31248c9fa8365a0c", - "0x07a63db16507c02a4cfa17fc46a650b2a828e0e1876f9b8304540c6f0974ea47", - "0x2afba3b2404cbc51ae97b53de939d4e70eff38fdcc530e926ede6d9f71de6deb", - "0x248e6a9b4983a55ae473661e4cb47dbc49710f3484de3321ade8e953addfceea", - "0x30524d97fa9aba67a3b5f6d9206e8ef271d8d339d5382867afd28c32f919e5f4", - "0x1c8e6ed6c3f301deb2d326c993e7e890eca874a76a22a9e0fd6f08e919590da1", - "0x08e9199be6803df02c511a70e6270d26263e956491a764e2e773528c6239159b", - "0x0479754f760ce24717750fa491e3f6980603578be4e20e624613ee52f3b680ec", - "0x0158258a83bf576329049f219c2643971757177b05d31147e79687d77e60b8ff", - "0x2724b0ff36cb9583afec4c83a108f84915165b9964eade2a29c417c632fed29c", - "0x234ac16fc0921cae2b4c8787305c64ac53556ebb66fd45ed55c2187b830d2fd6", - "0x139014516207a8baec491a1e72dab973b83cf966ea084e79034eb4c29d0d8ab6", - "0x08c40bae30d83b111d12064429b0e2ae4b4b0aa6c89a7606af776bf85ae2beca", - "0x2146c36a3ec5e01f81946c4a524eedc15ca01c108cd7a2e301070f4178c254e6", - "0x0f6b04f18050f59a03264419c23f4c8c4d79a8195c045a5ad60f18609d25ab06", - "0x1f5157645cacb13d443fe66ce8208960cddb39e03612244af8bd57a88d1557e3", - "0x12843c427a9926004974b71167214268213e53f79682d8bcbf9e30fab5eda613", - "0x04e4b188d3560482bcfef940adf6575c23b23bf7d571ad282aea113578ef839f", - "0x08072146aadaeec553f7ab2778a1df77ec63a1d975e27a7f0d0b54441099e651", - "0x134a62af5dcf5eca54382296836f711e43ac3728576af21e9232c5c04e7176f5", - "0x22ecde4047c69d71cc8ec5bbc4515c87a3d94a73a95105204ab48671b7d17d0c", - "0x21ed2d2e08d52a43d7755daf536ef2e053552a0b331ec0a3094d0e44d3b728b5", - "0x1ff4cc88b2dc600b41f39b1112b093581715f00151f006cdaa79d9e616140d75", - "0x161dd9306cc15bb2ecb4772dbaab86ec51cc07e67edbd9199b373d119e09945a", - "0x0e449b8de0ae2294eff85ccb2de6d6e8085540d127e540b5b734723fd2dc7452", - "0x2e9ff66a46b46254377a72ae853f741182c888441d7d2602a345653e7974348f", - "0x12261c096d6eb00cb3f61856759ed0ad72f24f7d7c7667d21b8ad966facdcab6", - "0x244ab9cbb4d98eca120f4f7b91974ec40cb5b2df9042133c732081f387bef1aa", - "0x04696e2c6779210abc048ff06e03762c836415be9cbdb1f933ec92cdbcdf018b", - "0x0ab7e7ff4b6aab0f1493462706d14c017ee12e0e9aef661f5b1b202637226622", - "0x26244a3033e4c70d900139dd95493dd0ba9a2b54d1d07a98579fe4e35c0695eb", - "0x1cd7d67b3563d8d6bea721f2658b1efc79866dac3459dd64e3bdd61f13179f5b", - "0x18d68e5ac4a9c924012662a08fe6a94d86ad087e0fc9c2ee47b4af3cdf355768", - "0x07ed16f17be4c927ee5fd54545b25616a64a2fbfdb34280a3d5e5cabcb070f33", - "0x29ed2f2cd50f907f0d6c50583f46e75b717fa83174e06bbd8d1b055f44e951d7", - "0x1a849d3330d42327d0cf49f97f50e27c9a5c6cabeb2e9053a4b86acc7f904ce2", - "0x1ff55886ffea719491e0b2a0cd3f87bd7118ced9fc986162878574e31df3d924", - "0x054ee7c3d9a76955716b0a53f1f0919e1bed2887b786de2a1849c22b0d5f6f71", - "0x0fe839daca4af2b5690359010a42b226c8993e89f7976c3c41784a689b670f07", - "0x11d05f03a714adca3b640417fc5e396d1a6a16816c7980e9fb10037871e7e969", - "0x15eb0c9dab1fce8935f5622d429d56c5b2ae6d012cead62807b193a6b26e4fb3", - "0x1c416653c6642fd58f3502403262f7fb6b39b59f483a0d7a518b9a5306c3b3d4", - "0x0d89686248723a0a81dd77c8a472e5f2bc780174d684c4b37d12863f54aa9f12", - "0x1a9ed96636a8672a4a0ffa9046163b42d516cb04b32ff61e1af7a185da208e15", - "0x04f93bf5d0440620fa8ac9cedd24d27be55f14394b84ab8ca3bda91111f6af68", - "0x16fe1210701d8d41fd3ec0658a734ecb7dedc957d5bcd3bb6ccebf5109989361", - "0x09c1be99fc3cd72beaa001edfd0a4fe6184ad090a31c3edfca2b4c10b129cb2a", - "0x0f9ff78ec6df9a39174888f606b4de728b2f5b170548aae34c502c2face4335b", - "0x2e3cfa1c3bacd8949b012250a7638dcf917ae87bab6e454a34f3c7aba899f2ed", - "0x1a2e3df65e99b8a9b38f844868f4cb30b54372889c59c8c230ac8a36312495e1", - "0x090088b4e5eaa0c88fe437fa3663f49dc229354a55d8e4f16ed6ddf5f72956fa", - "0x157f2e7c3703d586a3133286d416e6ec0322b673624896c905c76d0396ccf103", - "0x29866f6884ba3c19d7afebcf264db8fb0f858d922d57a42c03cdd23657d0ae00", - "0x20a16fcecef99924b535e20aaf895c5972111520a4c509c29c2e2eb4564fde13", - "0x1e769d2f35140d73b1e10ee2028bff893940766df86341069abec7aa44b2d3f6", - "0x1f3290cd35a0a3e28b089f18594630928d7220455441690146d3583699d551be", - "0x17b434bcd25d347d03f279b4798e126c657b2aa5f62387ac6540ff18d8965b4f", - "0x181dfe9e51bd10b7cb1b18cdb6dc386f0297d7df915c970b7b5c62a2aec9d5e1", - "0x0c933459f3cd0ab9727d0da38db3eb001b9b5ebde0d8f6216e4f214e8c72d2bb", - "0x1e103b3f13b0ac37941adc300b04d98eae0a66c4bc1598e2d09192be36281df2", - "0x229bc3c00a795fa585a5b055e6334bbf76de0fce961682e6d185916d3b89784a", - "0x1abb3a389a14b80a27fce0e195b107fe94fcb56ed95fd84e5901243e7004f013", - "0x05fcbf203aaceceef1de1b0227f8ec02c3fbca3c75716773c21c65461cd23d3d", - "0x06fc58fec3cd4ddf5fd2b309fb1991faa8e5669472b2e286ad7036252f3468e2", - "0x0e4f48222622eef8361a6c4c6e1dfaee96d3c25de49419dcef791d259b470faa", - "0x12e9f8bd1813b215af56fb40bdc25d8242bb95e98c54b611ee84763dac4e27bc", - "0x1bfd238420b1cb01aacf4e10a9b0c3d219979c20baca5275d317dfc3dbf26429", - "0x078ac6d5c144a771c2f096dd7b3063738110cb58653c43ca54ced69f434e7b37", - "0x2301c2bcab9aad26e924cfa4cae5d00b0a64adbb9858c2780167be0eb58f9fbc", - "0x1e07d34d20f1008c0493fed165d9007f33775fdc24f013e81fde653589a7fa9e", - "0x1ea71b5a552641646a6a057bdac3f4fdbd9089787eab9f9f6677d2c435a74535", - "0x1e563baee360d9aa66c86191f83d7f11f3b4b09153f796757ba70287653da4a4", - "0x2c7812575ab95ae46582715d4fc1700e653a067d13ee5398c6aedbf545623e08", - "0x2367955710d34c6318a582191eda8b5c20ee9ee8614c0b391808b4c660aeab25", - "0x1985a30067f45a4d52fcc54c8ad4d12d617e9afd834fe45bab428e539c359d7d", - "0x13c46b7400fd7c81931151b7e5631f49022b1ef4285516ad2cfa25eabad9d840", - "0x234edb6bf6cbf12a1e1f90f337f6b414481c73f1d22b0f391012fa9fc44e4aff", - "0x08cc5f2324ed9e678a91b382edd792a7043202ade163c45c662ab5752fee8dd6", - "0x1374ea38aa52eacb81e41bb3574c0e4d560587303d7cdb10c73ed78f50f59bfd", - "0x001401e26c9d903bd7d2b24ee228da82030b2674a3caf83e5900b4fc7db6efa2", - "0x0b650d1b1b5ae4a8be13bb25619b7b16938d7f2750aad66b5ade028e74f8604c", - "0x2324f4a8396ea3554317706070c84805889a5d332922ed1d4ba6c353f12b1ab9", - "0x1f0b94fca8d818413d7c5a7e82d20016d02ffa259160af992d78feda41af0763", - "0x1df57613ff0e097aeb5a27a072c65243eb79cb21ac630160471b51f5d37cf88d" + "0x0814b289a7d0a135110c5f7ba3d8eaf58552ad27eef294c8a463f5d46113f376", + "0x1fc43c7a35cc2b24eecc69afc35b426fb2e151d1c07158fcfe141d1b2c681d46", + "0x1fd1c91d39cb2cb106f1dcf9ab67ef713421a35cc42c93bfadd1c7ed6d3d1118", + "0x27aa94bb12e2bef658cd8bcd9a4a2dbe7f67e8a14a17cd40d30dcace1f8aebb7", + "0x05a491c73281f83fe89472f3ad9353ad92e7748114c013e5bd9f87e5dbd0b7f5", + "0x0f8c0945750257ed54dd3863c1d4571136b6d9ea9e5f5918ac65cb04f85ea658", + "0x06656140c1c9fe9b8f3478ecbdfbf82c6ea4165cfd886ed248d6978d608cea69", + "0x0e038a4ce2c3aa1c10c1307b289d78b1bcb190d658c31bf56779a20f60dc44eb", + "0x1e60268681c7f1e7d574fb0229db43992359c6d1b0d463236388c11c315e2b88", + "0x037f4ace38b225a999ac88934f327e2e13666b82bfa43a01324f9bd2246c28c6", + "0x155402a179a2d5fbb77ff81d985dd146a5e550b436c8a3d704f46406cb5e78e7", + "0x1cd245a0db5ff25432ab89cf6b7240cf0c36524aceb9bdc8d6bbeadd4ed535cc", + "0x27a37efde28a12bfdb89af0d01825649da6e76b4e467d3e82451193cfb401dfc", + "0x1ad5c2f4ecb770229861bec5ccbd5a78e20189db045d7feb98d532d08c0ddd75", + "0x2a23288612cbe1571426e84692203e32ff89771d733cf8908e2c9439bbf91539", + "0x0ffa99bfcd21b4993de637d9643ffb86b14d94f3383bfde7e5d6da50614f3370", + "0x05fc2802ecaa5e0349773f7ad1aac6b62a12fa2452b01f89800908f10fe51d93", + "0x1ea47509ea5c053919c0bf34f3262b3ced796ad3492b71fa95a7cfe4d139bc69", + "0x2ede16449b699a470e3678fe6d1855d927f2a2b7e74830b30bad2ca43996f7ea", + "0x24a9ebc1a1ec464a0d032a6ed4c4754b82c41a38be2a35b7e63fcdd762b82d05", + "0x17f1a6c6f428f69fd3b79f14f7f3fa6a9d433fd25e0623b838d97d262443675e", + "0x1e7d62d2ecfe78e4fe399f5830f4cb710377990e789d22b407f1fe138c40b600", + "0x2228b71e37545438aa66802c5f7979572b3904296819323b3b71e0d35931f3c8", + "0x29783a2087da567874d40d69eb911d109ed1319a35d58cc26c19ba137de920c7", + "0x2dee4afd3183ffa84cdc76324ce1eb02d9f05eb33a79e6e04078d7b8b9a67959", + "0x1b8ecef4a8aea26caf6d3ef7141d7565b5bdfed3f360fdc60b26952a994826f0", + "0x13b065e237a9f8dcab9ec2b5a573a0afdce29e69b4bc1dca68d5fa67d2c6e0d6", + "0x122b082f43f012df5d6c4806ac54e1000136b45bd276b73adbfd038e7e03b082", + "0x137d9fc5eadacfc55350a7511f7e0ad129895207fc6d9749f684340819c5332a", + "0x0b294cf54ab56bf1c7f5ed23a4cc804c3fc4140dee8717253a780a18e30b5da2", + "0x1720f3883657ac29a8bf32fb6db4793407e4d2e5d3dd96f7c0fd07e1fbcc1929", + "0x0b515243a8478a785d685e17ddb541f7653486fd9e41b079bf1b2ca308ced89d", + "0x2712c53076bf97e7c701e11984df4163ac09f8280f626f566bc84c4e9d1793cd", + "0x112888a9035daf20b17802aa09eba0074449023751d63d13ce8bae1932f0ffd5", + "0x25edb3bc7e88b8970ded47a0b73ea703e06a196c994bee02a2928aae949912d1", + "0x22ad1d8e4b1738f231151f010158146caeab8e8af9667c8bbc3578f5dd1b08d1", + "0x1d0db0a664be56251cb05ba6a54c8118f3bfe1db533f26f57f05692fdb28e2ea", + "0x2c7174a0eb16a6f78a628b4d4f440926270af5a95e6bb64b765b437825701b03", + "0x17648e7dfce842d775e60cadbe42767b24bb438a5e726a434d59418b37e0aa61", + "0x2e5034d6d24c79b5398f3ef0c92e9e7196fdf09e7ff7c4dec48f3f0a2e6370c1", + "0x01146c122b607ab6ded5b5b5e92255beee157a642f580822fdae5e9dea160e76", + "0x07be2e95c5be6b6d4c1d5676aeb7c81a5e18c6a04dfaf91e1c3f3c3ae32210fb", + "0x197e77b38c40f0d823efbb818e28b95d8203389b05aedde6e75b972943af79fb", + "0x26bb89f2bb15a21a6cebc6e9310502adf9fed8fdc919bda6815e77ff819e9d3e", + "0x1b7f452e919883ed4916c83080e84ad295e49bd2236a1a6147b35776b70464b4", + "0x222fb6eb4c8c9b55fce0b8ea65925f2a3d60a9e2d0f84a9359178a353db8d334", + "0x2b6b169625dd60623124c240270212b0ffe55ba08f167b6336e0ebe4c8048ed3", + "0x1e6ed0a781861c3fcddec0b90ab510576dc1faec6f6530ed823fe7dad2e3462d", + "0x02f3fc277e93b7c78835c0d421f6e78852381bd4df0a67d8f87d28ba1f763a9f", + "0x20fbd72d0f29b76c24ca492458463fa9ae4060f2e5fcdefc3fb506ee662736d9", + "0x2e701ee4fc4a78156e8d562716f15776a18323b2852e4a5f94bf7fb6ff518723", + "0x1b2ce7144df5b1161fd9e6d40b1b202a0aeac3dc3f92f4b6832421d3b44de17e", + "0x06b902ea237cb16053c4bf3b6dd9c8c213281776a7e10cf25fb091913bc30108", + "0x25c3da4a26993188cc0cc05872a352b9753ab30ad1893d3892ab73cf7db62d69", + "0x077234434f874d9126a2b5e9455680c19d5c413f618cbc5730642e65dc703ddd", + "0x07434836ba76737543e14daacb34a5b84d4e52d0cd19af2631b088a86da948d9", + "0x148d2607ecfcb1b87075272d47c8ac1c64d26ecd2bfdc45f631281bafbd25d48", + "0x06820e094b3aa21240f7113b7e7013199dc5057c7c25d46c234d1d04bfc13c38", + "0x13bcf6420724ff14e81c657d239c978bfe9f6f646e78b471b98b6421040760f5", + "0x046982ee1ae4c93448f06bdea472e99abc1427e4126c0bf8c79037b559b497ba", + "0x2e61e4efdb9e5bf9b1c6566a4c011ee653e38871d6b4e477b9e9d3c08ea471c0", + "0x272016843c23040033483443b0869045e3dd8f8765d66f37fda824a5cc1d31e1", + "0x0dd3c9cc4e78651ab3ba52ed221cac978902fc4552b5a3340bfebc4cad9b5ea7", + "0x1bea0b67c5926c40d5752e46f5a1c69ff9d51898c499a7d11fe561eb4d35f004", + "0x2f05c1293bb5fe8727ce859592d3b9ec538aa4f216e7b5a2b144324f2ce0911a", + "0x046ac1d98450415c32f756c65fc0559eeddc44d0de476c25de9dca169b8cebf1", + "0x11f3e319ec8f4cc5e13d00d6dec8454f8b085247a03d6fd9c041faed7af36eed", + "0x07825a74e22b24b02244d22622866bfc085ed7878c75b526a601b84561e82bf2", + "0x254d3a792573d6a9802bee9297de9c58122c606c581b0aea8d58b6bec6a71bed", + "0x0988d2f99810a1581ae6a273cc67d09832629a7995997b389b4004e7415533f4", + "0x24b0ac9021356a406d961a7dbb2316f5b47d82aa6b012ec44b382e5f7121a209", + "0x1348d3b1881698fe6fc646c617ec21b329b53033f68143fe856fd1c90e991427", + "0x1a4f79594ea808af74928acc57c4b6ded7db0cc25f4ff744b241f3ddc54b2f00", + "0x0479bb048890551c7ac82173291e9168b8580fd0b4be928fe448bd5526983be7", + "0x29e0d42dd1d246e066e3a7f4cf57c617d2b652d11803955a85ddf00c0e8831b4", + "0x23c176f1954d019356337afba278513c121ac26e6f507203ab06e800d7a654a8", + "0x1c8246f29d3e70d737476e2e61ddb648e6611ea7bed60fb2da0a3cf70e928aff", + "0x1465b43990d57dbb3644aaa8eff74e46f2929d805ce00ec064be85c7c26fbcf8", + "0x163f5ca4d24104d454b6578d49c6712a598e3062fcef3eb5e297948f7d199f25", + "0x23d2340ed795ec93606137cf8dba55195974c1b4c474ed22631ca148239ec104", + "0x2537ec3882873a6c0d7cf3882bd997c50ea3fb26859d5d2db07fa9e2f3906133", + "0x04243c7dd7fbe08ea38e08728e5807e8182e767793f25ffd3b011c48ef39f1d0", + "0x1d63dc778c4aecceb2f164f42a60202b084c576de475bc52b86c8549d9cfa71c", + "0x03ae6be8f659a60388860a5040797974481d6c8b4fa649eed3980d95583921f5", + "0x20f4cf5dd85e4774ad5f03be3215c2c712e69d7fbfb7e7ddb340f9c33101528c", + "0x2b709e332bd89cc615a441ce9cf9f946faa689306691071947f3470cabff6fe9" ] - hash = "0x140573d0ad8c82b99fcbbebc4f75c54266e0a50b9858451588d42eaf4a351209" + hash = "0x2ce58c501f353a26fc2ae8af6ccce6266524c01c03c4466e47411ceb1bb31e9e" [inputs.start_sponge_blob] fields = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -9809,12 +9797,12 @@ expected_fields = "0x00000000000000000000000000000000000000000000000000000000000 squeeze_mode = false [inputs.archive_root_membership_witness] -leaf_index = "6" +leaf_index = "8" sibling_path = [ - "0x268fe6cc724a2b22c90de036be72fd625e1f93765da57f9ca9d796cf75935fd1", - "0x1b310091f25556247eb686f4fa27ebf50817b1980ff90a77ba5d283c88170d52", - "0x2dba3cd55f4dd5ce5cd321cf0c231b55b86ff019ae0451bbf37fc3da836b9cdb", - "0x0d39ab223d0afda6d6a8bd9e0ba9ee169899171dac2166d696603a91ba81b9eb", + "0x1ea1fe558790ea32d4ce29db7703f38b1625baab0bd71ad676fbca5bee1d9bef", + "0x05372a4f102bd7c96e3a195a0853c328d09b27e2481eba63de46f36c3e31976a", + "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", + "0x133e7ead0a424929dd37c25d5e07e6edb14c13deba22fcb5bbb2faf73f540da9", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", @@ -12866,26 +12854,26 @@ fields = [ ] [inputs.constants] -vk_tree_root = "0x1644418d6d00aefd0815a5576611abd0bf6f4770a2a2d6b5356808aac5245292" -protocol_contract_tree_root = "0x02dae744a60621d793d9f228e36975aec8ab5cdc963876aad4a3767866b1fd65" +vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" +protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" [inputs.constants.last_archive] - root = "0x19c7046f42513ad502513dd9e49c9d636df00165e12e16d68bdb8ee8c7483af2" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" + root = "0x2fb30ffc649bc4555aca4cf711d871a98811c42a885c55e6bf9fa0941027b7ec" + next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000b" [inputs.constants.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" version = "0x0000000000000000000000000000000000000000000000000000000000000001" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000009" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000014" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b6ed1a" + block_number = "0x000000000000000000000000000000000000000000000000000000000000000b" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000024" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067b7965a" [inputs.constants.global_variables.coinbase] - inner = "0x000000000000000000000000eb6355a62d6434cf7ece9a27ea91a2167604d246" + inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" [inputs.constants.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.constants.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000067854" + fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000002e860" diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts index 7f7495daddea..97383034407f 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts @@ -1,7 +1,6 @@ import { BlobPublicInputs, BlockBlobPublicInputs, Poseidon2Sponge, SpongeBlob } from '@aztec/blob-lib'; import { type BaseParityInputs, - CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, type ContractClassLog, Fr, ParityPublicInputs, @@ -51,6 +50,7 @@ import { AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, AZTEC_MAX_EPOCH_DURATION, BLOBS_PER_BLOCK, + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, HONK_VERIFICATION_KEY_LENGTH_IN_FIELDS, type NESTED_RECURSIVE_PROOF_LENGTH, type NULLIFIER_TREE_HEIGHT, From 6d2349de5a59f0cfe645807978ca9226dc78c298 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Thu, 20 Feb 2025 23:38:56 +0000 Subject: [PATCH 08/21] feat: use unpadded variable hash for cc logs --- .../contract_class_registerer_contract/src/main.nr | 8 ++++---- .../crates/types/src/abis/contract_class_log.nr | 4 ++-- .../noir-protocol-circuits/crates/types/src/hash.nr | 6 ++++++ .../memory_archiver_store/memory_archiver_store.ts | 2 +- .../circuits.js/src/structs/contract_class_log.ts | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index da88372d4786..5dab097dcc77 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -13,6 +13,7 @@ pub contract ContractClassRegisterer { MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, REGISTERER_CONTRACT_BYTECODE_CAPSULE_SLOT, }, contract_class_id::ContractClassId, + hash::poseidon2_hash_subarray_variable, traits::is_empty, utils::arrays::{array_concat, find_index_hint_from_end}, }; @@ -221,11 +222,10 @@ pub contract ContractClassRegisterer { // TODO(#8978): review correctness let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = array_concat(log, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); - // TODO(MW): use chunked poseidon if cheaper? Use variable poseidon with length of non-0 fields? - let log_hash = - std::hash::poseidon2::Poseidon2::hash(log_to_emit, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS); - // Safety: TODO(MW): constraining below length in the base rollup. Is this good/safe? + // Safety: The below length is constrained in the base rollup. let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; + // TODO: We will eventually remove this hash. + let log_hash = poseidon2_hash_subarray_variable(log_to_emit, length); // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. unsafe { emit_contract_class_unencrypted_log_private(contract_address, log_to_emit, counter); diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr index bd1699d7a5dc..80b8e80e6f1e 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr @@ -1,7 +1,7 @@ use crate::{ abis::{log::Log, log_hash::ScopedLogHash}, constants::CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, - hash::{poseidon2_hash, silo_contract_class_log}, + hash::{poseidon2_hash_subarray_variable, silo_contract_class_log}, traits::is_empty, utils::arrays::validate_trailing_zeroes, }; @@ -20,7 +20,7 @@ pub fn validate_and_silo_contract_class_log( assert(is_empty(log_hash), "mismatched contract class log hash"); } else { // Validate hash - let hashed_log = poseidon2_hash(log.fields); + let hashed_log = poseidon2_hash_subarray_variable(log.fields, length); assert_eq(log_hash.log_hash.value, hashed_log, "mismatched contract class log hash"); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr index 4147e749e8c4..f8154ec65e95 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr @@ -243,6 +243,12 @@ pub fn poseidon2_hash_subarray(input: [Field; N], in_len: u32) -> Fi sponge.squeeze() } +#[no_predicates] +pub fn poseidon2_hash_subarray_variable(input: [Field; N], in_len: u32) -> Field { + let mut sponge = poseidon2_absorb_chunks(input, in_len, true); + sponge.squeeze() +} + // NB the below is the same as std::hash::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check, // and absorbing in chunks of 3 below. #[no_predicates] diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index 2568e5985420..590f3d635305 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -29,7 +29,7 @@ import { type UnconstrainedFunctionWithMembershipProof, } from '@aztec/circuits.js'; import { FunctionSelector } from '@aztec/circuits.js/abi'; -import { type AztecAddress } from '@aztec/circuits.js/aztec-address'; +import { AztecAddress } from '@aztec/circuits.js/aztec-address'; import { INITIAL_L2_BLOCK_NUM, MAX_NOTE_HASHES_PER_TX, diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.ts b/yarn-project/circuits.js/src/structs/contract_class_log.ts index 5cc473c0914c..3c272ba4f6f3 100644 --- a/yarn-project/circuits.js/src/structs/contract_class_log.ts +++ b/yarn-project/circuits.js/src/structs/contract_class_log.ts @@ -84,7 +84,7 @@ export class ContractClassLog { } async hash() { - return await poseidon2Hash(this.fields); + return await poseidon2Hash(this.getEmittedFields()); } static get schema() { From 56b8cd1ade36b54cf556b836b84b23d3ebd469b1 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Fri, 21 Feb 2025 09:37:53 +0000 Subject: [PATCH 09/21] fix: update tests --- .../crates/rollup-lib/src/base/private_base_rollup.nr | 4 ++-- .../crates/rollup-lib/src/base/public_base_rollup.nr | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr index 895685e8d5d2..dbd4b643429b 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr @@ -252,7 +252,7 @@ mod tests { TUBE_VK_INDEX, TX_FEE_PREFIX, TX_START_PREFIX, }, data::{public_data_hint::PublicDataHint, PublicDataTreeLeaf, PublicDataTreeLeafPreimage}, - hash::{poseidon2_hash, silo_contract_class_log, silo_l2_to_l1_message}, + hash::{poseidon2_hash_subarray_variable, silo_contract_class_log, silo_l2_to_l1_message}, merkle_tree::MembershipWitness, messaging::l2_to_l1_message::ScopedL2ToL1Message, partial_state_reference::PartialStateReference, @@ -530,7 +530,7 @@ mod tests { array_concat(log_fields, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); let log = ContractClassLog::new(padded_log_fields); self.contract_class_logs_preimages.push(log); - let log_hash = poseidon2_hash(padded_log_fields); + let log_hash = poseidon2_hash_subarray_variable(padded_log_fields, N); self.tube_data.add_contract_class_log_hash(log_hash, N); } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr index 445d4c6f0eda..5fe9ba87c5aa 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr @@ -197,7 +197,7 @@ mod tests { TX_FEE_PREFIX, TX_START_PREFIX, }, data::{PublicDataTreeLeaf, PublicDataTreeLeafPreimage}, - hash::{poseidon2_hash, silo_contract_class_log, silo_l2_to_l1_message}, + hash::{poseidon2_hash_subarray_variable, silo_contract_class_log, silo_l2_to_l1_message}, merkle_tree::MembershipWitness, messaging::l2_to_l1_message::ScopedL2ToL1Message, tests::{ @@ -296,7 +296,7 @@ mod tests { array_concat(log_fields, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); let log = ContractClassLog::new(padded_log_fields); self.contract_class_logs_preimages.push(log); - let log_hash = poseidon2_hash(padded_log_fields); + let log_hash = poseidon2_hash_subarray_variable(padded_log_fields, N); self.tube_data.add_contract_class_log_hash(log_hash, N); } From c2ebf152b249f8e3d9e4e46b976ba806edf8ce6a Mon Sep 17 00:00:00 2001 From: Miranda Wood Date: Mon, 24 Feb 2025 16:58:25 +0000 Subject: [PATCH 10/21] feat: add .contractaddr to contract class log (#12197) Tracking an address alongside the cc log to aid filters in the archiver. The address is always constrained to be that of the registerer, but many archiver tests use random addresses so they brick without ugly hacks --- .../src/core/libraries/ConstantsGen.sol | 21 +- .../src/main.nr | 6 +- .../crates/rollup-base-private/Prover.toml | 256 ++++++++--------- .../crates/rollup-base-public/Prover.toml | 260 +++++++++--------- .../src/base/private_base_rollup.nr | 29 +- .../rollup-lib/src/base/public_base_rollup.nr | 34 ++- .../crates/rollup-lib/src/components.nr | 46 ++-- .../types/src/abis/contract_class_log.nr | 31 ++- .../crates/types/src/abis/log_hash.nr | 2 +- .../crates/types/src/constants.nr | 3 +- .../crates/types/src/hash.nr | 12 +- .../archiver/kv_archiver_store/log_store.ts | 3 +- .../memory_archiver_store.ts | 16 +- .../src/interfaces/archiver.test.ts | 4 +- .../src/interfaces/aztec-node.test.ts | 4 +- .../circuit-types/src/interfaces/pxe.test.ts | 4 +- .../src/logs/extended_contract_class_log.ts | 4 +- .../src/private_execution_result.ts | 2 +- yarn-project/circuit-types/src/tx/tx.ts | 2 +- yarn-project/circuit-types/src/tx_effect.ts | 15 +- .../src/structs/contract_class_log.test.ts | 17 +- .../src/structs/contract_class_log.ts | 43 +-- .../circuits.js/src/tests/factories.ts | 7 +- yarn-project/constants/src/constants.gen.ts | 3 +- .../contract_class_registration.test.ts | 6 +- .../src/conversion/server.ts | 27 +- .../tx_validator/data_validator.test.ts | 4 +- .../ContractClassRegisteredEventData.hex | 2 +- .../PrivateFunctionBroadcastedEventData.hex | 2 +- ...onstrainedFunctionBroadcastedEventData.hex | 2 +- ...ntract_class_registered_event.test.ts.snap | 8 +- ...te_function_broadcasted_event.test.ts.snap | 16 +- ...ed_function_broadcasted_event.test.ts.snap | 16 +- .../simulator/src/acvm/oracle/oracle.ts | 4 +- .../src/public/public_tx_simulator.test.ts | 7 +- 35 files changed, 486 insertions(+), 432 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 1cd15c1c108c..b81b40d4bef6 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -172,9 +172,10 @@ library Constants { uint256 internal constant TREE_LEAF_READ_REQUEST_LENGTH = 2; uint256 internal constant PRIVATE_LOG_DATA_LENGTH = 20; uint256 internal constant SCOPED_PRIVATE_LOG_DATA_LENGTH = 21; - uint256 internal constant CONTRACT_CLASS_LOG_SIZE_IN_FIELDS = 3019; - uint256 internal constant CONTRACT_CLASS_LOG_DATA_LENGTH = 3021; - uint256 internal constant SCOPED_CONTRACT_CLASS_LOG_DATA_LENGTH = 3022; + uint256 internal constant CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS = 3019; + uint256 internal constant CONTRACT_CLASS_LOG_SIZE_IN_FIELDS = 3020; + uint256 internal constant LOG_HASH_LENGTH = 3; + uint256 internal constant SCOPED_LOG_HASH_LENGTH = 4; uint256 internal constant NOTE_HASH_LENGTH = 2; uint256 internal constant SCOPED_NOTE_HASH_LENGTH = 3; uint256 internal constant NULLIFIER_LENGTH = 3; @@ -194,7 +195,7 @@ library Constants { uint256 internal constant TOTAL_MANA_USED_LENGTH = 1; uint256 internal constant BLOCK_HEADER_LENGTH = 25; uint256 internal constant BLOCK_HEADER_LENGTH_BYTES = 648; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3759; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 741; uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 908; uint256 internal constant PRIVATE_CONTEXT_INPUTS_LENGTH = 40; uint256 internal constant FEE_RECIPIENT_LENGTH = 2; @@ -203,16 +204,16 @@ library Constants { uint256 internal constant SCOPED_READ_REQUEST_LEN = 3; uint256 internal constant PUBLIC_DATA_READ_LENGTH = 3; uint256 internal constant PRIVATE_VALIDATION_REQUESTS_LENGTH = 772; - uint256 internal constant PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH = 3758; + uint256 internal constant PRIVATE_TO_ROLLUP_ACCUMULATED_DATA_LENGTH = 740; uint256 internal constant TX_CONSTANT_DATA_LENGTH = 37; uint256 internal constant COMBINED_CONSTANT_DATA_LENGTH = 46; - uint256 internal constant PRIVATE_ACCUMULATED_DATA_LENGTH = 4430; - uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 5248; - uint256 internal constant PRIVATE_TO_PUBLIC_ACCUMULATED_DATA_LENGTH = 3918; + uint256 internal constant PRIVATE_ACCUMULATED_DATA_LENGTH = 1412; + uint256 internal constant PRIVATE_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 2230; + uint256 internal constant PRIVATE_TO_PUBLIC_ACCUMULATED_DATA_LENGTH = 900; uint256 internal constant PRIVATE_TO_AVM_ACCUMULATED_DATA_LENGTH = 160; uint256 internal constant NUM_PRIVATE_TO_AVM_ACCUMULATED_DATA_ARRAYS = 3; - uint256 internal constant PRIVATE_TO_PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 7883; - uint256 internal constant PRIVATE_TO_ROLLUP_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 3800; + uint256 internal constant PRIVATE_TO_PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 1847; + uint256 internal constant PRIVATE_TO_ROLLUP_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH = 782; uint256 internal constant CONSTANT_ROLLUP_DATA_LENGTH = 13; uint256 internal constant BASE_OR_MERGE_PUBLIC_INPUTS_LENGTH = 52; uint256 internal constant BLOCK_ROOT_OR_BLOCK_MERGE_PUBLIC_INPUTS_LENGTH = 986; diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index 5dab097dcc77..88cb2299925b 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -7,7 +7,7 @@ pub contract ContractClassRegisterer { use dep::aztec::protocol_types::{ abis::log_hash::LogHash, constants::{ - ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, FUNCTION_TREE_HEIGHT, MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS, MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, REGISTERER_CONTRACT_BYTECODE_CAPSULE_SLOT, @@ -220,8 +220,8 @@ pub contract ContractClassRegisterer { // cannot prove non-registration. Therefore, it is possible that a malicious oracle might prevent sequencers // from including transactions with calls to certain badly-broadcasted contracts. // TODO(#8978): review correctness - let log_to_emit: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = - array_concat(log, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); + let log_to_emit: [Field; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS] = + array_concat(log, [0; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - N]); // Safety: The below length is constrained in the base rollup. let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; // TODO: We will eventually remove this hash. diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml index 000f92a44333..b5a856982131 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-base-private/Prover.toml @@ -3,20 +3,20 @@ _is_some = true _value = "0x0000000000000000000000000000000000000000000000000000000000000e18" [inputs.tube_data.public_inputs.constants] -vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" -protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" +vk_tree_root = "0x1648448d030859f5423fdf2595769e40517eb083de6194ac882f8ab3f140d166" +protocol_contract_tree_root = "0x0baea02e0bf351d285508e7fe17aeccb25bbf5bc2abe4c4a12044d9b897f2e74" [inputs.tube_data.public_inputs.constants.historical_header] total_fees = "0x000000000000000000000000000000000000000000000000000000155eefcdb0" total_mana_used = "0x00000000000000000000000000000000000000000000000000000000000153e8" [inputs.tube_data.public_inputs.constants.historical_header.last_archive] - root = "0x27161676d92b225929dee06caca9400464216b76997721c55099edd5b6f683a2" + root = "0x27c27b015f66aafdcfdabfcac0ff1f648e2155fa21efcf4a143512767290597e" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" [inputs.tube_data.public_inputs.constants.historical_header.content_commitment] num_txs = "0x0000000000000000000000000000000000000000000000000000000000000001" - blobs_hash = "0x00d6718a08ac14832224a9c0bcc5a0a2f53dae924597125600a6259920b4c6d9" + blobs_hash = "0x00c38019c808952890355828fb38b61be12dff3d0be5950fdfd1550455ffecc5" in_hash = "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c" out_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -25,15 +25,15 @@ root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000080" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.note_hash_tree] -root = "0x0c6f98c15c29695735f6a22a729888d3114f0252b1d66242acced08d9e0ed4fb" +root = "0x066adff8aa49f0f62dff3eecb980b4ebe65f081af4d05e6411925c3e609a8d4c" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x239d307a6faa52f0470e2cb9519be33e1df24b4c2f0429278f981dff5db15cab" +root = "0x05bb61b06f5e950de4b778921195d897befe2705c7c4c6224962e975ea38aeba" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.public_data_tree] -root = "0x22705a0d0403f1b82ba7f499c5a2781140cb7374b47deca79b8ae71028a8c7ed" +root = "0x1d52b9e2e1a3497dc52888afb22888c2a9037169e238faed9720f5fae5dd432e" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables] @@ -41,10 +41,10 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 version = "0x0000000000000000000000000000000000000000000000000000000000000001" block_number = "0x0000000000000000000000000000000000000000000000000000000000000008" slot_number = "0x0000000000000000000000000000000000000000000000000000000000000013" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b794c2" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067bc4165" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.coinbase] - inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" + inner = "0x000000000000000000000000c218809c79531316787fb0ce23f01d232542547c" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -75,8 +75,8 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 [inputs.tube_data.public_inputs.end] note_hashes = [ - "0x12de6d858a6a1783dd3f6725a50b0bd002e6315ebc8b9755cf40ee7354acfa37", - "0x27b861229665cad0edbe89912d906eb310c0ea6ee31d69470a4c1372ab553c14", + "0x12b96328f50ec49a53a908b05ddb340b819e2610ff3afe43e113de73bc0c5b0d", + "0x20fb96bb71b9b143d65aac8f005ff0d1e05fec092d40f9918d3b2be0ce10df1d", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -141,8 +141,8 @@ note_hashes = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x008422e430e0292fdc60d6107747c6fd6fcb199ae8f045f9c5a2c6061d25948c", - "0x1766afe960d1233064c3d2526af69bcf42a8c56020360572d39d2ae467dea2de", + "0x09aed0f2951185148e42bd9881bab0a48af8416b7a83a13f39446e407ef205d3", + "0x14337c3cdcf9f3035cf2538da1c18a6ccfd2a64f2acc38bfa6b8773516ca60a2", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -297,68 +297,68 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x22df547f56d80ab2bfe256889c1bfbdb152f7367de76d7e0c9b0b4a535a00b7b", - "0x1ba956cb225838049c5affa8a6229c10388dfbf76cf347e4a763ce7b2886fb87", - "0x000022b9a7c54d949265b4d3e81ee6d0af8d3c1060b83a9af8212ec389eb7186", - "0x00ef7f82cc7ed94cbfca62903fc429171f9e1c0c1eeba0a9675ffb67a69e7ca4", - "0x008bdf173b2fa59bfc638e09b6d732ed1f73f22b58146d048b4a2fcd8fe67d79", - "0x00bcbd457feae2628efb6dc7c7ce556e06b6de862c96b5d97dc6bbf17fed120a", - "0x00ecfe10afd438a5543967e0cb51e4cea3766ae8480482d358350f41f811d950", - "0x00ff6daabcdfffb407232fcc859e8ceba9057ba7fd3b1cd4fe9d87dc6630a22e", - "0x00fa1fa163314236fd2402c477ee5407287f7b844883d9ce1b7266876ef75d33", - "0x00e245efdcc1c72d484a8b39e108ea95e94ff455a12615cfed77aea726640c26", - "0x0ddb45f0343080e3f0a6feafef79148eed637fa52c5a81fe3874a17a16749c47", - "0x0c83f5c9f5ca94fb287c0c32b3ee16bd7beeb91e4eba560f379bf08d5b0f51b2", - "0x11ff349fdc8e5b0f91239f6bdd4dec2b134d9b7a4a14252b766a721b36acdb93", - "0x2066090512826a3b0ff32224bddc887132c93e7124e7bc89036e0027cce6e641", - "0x0fbf812f976cd51ba6f92524739d5583d2f6158d39373c3d69bcbf225dc2d271", - "0x008310e1246b14c2a2798699ee16508ec41db032139ccc4ca74298a4b531d429", - "0x235236f39c3054a5b4f99c221e6446fcd2065ed9e8830eb4c779f7c1f3d2b2ba", - "0x0cbdaf584cdb170998dcbe35fec67eb1eb7db332f33e2331e25f9a42de319167" + "0x2181697b8480f1a6a9386d08ae42293fe800b255fcaa25e6fe648be024491a45", + "0x0162421d79ae1280d68841dc0f187590b840cc62ea0576bee0473873fca5d256", + "0x0001c919cc6ff935a1dcf4906041a648f0c97643ef0f4634fcff0bfb5024845f", + "0x004e195f8ed2d98f440304c91c7473d14d368e31738aef3e533d718607fa6f08", + "0x009dea150fa204248486559d02b15706241adcf7b74b424dce5bf0e95a828afa", + "0x00e8e70ce434eff46d9a4882769dc90dc5e530f2fb05de0ed9cf56e2665ec5d4", + "0x0079f0b241ef8629f6265c37636980c02445002b12ed8a8a21a66cc98f49d837", + "0x00cb384b2fd7ee7adfdd29aff2af949ef7b84983fa6f4df4659a867d989f2154", + "0x004c133adc41fda4ab7f63117f10119ceb2549b4cb192bd6d3a80943781dc1b1", + "0x00293e2e14b6b07cdc1cf0f2d5ebcbaa1735a7eefb4ab9fbc0c6f887c8e61854", + "0x12a1503e2bd9f49c848f71bf961478b4e6dffad0146bb13c23a4a08c23b70828", + "0x0f6186684071159a9a32cad7b3b828d575086b08ead4d99f5218e7cbd036cf87", + "0x1e52a272346c0d48f919b69398cbb8d858a66b06bfefd8f96a6e1af41e5123f5", + "0x294ab96a01d892bdb4435caef216e6f183ff8f6e9500617f78c2fa5ccf446c08", + "0x1bfe275a77f6e8c2ebd2b8c9dcb3072d787b8ff229ef89d838695ec372cc7a1c", + "0x23e26bd12c1f22bc0edc1a846159da07d9a16a0134baaa1a6ab95a2794c3ba72", + "0x240a30935e152dec3b689775ae0a87cda6a002eb0505c651a509c294161738f0", + "0x0d6f59d9e364c5930ae593c000f439aff511f8c87908c932351039405fd1b6e0" ] [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x1a159586fc1dc75411f945007ff8620114c8a0134e6a29ae362bf6260eb80635", - "0x21e27120ceccbf0b0c66aac21eb4fec7ac0ed4e30deaf9073aaef169a8c408ea", - "0x000110da86606192b671aad427827dfd163e28bb3cc1c9a2a05d7c43fb7a4b3a", - "0x00cd80ce426aeb576ddaec6b0c18438142ab6b22e12412f5794349eec912f1fc", - "0x0001fba6665c3ddc00d20f63ba2fafcdad665ac472dd39c0aa2ba91fc92ce4b8", - "0x005f7ccba88c901e571ea233d149cead9ea0e1c547f426a1cd569c850e236fe2", - "0x00b1b258f84c672af93c82647a86f4285bab1684beef9bd029a2ed5c519d2922", - "0x00a41b5db427104be9d6da20f2200d9fce39cc160f5ad788f0da587471da1c20", - "0x00b8f1b9f8fb1f86bd77032468fad06d84288e8c3d7a44ea5c63f9d72ba05ffe", - "0x00fe2c37c7b4d9c058a802eb059f31b8feeb2cb832c86321a18cba98ca043b41", - "0x0cdf2cfd2365235375ddb921a998b88331d3d62f522b09d07bd0da33934d210b", - "0x038d9198ced408df4399d3d5e52109c3b20b99723fc8b6c40104bf42cf371811", - "0x2f15dd901c48671dd7bae33b24f63f5f9d880420e4cdef300afc99fa123e4693", - "0x1e60a6b8405c5643882a9d3f605c7656d85ecb5b685840edab352da386fc013b", - "0x26c9e3ac0a0607036753f5fcab70f2cdbfd1f3d901da8b89f1880a40739d0699", - "0x06f5ca0ed09530ea8f72ae62413850970e0c3f9ef88b65c39b6c86652acca9cc", - "0x0b70e8a33d7d410d7819f34531d55d2889da4737392799b21e8028075c023cd3", - "0x05cfe0280c52de03be93c51a93ffb56a6b2c3c6d680d8bccacde7a634182a37d" + "0x2943733f064637e3e441f8dba033f2dfb97a14249fd0eb9cf6f8b72ac6b8a138", + "0x25f5142f392f1f06f3195b03d3bdff401b5330f261e9ae0a4a414d95cc9765b7", + "0x0001fc3b4d62da6f6140262673184665a6a8bb0e1f5b5718c7d459149dc7fbfe", + "0x0078d861dedf0f845b9f4c02a79c0d03f1bdabcdcdc5f4afa0cf84bec75cd831", + "0x00f5b4033ad04bc5568132d26e45467d4b555f1b779b1eecbc3f7d32b97ba3aa", + "0x0071ceb869705890fd6653a7a7f1f6727741f26306e315ec27a694db2d85dca6", + "0x00531b98e35b77dc7947afd7f7dd19780fc467997cefaa7826ba18b2eb70fb31", + "0x00452d3c250ac90682aa22bbd1709d4d8889fc5a0e1b78d34a779c4de2276524", + "0x00b85b0bde0ac8d7e26c94a00194bc35230e00a5bc66397318ee42e2add4d152", + "0x007edb23455bb7d00d72d5dab1140b3c56edcd637a817b987b0ab7c22037958c", + "0x0cf6ef177ae2a3928999aa54afff186ae4f6133beb1e6f87b2244cb5bd6bbba5", + "0x1737bbd2524c0dded120eede8853206f3cb4683086b9a0ffb7065640e3b8a144", + "0x068e7309d2aad63a71bd4d13c6888edcc9744ed53e4a1cdad2dd55e4601b4feb", + "0x18a3c0367febfebc155b2ad6202670e7a6459d0b209fefa989f6d2f43df07b2b", + "0x25e5ec5bb63dfe5fd41bdf2f8a6f55bd578cb56afbed341d903d38f48f721ecd", + "0x2291708567344ba82e2921fbd59716a588b88b7213d1c4bf5204aefe6adf703c", + "0x1da31ea1fd76aed6713d153f7fab575b31cfae0e76ca062dfe6f5f1fb601600d", + "0x2067843c4ef6a314e8b3971472e8dfbc002364d24d0817403a813230a15dd520" ] [[inputs.tube_data.public_inputs.end.private_logs]] fields = [ - "0x2cc4fa5438a3e8e1633ed965d92625f0338f5ab7403cc906734ef8a992fe45e6", - "0x18a9ed56a6ff667f0830f34f0cfc7e1dd8ba97c8a30864b9fb30cdf8647a0618", - "0x000095bfeecb801de33089ac7c8cbc9ce54516562cc93f91246ff5b690f07721", - "0x009e3b7243c6f23bbc042d8c35f6386d2a188de72a6064fcdba5485a49e35b47", - "0x0075282b73128274047df2eb0961d68a2c26b7c4105e69e3d46b026d7b8284f0", - "0x00e9a9b877c5fae838da9ca668a7628245bec031802b7c9cc144a2d6ae3e6f6f", - "0x009d05212e31de755371dba1f1e803429b145b82cf09c46345c3d6c79dd1aba0", - "0x007298a91f92ec52f1f1f0ace90bbfa90d158c8c74df50361385357a0a92ca17", - "0x000cd5f0b9610ae4c8d2f8673c28e65b0997fe6f94fd6c1bbd3a30c415237581", - "0x00ace76b98649797416f83e63ace9c553b5233e69545068119b786841d420700", - "0x2b81b760508596550defc196bfbb12550e7824c9521ac15a3c6af41d1b5aa6cc", - "0x0047de735ff606c33bd975fba377260dac5dae63f4e6ff39e82e90d49a5c1ad6", - "0x2b25c720294c41c5beb58866e72e8e3de8eeeec69eaeb4fb7676f20051ca1fcc", - "0x118a24c3857a2943d5ec1553ef2f830cea0aaf2d11109a0f72e60d7853a45557", - "0x13dda13724fe599d73d809bda8fc76b985c7bd9bcb6e62062fcbb1c4f2e3a5d8", - "0x1f25548a16ed23d85ccf2abc312f14aafa677c4c2819885d714db934cc6f8fde", - "0x207bd9d961e9114cee69eb9b083e5d4f4a5983f8fe3e0f1b018a62f37e160633", - "0x1cb0064e7ca85fb0ff678a9063248a02dc3be160b5d46db524b91328c5dbdf65" + "0x0b65695c37b4d73fb1536bef578774feb9253f0366c1dcb22c752f0b07c3426f", + "0x1e5f0f70cecc9937ef2e268ca83f6d53d0bab18872452a5940142578e0df0ec1", + "0x0000267756ccb5bdcaf17e981670d5a1545675208c8ca527cc9deafb97d0070d", + "0x00d65f940dd4b9134e15645d62a38c027b25abb1aa97dbbc33ffc6408837e459", + "0x00d7c31ad82c6217ddea685e8ac7c99a4fe9a0cb693a0fff8786174d83b0c460", + "0x001a6d73787aba7f3415f3e056375e090a8d7a33485d7140e5b7520241fb3a4c", + "0x002b581ac5e8d66896e9ace588a84a8fdd8df666544c000555687aff96042f22", + "0x006f3f21ed1b50546a794c29c290e1869e1497acbbf307bd3e3eda90d86c7e29", + "0x008dfcf890d68063501b928eb36c73b395364696b56d896d0011aa970bb8a8b1", + "0x00d7ed8e4a1a3034b7d25c1c3fa1891ca7a8d8dd31637e61ff9f5ea7435bb659", + "0x22fdb18288692ce835052ac6c67f1725d7e19a658b986917a2f7435b640a06a3", + "0x1322154350350a91e6d8b600f8587534f728a36e458af40f1d0e6e712b57fae5", + "0x13912f471ccc99e4d3e15693921a55261ae07e5f4ecbd6127dc7a22dbc723e39", + "0x07ffea9fd0a4ef4a13e204c9038ebdb8604b911f02fc0a27bfeecc0a293a163b", + "0x04e31d11458730c588fa4e779296a882997aeae4d9a58f622cc932448b8c6219", + "0x08bb6a8ebcfafe37c6431ad2b0573df404926545275001b5c361fbac0acd4a89", + "0x257bf696db93cb887c2ecf4887670ff39cbf4107eabecf5954b17cb6163e15fa", + "0x16b3bf362de7420d6c6d3318ce2bd267a13479fe711a7827f67f94860ccf39d9" ] [[inputs.tube_data.public_inputs.end.private_logs]] @@ -1013,7 +1013,7 @@ da_gas = "0x0000000000000000000000000000000000000000000000000000000000007600" l2_gas = "0x0000000000000000000000000000000000000000000000000000000000004a40" [inputs.tube_data.public_inputs.fee_payer] -inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" +inner = "0x161ee558437daf5c595c8eb949f1b7907338122ae36c30e280588a5446391601" [inputs.tube_data.proof] fields = [ @@ -1561,7 +1561,7 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000004" vk_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x2797e6c657b9b195bb0069d39f05c408c1227dde200db71822defa3b92d83b64", + "0x267349a3079fcc01f745cf97092711a2e74caa0faf6df34f6db564029f880dfc", "0x1c388d7cbc55931f9d8e14a98495d9dcdf1af8cc4dedadd56c6a2ccd1b9c7b2f", "0x0d12417a9fee854bb7973bca4cd76ac021dd6df8c8bb9b63e19025c50d20cbf7", "0x1f1a86b74593ad4cca631e97bcd2831e6f5e1187ef61b5085d36f92f3540947c", @@ -1713,15 +1713,15 @@ vk_path = [ hash = "0x0000000000000000000000000000000000000000000000000000000000000002" [inputs.start.note_hash_tree] -root = "0x0c6f98c15c29695735f6a22a729888d3114f0252b1d66242acced08d9e0ed4fb" +root = "0x066adff8aa49f0f62dff3eecb980b4ebe65f081af4d05e6411925c3e609a8d4c" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.start.nullifier_tree] -root = "0x239d307a6faa52f0470e2cb9519be33e1df24b4c2f0429278f981dff5db15cab" +root = "0x05bb61b06f5e950de4b778921195d897befe2705c7c4c6224962e975ea38aeba" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.start.public_data_tree] -root = "0x22705a0d0403f1b82ba7f499c5a2781140cb7374b47deca79b8ae71028a8c7ed" +root = "0x1d52b9e2e1a3497dc52888afb22888c2a9037169e238faed9720f5fae5dd432e" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.start_sponge_blob] @@ -1745,8 +1745,8 @@ expected_fields = "0x00000000000000000000000000000000000000000000000000000000000 [inputs.state_diff_hints] sorted_nullifiers = [ - "0x1766afe960d1233064c3d2526af69bcf42a8c56020360572d39d2ae467dea2de", - "0x008422e430e0292fdc60d6107747c6fd6fcb199ae8f045f9c5a2c6061d25948c", + "0x14337c3cdcf9f3035cf2538da1c18a6ccfd2a64f2acc38bfa6b8773516ca60a2", + "0x09aed0f2951185148e42bd9881bab0a48af8416b7a83a13f39446e407ef205d3", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1880,7 +1880,7 @@ note_hash_subtree_sibling_path = [ "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", "0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x1d2a7aca7c5e29462d3adf839ccc4839dae3184dfc96f35e6cd49fe9c3986de1", + "0x13ca406a96edbd660da0db9377a2b8c784a51c26f2545583192d946819f4f575", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -1914,9 +1914,9 @@ note_hash_subtree_sibling_path = [ ] nullifier_subtree_sibling_path = [ "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", - "0x1f9fdc83fb0fa48fbbd64e8efa95d971bb79622eb8d5092eb440e1bbc4dfa1af", + "0x116c66e317b7b7a4741223c757d95583ef189421093fded437d4f8c1d4045ca0", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", - "0x2508a37546412fe7977222b4336978367298cb3c0ad4e6469dfc6f26d35cd55c", + "0x24e8ffa5497c794e608c4c41d81229a4301269a5090e5148b45663a797099900", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -1992,14 +1992,14 @@ fee_write_sibling_path = [ ] [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x15f7b90b69f6ee6e50139771f8ce29a5b46133ec98104f928de9f644bd0ec930" - next_nullifier = "0x1dc71479cd9f5b5da03dbda8f528b23330553b90d7e4383f7276ddce7bcf0c98" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000140" + nullifier = "0x0a1a26681cbad74b9fa14ca9150f5f8a5fdb0c200840f6e93bc20edff4a294ba" + next_nullifier = "0x1d9ff005ac6bce92744de59507c7ff49b651dbb291e276d108b151580ee3a307" + next_index = "0x00000000000000000000000000000000000000000000000000000000000000c0" [[inputs.state_diff_hints.nullifier_predecessor_preimages]] - nullifier = "0x000000000000000000000000000000000000000000000000000000000000007f" - next_nullifier = "0x018af9d4902139029bc804a90756b951711e39d7bf831c73539234323ad28ce9" - next_index = "0x00000000000000000000000000000000000000000000000000000000000000c1" + nullifier = "0x099211a382aae63bcf29796af5bf9b64f30b4bd7f3d852583bddf993d39bef65" + next_nullifier = "0x0a1a26681cbad74b9fa14ca9150f5f8a5fdb0c200840f6e93bc20edff4a294ba" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000102" [[inputs.state_diff_hints.nullifier_predecessor_preimages]] nullifier = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -2312,18 +2312,18 @@ fee_write_sibling_path = [ next_index = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "322" + leaf_index = "258" sibling_path = [ - "0x147da40ba01971d5047ee443928b49eeba940cdf37f5c264db4f77a46c3d01fa", - "0x26f35db1e335f43a2f97b9f7460d82c1156343df28d409d4a4f71e414c9d5c63", + "0x0989b773123cb6d1d709349975bdce5541d671ef8ebddade4bad153bf1b9133f", + "0x115e35de0560c3c99c3255e8e1052d1c447675b71b8cb841a09d2f7fc8c2a59b", "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", - "0x0ffa105677a3e8dbf90804fcccb1c230423cc759fed35e9f3f1aeeb6cedaf7b7", - "0x24d774a3c7dbbc1d9bdff185a3a1ca60c5ab7650e4b21421b3c573d572cad147", - "0x0d7200aaf41176939b8bd4074ec526f3fdccab2437e31679c5aa038e91aa4cf8", - "0x11f7cf6186b575199f1de60647b32ab3592821830a2e1e2a033af44963dc1d0e", + "0x01b4cd42238fa018b92c5b4d1d3e40b797a87715dd05115ce2558e1af534ddaf", + "0x1078112a1bb879fe8b960d3c44c1baf2a36fdf1dd5cc44b0eb513811b4d5d9ee", + "0x1c67887e1797fa66a5fe44f9ee3a47024ea55bcb75605743b672c46944010b3e", + "0x305108541e76c4ab682f3438dc935f221202b81f26325ddb4772923580b3799f", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -2357,18 +2357,18 @@ fee_write_sibling_path = [ ] [[inputs.state_diff_hints.nullifier_predecessor_membership_witnesses]] - leaf_index = "127" + leaf_index = "193" sibling_path = [ - "0x0d2e74b9d21f0f0ca0bb02fe570268b7927737220eb27c2ee03911305b4a39b4", - "0x125f11770899f31d09cd5954bda0a90973b480be7ff9e29a9c02562ab78f0ee6", - "0x07961b7b41a4705f005f5fe2942faae223307b4f3033c46f9cccfdd57791b65f", - "0x29957e7d9a08ebc027115c442d1405703b1c5e530a6b171906a0172627ddc6eb", - "0x135c2d2dc15a5acc7b43b89aaba27718b5f575df9413618552a3a1b3121c8bee", - "0x28b8fd8b9d61fbe4b1c0a05c6313d3ea28b715a5c2ddab3a4f9d127c27dc6b9f", - "0x169afc20aaa33427f6a9f136203922bf52f1107285f5696611645b6b55df8561", - "0x234629c74a65325c9743684ed8427482343f3cb59cf58d89980e808aece3255e", - "0x0cafa551c8e6f0da03f2cd15bb4f47061ac469840caa0f28b7d53514553415fb", - "0x11f7cf6186b575199f1de60647b32ab3592821830a2e1e2a033af44963dc1d0e", + "0x27b6776858ee6d9d5a86ac6b6e97b3f3b52eb317c18069f161514eedfe8226f5", + "0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1", + "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", + "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", + "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", + "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", + "0x1ce22869ea501d3e8c5da95b8f6e9f29db63a052ec56ee28e749892135ee64a6", + "0x1555903c1c632b19bcd1221b58e0145d013c8db22bba93307c37daaeeaef73cc", + "0x0325903580f881cd752ef04d1bdf45e0efba2a904ef4e121917c3f8c09235706", + "0x305108541e76c4ab682f3438dc935f221202b81f26325ddb4772923580b3799f", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", "0x0f320b0703439a8114f81593de99cd0b8f3b9bf854601abb5b2ea0e8a3dda4a7", "0x0d07f6e7a8a0e9199d6d92801fff867002ff5b4808962f9da2ba5ce1bdd26a73", @@ -5192,22 +5192,22 @@ fee_write_sibling_path = [ ] [inputs.state_diff_hints.fee_write_low_leaf_preimage] - slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" + slot = "0x0a6e16a003a1377090986e1deac91905a54330aaa962277cb7d32fc2463fa329" value = "0x00000000000000000000000000000000000000000000021e19e0c22d44092f74" - next_slot = "0x2143f955eff636e7ea7967e3566bd55f74a9f21320db8016584b73ede579da27" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000089" + next_slot = "0x0b5aa7ecf9512d9c97c974f5a56737c82efd0c3a3486781989673835ce66f7d0" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000093" [inputs.state_diff_hints.fee_write_low_leaf_membership_witness] - leaf_index = "125" + leaf_index = "119" sibling_path = [ - "0x0ceb7bc0b4bc0caf07b3d6a7f743910111c6ce277f9c7951760ad75467eabe1e", - "0x2556bcc00621278836547b90fb5d3a075c28624334a44bd27bd8cbc75204cf38", - "0x2eb6deb858934362b7585eda32a592487b2b2da844071616ae605359abf8199e", - "0x0ec3152c87960f28e18697a5ed6b5e314df6ec1e07c015c6be21cfb8400eb83f", + "0x18209173a41eeb27fdac589c03d22c09c7384fa38ac1132e13bf407c7b9b6436", + "0x2ec157510fe2767d280e343fe7e1beb853f1ce73aaabab829f9c499190168dd7", + "0x29208ecc66c5a3f559855bd44866e51a9e1b053fe1b60786941ab50664c75667", + "0x22ad70a334b0101447951f2315dd6015931d37bfeb389e8d239db22912e7f73d", "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", - "0x229ce3db4db7dfb5612cd56eece855d62131843b5183f1f0496db891c2a766e2", + "0x1393bd9c7b3a221c881994b1ad4fa17f3365b3d1d0d1d84580a2a67fc47b2949", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5243,20 +5243,20 @@ fee_write_sibling_path = [ ] [inputs.fee_payer_fee_juice_balance_read_hint] -leaf_slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" +leaf_slot = "0x0a6e16a003a1377090986e1deac91905a54330aaa962277cb7d32fc2463fa329" value = "0x00000000000000000000000000000000000000000000021e19e0c22d44092f74" [inputs.fee_payer_fee_juice_balance_read_hint.membership_witness] - leaf_index = "125" + leaf_index = "119" sibling_path = [ - "0x0ceb7bc0b4bc0caf07b3d6a7f743910111c6ce277f9c7951760ad75467eabe1e", - "0x2556bcc00621278836547b90fb5d3a075c28624334a44bd27bd8cbc75204cf38", - "0x2eb6deb858934362b7585eda32a592487b2b2da844071616ae605359abf8199e", - "0x0ec3152c87960f28e18697a5ed6b5e314df6ec1e07c015c6be21cfb8400eb83f", + "0x18209173a41eeb27fdac589c03d22c09c7384fa38ac1132e13bf407c7b9b6436", + "0x2ec157510fe2767d280e343fe7e1beb853f1ce73aaabab829f9c499190168dd7", + "0x29208ecc66c5a3f559855bd44866e51a9e1b053fe1b60786941ab50664c75667", + "0x22ad70a334b0101447951f2315dd6015931d37bfeb389e8d239db22912e7f73d", "0x179d7b5df7a65a4bdda408605c069b3ea175a5f4e2b0fccc9f2ebcb5d12c7c28", "0x19e2b3449d24e57ea4d6948048220d0756f93b6aaca968960b173df69903160a", "0x1a35cf71ad31b7058db0cec41776442412ccd9f75276205dcd8fd0ffc4bbfaab", - "0x229ce3db4db7dfb5612cd56eece855d62131843b5183f1f0496db891c2a766e2", + "0x1393bd9c7b3a221c881994b1ad4fa17f3365b3d1d0d1d84580a2a67fc47b2949", "0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1", "0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972", "0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686", @@ -5292,10 +5292,10 @@ value = "0x00000000000000000000000000000000000000000000021e19e0c22d44092f74" ] [inputs.fee_payer_fee_juice_balance_read_hint.leaf_preimage] - slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" + slot = "0x0a6e16a003a1377090986e1deac91905a54330aaa962277cb7d32fc2463fa329" value = "0x00000000000000000000000000000000000000000000021e19e0c22d44092f74" - next_slot = "0x2143f955eff636e7ea7967e3566bd55f74a9f21320db8016584b73ede579da27" - next_index = "0x0000000000000000000000000000000000000000000000000000000000000089" + next_slot = "0x0b5aa7ecf9512d9c97c974f5a56737c82efd0c3a3486781989673835ce66f7d0" + next_index = "0x0000000000000000000000000000000000000000000000000000000000000093" [inputs.archive_root_membership_witness] leaf_index = "8" @@ -5303,7 +5303,7 @@ sibling_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1", "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", - "0x133e7ead0a424929dd37c25d5e07e6edb14c13deba22fcb5bbb2faf73f540da9", + "0x057edb3907f636bd0d42f38f6ae5250c870a448f1dfe67c481c966d44c8bd9b8", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", @@ -5332,6 +5332,7 @@ sibling_path = [ ] [[inputs.contract_class_logs_preimages]] +[inputs.contract_class_logs_preimages.log] fields = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -8354,12 +8355,15 @@ fields = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] +[inputs.contract_class_logs_preimages.contract_address] +inner = "0x0000000000000000000000000000000000000000000000000000000000000000" + [inputs.constants] -vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" -protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" +vk_tree_root = "0x1648448d030859f5423fdf2595769e40517eb083de6194ac882f8ab3f140d166" +protocol_contract_tree_root = "0x0baea02e0bf351d285508e7fe17aeccb25bbf5bc2abe4c4a12044d9b897f2e74" [inputs.constants.last_archive] - root = "0x228897df6f3083a823a7476f16fe0c6cf2546f6d496926422ec49761fe8c8574" + root = "0x26d6941617d63fdea667144ffdc28b7e5fb07ef6b8878c96943538f34878b219" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" [inputs.constants.global_variables] @@ -8367,10 +8371,10 @@ protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331 version = "0x0000000000000000000000000000000000000000000000000000000000000001" block_number = "0x0000000000000000000000000000000000000000000000000000000000000009" slot_number = "0x0000000000000000000000000000000000000000000000000000000000000022" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b7962a" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067bc42cd" [inputs.constants.global_variables.coinbase] - inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" + inner = "0x000000000000000000000000c218809c79531316787fb0ce23f01d232542547c" [inputs.constants.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml index 4a23548d9287..9da60f9c4427 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-base-public/Prover.toml @@ -1,18 +1,18 @@ [inputs.tube_data.public_inputs.constants] -vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" -protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" +vk_tree_root = "0x1648448d030859f5423fdf2595769e40517eb083de6194ac882f8ab3f140d166" +protocol_contract_tree_root = "0x0baea02e0bf351d285508e7fe17aeccb25bbf5bc2abe4c4a12044d9b897f2e74" [inputs.tube_data.public_inputs.constants.historical_header] total_fees = "0x000000000000000000000000000000000000000000000000000000155eefcdb0" total_mana_used = "0x00000000000000000000000000000000000000000000000000000000000153e8" [inputs.tube_data.public_inputs.constants.historical_header.last_archive] - root = "0x27161676d92b225929dee06caca9400464216b76997721c55099edd5b6f683a2" + root = "0x27c27b015f66aafdcfdabfcac0ff1f648e2155fa21efcf4a143512767290597e" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" [inputs.tube_data.public_inputs.constants.historical_header.content_commitment] num_txs = "0x0000000000000000000000000000000000000000000000000000000000000001" - blobs_hash = "0x00d6718a08ac14832224a9c0bcc5a0a2f53dae924597125600a6259920b4c6d9" + blobs_hash = "0x00c38019c808952890355828fb38b61be12dff3d0be5950fdfd1550455ffecc5" in_hash = "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c" out_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -21,15 +21,15 @@ root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000080" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.note_hash_tree] -root = "0x0c6f98c15c29695735f6a22a729888d3114f0252b1d66242acced08d9e0ed4fb" +root = "0x066adff8aa49f0f62dff3eecb980b4ebe65f081af4d05e6411925c3e609a8d4c" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.nullifier_tree] -root = "0x239d307a6faa52f0470e2cb9519be33e1df24b4c2f0429278f981dff5db15cab" +root = "0x05bb61b06f5e950de4b778921195d897befe2705c7c4c6224962e975ea38aeba" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000280" [inputs.tube_data.public_inputs.constants.historical_header.state.partial.public_data_tree] -root = "0x22705a0d0403f1b82ba7f499c5a2781140cb7374b47deca79b8ae71028a8c7ed" +root = "0x1d52b9e2e1a3497dc52888afb22888c2a9037169e238faed9720f5fae5dd432e" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.tube_data.public_inputs.constants.historical_header.global_variables] @@ -37,10 +37,10 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 version = "0x0000000000000000000000000000000000000000000000000000000000000001" block_number = "0x0000000000000000000000000000000000000000000000000000000000000008" slot_number = "0x0000000000000000000000000000000000000000000000000000000000000013" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b794c2" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067bc4165" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.coinbase] - inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" + inner = "0x000000000000000000000000c218809c79531316787fb0ce23f01d232542547c" [inputs.tube_data.public_inputs.constants.historical_header.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -141,7 +141,7 @@ note_hashes = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x2923eb13b13500f805ab805be994063f84b326cd9750b42bf4fcab80af825556", + "0x068e09d658449523f5e4e51e6fd41fe9d809acf452c8f2ff6ad7d4e369a425a9", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2361,13 +2361,13 @@ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [[inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests]] is_static_call = false - args_hash = "0x22d48e09ae5c282c241e69f6bc9fe273ddcf9e199ffe05205411fb751b5920ab" + args_hash = "0x2c0d242c333b6e2b156042d004ea38e537482c27d0fec93d156238542db167fe" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.msg_sender] - inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" + inner = "0x161ee558437daf5c595c8eb949f1b7907338122ae36c30e280588a5446391601" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.contract_address] - inner = "0x0c493b4d8b238330babd743196fb680b6d6aa775b75b1056227edd39e56eccd4" + inner = "0x27bc69cf3367414e0e604516880bd129fc7c067b0a09bf5f84656f47b17cec73" [inputs.tube_data.public_inputs.revertible_accumulated_data.public_call_requests.function_selector] inner = "0x00000000000000000000000000000000000000000000000000000000d5441b0d" @@ -2793,7 +2793,7 @@ da_gas = "0x0000000000000000000000000000000000000000000000000000000000000400" l2_gas = "0x0000000000000000000000000000000000000000000000000000000000006500" [inputs.tube_data.public_inputs.fee_payer] -inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" +inner = "0x161ee558437daf5c595c8eb949f1b7907338122ae36c30e280588a5446391601" [inputs.tube_data.proof] fields = [ @@ -3341,7 +3341,7 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000004" vk_path = [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x2797e6c657b9b195bb0069d39f05c408c1227dde200db71822defa3b92d83b64", + "0x267349a3079fcc01f745cf97092711a2e74caa0faf6df34f6db564029f880dfc", "0x1c388d7cbc55931f9d8e14a98495d9dcdf1af8cc4dedadd56c6a2ccd1b9c7b2f", "0x0d12417a9fee854bb7973bca4cd76ac021dd6df8c8bb9b63e19025c50d20cbf7", "0x1f1a86b74593ad4cca631e97bcd2831e6f5e1187ef61b5085d36f92f3540947c", @@ -3501,10 +3501,10 @@ reverted = false version = "0x0000000000000000000000000000000000000000000000000000000000000001" block_number = "0x000000000000000000000000000000000000000000000000000000000000000b" slot_number = "0x0000000000000000000000000000000000000000000000000000000000000024" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b7965a" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067bc42fd" [inputs.avm_proof_data.public_inputs.global_variables.coinbase] - inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" + inner = "0x000000000000000000000000c218809c79531316787fb0ce23f01d232542547c" [inputs.avm_proof_data.public_inputs.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -3518,15 +3518,15 @@ root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000000a0" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.note_hash_tree] -root = "0x23f057812ef3aa6af61121c15454de28ee18e2982aab64173d02e2bb5e789e08" +root = "0x25941bd9b7c19924bfb9af852265d52691e716d78d084d8771704d0845e2d343" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000300" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.nullifier_tree] -root = "0x105d1065ad5760ef43de17c634f779677fb04c1185866e21d9283b0f0cd7d361" +root = "0x2f09031e2f83e63398ddec7097b6b5836aaf95fecab9d20bb69f9d6bf98c5095" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000380" [inputs.avm_proof_data.public_inputs.start_tree_snapshots.public_data_tree] -root = "0x2755d6668ea6db7661ffc0ec952f8b69fd1e3397fef9fb6a9eafeff9147325bc" +root = "0x1a55edd6af0a830e51a9621a8175fa6ead175ffd40e4ee92f9a71230a3f86d8c" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.avm_proof_data.public_inputs.start_gas_used] @@ -3550,7 +3550,7 @@ fee_per_da_gas = "0x000000000000000000000000000000000000000000000000000000000000 fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.avm_proof_data.public_inputs.fee_payer] - inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" + inner = "0x161ee558437daf5c595c8eb949f1b7907338122ae36c30e280588a5446391601" [[inputs.avm_proof_data.public_inputs.public_setup_call_requests]] is_static_call = false @@ -3970,13 +3970,13 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 [[inputs.avm_proof_data.public_inputs.public_app_logic_call_requests]] is_static_call = false - args_hash = "0x22d48e09ae5c282c241e69f6bc9fe273ddcf9e199ffe05205411fb751b5920ab" + args_hash = "0x2c0d242c333b6e2b156042d004ea38e537482c27d0fec93d156238542db167fe" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.msg_sender] - inner = "0x0c42eb4b7a24d5766860a88fac9ae55fd82dda1a64388d614d06ea8238b20e97" + inner = "0x161ee558437daf5c595c8eb949f1b7907338122ae36c30e280588a5446391601" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.contract_address] - inner = "0x0c493b4d8b238330babd743196fb680b6d6aa775b75b1056227edd39e56eccd4" + inner = "0x27bc69cf3367414e0e604516880bd129fc7c067b0a09bf5f84656f47b17cec73" [inputs.avm_proof_data.public_inputs.public_app_logic_call_requests.function_selector] inner = "0x00000000000000000000000000000000000000000000000000000000d5441b0d" @@ -4475,7 +4475,7 @@ fee_per_l2_gas = "0x000000000000000000000000000000000000000000000000000000000000 "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x2923eb13b13500f805ab805be994063f84b326cd9750b42bf4fcab80af825556", + "0x068e09d658449523f5e4e51e6fd41fe9d809acf452c8f2ff6ad7d4e369a425a9", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4856,15 +4856,15 @@ root = "0x2e33ee2008411c04b99c24b313513d097a0d21a5040b6193d1f978b8226892d6" next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000000a0" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.note_hash_tree] -root = "0x23f057812ef3aa6af61121c15454de28ee18e2982aab64173d02e2bb5e789e08" +root = "0x25941bd9b7c19924bfb9af852265d52691e716d78d084d8771704d0845e2d343" next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000340" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.nullifier_tree] -root = "0x1d9a5390c3eb4e13baf9154a78d70927b40b61c071e1019139c92de366f0ff2d" +root = "0x093ca3d8df23b61474bc287d2be671fa3cb741c4065a6df447e85f177db6d94f" next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000003c0" [inputs.avm_proof_data.public_inputs.end_tree_snapshots.public_data_tree] -root = "0x1cc0f2f6aa2b24bbc845c25846e176fed49871146c8a191898a01ea2dbcbb632" +root = "0x161aecd5d034289dbc1755a090014aa239631f2fa575967d0cf3781f98b037e4" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000009a" [inputs.avm_proof_data.public_inputs.end_gas_used] @@ -4939,7 +4939,7 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 "0x0000000000000000000000000000000000000000000000000000000000000000" ] nullifiers = [ - "0x2923eb13b13500f805ab805be994063f84b326cd9750b42bf4fcab80af825556", + "0x068e09d658449523f5e4e51e6fd41fe9d809acf452c8f2ff6ad7d4e369a425a9", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5262,15 +5262,15 @@ fields = [ ] [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x0e94969977013720e63fca32a7b45df66faae6e9d14d798f872ba2e18300def1" + leaf_slot = "0x00f2ebe012804f730ffee08825357d5ee33dba26fb32a4e587e01bd49c7d557b" value = "0x0000000000000000000000000000000000000000000000000000000000001c20" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x2c6834c0fbb4b0e8f57416ad662fd8db020e6d4b006900fb21a9554c82711be8" + leaf_slot = "0x0de18e1477ff528776a9a02b77e7c2512b5812694e99741b4c6521e5a228731b" value = "0x0000000000000000000000000000000000000000000000000000000000000af0" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] - leaf_slot = "0x20637de6c81a121708bc7ee7ba34fc97c5f807b46254c5af08af0860a6c071bb" + leaf_slot = "0x0a6e16a003a1377090986e1deac91905a54330aaa962277cb7d32fc2463fa329" value = "0x00000000000000000000000000000000000000000000021e19e0c2197e759cd8" [[inputs.avm_proof_data.public_inputs.accumulated_data.public_data_writes]] @@ -9679,7 +9679,7 @@ fields = [ vk_index = "0x0000000000000000000000000000000000000000000000000000000000000005" vk_path = [ "0x27dbd017f63a5339a96cbc9ab86dc2b137d7c0ed488f2ea3e33424d7a44562c3", - "0x2797e6c657b9b195bb0069d39f05c408c1227dde200db71822defa3b92d83b64", + "0x267349a3079fcc01f745cf97092711a2e74caa0faf6df34f6db564029f880dfc", "0x1c388d7cbc55931f9d8e14a98495d9dcdf1af8cc4dedadd56c6a2ccd1b9c7b2f", "0x0d12417a9fee854bb7973bca4cd76ac021dd6df8c8bb9b63e19025c50d20cbf7", "0x1f1a86b74593ad4cca631e97bcd2831e6f5e1187ef61b5085d36f92f3540947c", @@ -9688,94 +9688,94 @@ vk_path = [ [inputs.avm_proof_data.vk_data.vk] key = [ - "0x0814b289a7d0a135110c5f7ba3d8eaf58552ad27eef294c8a463f5d46113f376", - "0x1fc43c7a35cc2b24eecc69afc35b426fb2e151d1c07158fcfe141d1b2c681d46", - "0x1fd1c91d39cb2cb106f1dcf9ab67ef713421a35cc42c93bfadd1c7ed6d3d1118", - "0x27aa94bb12e2bef658cd8bcd9a4a2dbe7f67e8a14a17cd40d30dcace1f8aebb7", - "0x05a491c73281f83fe89472f3ad9353ad92e7748114c013e5bd9f87e5dbd0b7f5", - "0x0f8c0945750257ed54dd3863c1d4571136b6d9ea9e5f5918ac65cb04f85ea658", - "0x06656140c1c9fe9b8f3478ecbdfbf82c6ea4165cfd886ed248d6978d608cea69", - "0x0e038a4ce2c3aa1c10c1307b289d78b1bcb190d658c31bf56779a20f60dc44eb", - "0x1e60268681c7f1e7d574fb0229db43992359c6d1b0d463236388c11c315e2b88", - "0x037f4ace38b225a999ac88934f327e2e13666b82bfa43a01324f9bd2246c28c6", - "0x155402a179a2d5fbb77ff81d985dd146a5e550b436c8a3d704f46406cb5e78e7", - "0x1cd245a0db5ff25432ab89cf6b7240cf0c36524aceb9bdc8d6bbeadd4ed535cc", - "0x27a37efde28a12bfdb89af0d01825649da6e76b4e467d3e82451193cfb401dfc", - "0x1ad5c2f4ecb770229861bec5ccbd5a78e20189db045d7feb98d532d08c0ddd75", - "0x2a23288612cbe1571426e84692203e32ff89771d733cf8908e2c9439bbf91539", - "0x0ffa99bfcd21b4993de637d9643ffb86b14d94f3383bfde7e5d6da50614f3370", - "0x05fc2802ecaa5e0349773f7ad1aac6b62a12fa2452b01f89800908f10fe51d93", - "0x1ea47509ea5c053919c0bf34f3262b3ced796ad3492b71fa95a7cfe4d139bc69", - "0x2ede16449b699a470e3678fe6d1855d927f2a2b7e74830b30bad2ca43996f7ea", - "0x24a9ebc1a1ec464a0d032a6ed4c4754b82c41a38be2a35b7e63fcdd762b82d05", - "0x17f1a6c6f428f69fd3b79f14f7f3fa6a9d433fd25e0623b838d97d262443675e", - "0x1e7d62d2ecfe78e4fe399f5830f4cb710377990e789d22b407f1fe138c40b600", - "0x2228b71e37545438aa66802c5f7979572b3904296819323b3b71e0d35931f3c8", - "0x29783a2087da567874d40d69eb911d109ed1319a35d58cc26c19ba137de920c7", - "0x2dee4afd3183ffa84cdc76324ce1eb02d9f05eb33a79e6e04078d7b8b9a67959", - "0x1b8ecef4a8aea26caf6d3ef7141d7565b5bdfed3f360fdc60b26952a994826f0", - "0x13b065e237a9f8dcab9ec2b5a573a0afdce29e69b4bc1dca68d5fa67d2c6e0d6", - "0x122b082f43f012df5d6c4806ac54e1000136b45bd276b73adbfd038e7e03b082", - "0x137d9fc5eadacfc55350a7511f7e0ad129895207fc6d9749f684340819c5332a", - "0x0b294cf54ab56bf1c7f5ed23a4cc804c3fc4140dee8717253a780a18e30b5da2", - "0x1720f3883657ac29a8bf32fb6db4793407e4d2e5d3dd96f7c0fd07e1fbcc1929", - "0x0b515243a8478a785d685e17ddb541f7653486fd9e41b079bf1b2ca308ced89d", - "0x2712c53076bf97e7c701e11984df4163ac09f8280f626f566bc84c4e9d1793cd", - "0x112888a9035daf20b17802aa09eba0074449023751d63d13ce8bae1932f0ffd5", - "0x25edb3bc7e88b8970ded47a0b73ea703e06a196c994bee02a2928aae949912d1", - "0x22ad1d8e4b1738f231151f010158146caeab8e8af9667c8bbc3578f5dd1b08d1", - "0x1d0db0a664be56251cb05ba6a54c8118f3bfe1db533f26f57f05692fdb28e2ea", - "0x2c7174a0eb16a6f78a628b4d4f440926270af5a95e6bb64b765b437825701b03", - "0x17648e7dfce842d775e60cadbe42767b24bb438a5e726a434d59418b37e0aa61", - "0x2e5034d6d24c79b5398f3ef0c92e9e7196fdf09e7ff7c4dec48f3f0a2e6370c1", - "0x01146c122b607ab6ded5b5b5e92255beee157a642f580822fdae5e9dea160e76", - "0x07be2e95c5be6b6d4c1d5676aeb7c81a5e18c6a04dfaf91e1c3f3c3ae32210fb", - "0x197e77b38c40f0d823efbb818e28b95d8203389b05aedde6e75b972943af79fb", - "0x26bb89f2bb15a21a6cebc6e9310502adf9fed8fdc919bda6815e77ff819e9d3e", - "0x1b7f452e919883ed4916c83080e84ad295e49bd2236a1a6147b35776b70464b4", - "0x222fb6eb4c8c9b55fce0b8ea65925f2a3d60a9e2d0f84a9359178a353db8d334", - "0x2b6b169625dd60623124c240270212b0ffe55ba08f167b6336e0ebe4c8048ed3", - "0x1e6ed0a781861c3fcddec0b90ab510576dc1faec6f6530ed823fe7dad2e3462d", - "0x02f3fc277e93b7c78835c0d421f6e78852381bd4df0a67d8f87d28ba1f763a9f", - "0x20fbd72d0f29b76c24ca492458463fa9ae4060f2e5fcdefc3fb506ee662736d9", - "0x2e701ee4fc4a78156e8d562716f15776a18323b2852e4a5f94bf7fb6ff518723", - "0x1b2ce7144df5b1161fd9e6d40b1b202a0aeac3dc3f92f4b6832421d3b44de17e", - "0x06b902ea237cb16053c4bf3b6dd9c8c213281776a7e10cf25fb091913bc30108", - "0x25c3da4a26993188cc0cc05872a352b9753ab30ad1893d3892ab73cf7db62d69", - "0x077234434f874d9126a2b5e9455680c19d5c413f618cbc5730642e65dc703ddd", - "0x07434836ba76737543e14daacb34a5b84d4e52d0cd19af2631b088a86da948d9", - "0x148d2607ecfcb1b87075272d47c8ac1c64d26ecd2bfdc45f631281bafbd25d48", - "0x06820e094b3aa21240f7113b7e7013199dc5057c7c25d46c234d1d04bfc13c38", - "0x13bcf6420724ff14e81c657d239c978bfe9f6f646e78b471b98b6421040760f5", - "0x046982ee1ae4c93448f06bdea472e99abc1427e4126c0bf8c79037b559b497ba", - "0x2e61e4efdb9e5bf9b1c6566a4c011ee653e38871d6b4e477b9e9d3c08ea471c0", - "0x272016843c23040033483443b0869045e3dd8f8765d66f37fda824a5cc1d31e1", - "0x0dd3c9cc4e78651ab3ba52ed221cac978902fc4552b5a3340bfebc4cad9b5ea7", - "0x1bea0b67c5926c40d5752e46f5a1c69ff9d51898c499a7d11fe561eb4d35f004", - "0x2f05c1293bb5fe8727ce859592d3b9ec538aa4f216e7b5a2b144324f2ce0911a", - "0x046ac1d98450415c32f756c65fc0559eeddc44d0de476c25de9dca169b8cebf1", - "0x11f3e319ec8f4cc5e13d00d6dec8454f8b085247a03d6fd9c041faed7af36eed", - "0x07825a74e22b24b02244d22622866bfc085ed7878c75b526a601b84561e82bf2", - "0x254d3a792573d6a9802bee9297de9c58122c606c581b0aea8d58b6bec6a71bed", - "0x0988d2f99810a1581ae6a273cc67d09832629a7995997b389b4004e7415533f4", - "0x24b0ac9021356a406d961a7dbb2316f5b47d82aa6b012ec44b382e5f7121a209", - "0x1348d3b1881698fe6fc646c617ec21b329b53033f68143fe856fd1c90e991427", - "0x1a4f79594ea808af74928acc57c4b6ded7db0cc25f4ff744b241f3ddc54b2f00", - "0x0479bb048890551c7ac82173291e9168b8580fd0b4be928fe448bd5526983be7", - "0x29e0d42dd1d246e066e3a7f4cf57c617d2b652d11803955a85ddf00c0e8831b4", - "0x23c176f1954d019356337afba278513c121ac26e6f507203ab06e800d7a654a8", - "0x1c8246f29d3e70d737476e2e61ddb648e6611ea7bed60fb2da0a3cf70e928aff", - "0x1465b43990d57dbb3644aaa8eff74e46f2929d805ce00ec064be85c7c26fbcf8", - "0x163f5ca4d24104d454b6578d49c6712a598e3062fcef3eb5e297948f7d199f25", - "0x23d2340ed795ec93606137cf8dba55195974c1b4c474ed22631ca148239ec104", - "0x2537ec3882873a6c0d7cf3882bd997c50ea3fb26859d5d2db07fa9e2f3906133", - "0x04243c7dd7fbe08ea38e08728e5807e8182e767793f25ffd3b011c48ef39f1d0", - "0x1d63dc778c4aecceb2f164f42a60202b084c576de475bc52b86c8549d9cfa71c", - "0x03ae6be8f659a60388860a5040797974481d6c8b4fa649eed3980d95583921f5", - "0x20f4cf5dd85e4774ad5f03be3215c2c712e69d7fbfb7e7ddb340f9c33101528c", - "0x2b709e332bd89cc615a441ce9cf9f946faa689306691071947f3470cabff6fe9" + "0x10d4b41f0224ac03ded42392f9dae9f82020abd43f7b6b8a70f5e004759e3602", + "0x2e8d6ec85542fcbd256426c08a1daacb93ba4ea2be0adfceee891283b9b8b739", + "0x007eaee6b8612105cdbd188bd9c90b59daea331a901fb7b83e8222aa60cb6a25", + "0x145dcaea28dd8801b6067834fd10de89eac00ba33bb8fe88b5874613e2e60056", + "0x01fca2a33fa423f62a21dab371cfcb5c6690c3f1f99a75c929bd1d8e60b76508", + "0x19bb17ccf93e91b406621538e1b7670b995d01aaa339345037ad352806b23322", + "0x0126f58dd76da5590de1d82f61a2e516b27da90bef44e334f71e247e449becfb", + "0x0aa4cfb9fd1e48fe96a269aa8e4cf9dcd149797996380448116a623d3f74eb51", + "0x191f5a66003ef879cd83ba52b27264c8e1760768ee71eec3971f385291ca9fc6", + "0x141fb6bfdfadc50c7d2efad446926b586c65289f03abb439aed14d6bae766985", + "0x0cadcfc3049968c4a4c1f254f98aa06be2c5f39670d7c3257a704ace06a05fbc", + "0x1a91725a0688bdb6d18d4c17d0bcc49c23d36ac71381d6d118e16acc1219dc74", + "0x21f027fed0ef54b8be834cf9f79f6f43fd939ef5e833ff81bad2eba90d1a4208", + "0x29e9e35e024fce65d014398e61f63c4372c5456a40c294e9b671718969095d89", + "0x1f8c0495274327edf7316aa66c0bd8fd0c08e4f7a8153d67d3a66470eb8a5593", + "0x2c91fcd3a8d19c8406c5fda76d922a2f972e64a57e42680a95429c3357b2bef6", + "0x0fb7704fdb84a107e24f152755ba2e3557658fe4fdf193ca6f35d2d1524ec08a", + "0x297ad22fed64796d5bd84daac78732efef16f6009ab5f5c524128a7c53b201f6", + "0x298f3f68e361351c02b4ef9fecbde5f6cc6884459c52641837fdfea4477aa11f", + "0x16f1daf5861dd82c400cb60ba47ee70c31ad2239ac6b0f27364598c3e01ab046", + "0x1416fff7b70d079f673cea292cfe91c72778b1c20e2a6e52372be4c516a39aee", + "0x1664f60c18b6230a1e7851e854b44dae1e97bf68d8a88cbc92a08b7188814736", + "0x2c71933e876427aa7add8150fd93e9ff8aa595d3a2a3a2fae97fd9ac3f8f2910", + "0x2ebc4518a18cf42686737022347ad945321da5f285289ff8663fc08a0fde91e9", + "0x281ff093e10c3c28ff2a8761875c57d907e7f8f1cbe191be0fce239cdcb9a274", + "0x116726b2e799447d3e7dee20ed7ae333e48896e83e9ab9d2434062477b42acad", + "0x08ed1f665a00503f0f5f42e0acdc2d1675a2e6c366be3202042f45311333de4a", + "0x2384690ca1e302f3d673ff30b943634b7e6d6eed831fa88d044552c57c39f5ea", + "0x03c873c342e4d15663e3bef6a1c68dda589826476979176831d85ddfa9935997", + "0x04afbc05f100687f35be6615c4ee3d6e10894f1b0ed36d11ee9c9bfee3020560", + "0x175e6cbde688b890ddbff380446fd87828ab4bcdae97893d21f7a48cbac530e3", + "0x2b0045808d5584fae608d82f39eb090c30f079c4e0a4619b9f0dd9f141b2839c", + "0x26f30edcb97f66c7116de1cbad9346595fea1ef36883db55497b161e1db0889d", + "0x25621d2631bbfa531f1cf91377c591bb2317b67f6f280ee7c1846dd8f5f2fd7b", + "0x21bd316935549359c6c1b8911a5ee35ffbb1a420b56b0deabe4f904b71ebeee2", + "0x11ce0a7bfa9388205a27e1493520cc71db66d56813f91bd4a7f1ee12bb0b23e3", + "0x0139f461c38408d437b9078cced771ed352269187902a9d8852300368509e85d", + "0x07f24043fe0c251472b6a85ca962c88bf26c25e02b171afccb96b3dc1016efe5", + "0x1e489df34fcdd9b72c1020d962819c5042e79fea7ea3de310f74740b3144e35a", + "0x0a70764b78868e08fa9f47e9f95598fc26174ab523b2ec208686d29cf3b4cf4d", + "0x194f5d55a44d70e1db5d0d3f304a278f535fb79baf5f60467a9ec769516d810c", + "0x2a1ed0c992a17b2403a93056e168f55840029d0b2187969b349a758ee1a8b401", + "0x2c14ada45c971f35434af5e46aafcad355169f41c69b077ca3c6e1a103001691", + "0x06f8ac9cc7184b036208faba91b17718afe668cfe4e719fc3bd38823d88af460", + "0x10ad4caa5c448b041d191374832d39e614aeda1d755d1e2ae6482f8d12ba44ea", + "0x0bb6032499e50575371ab8625911fb6bf9b24f3a51dfc077c876d7c001428847", + "0x07230a54691bfa8368fdf3748fce79965ff24d0b8a55b29208a2c4ca5010ad2c", + "0x138d10556ae8f996f529330beab182ade2e7fe859a2d24b97341fef7fde7e7fe", + "0x174b530e7f5e8aadc935ec66ab169afe2d4b93a75860325d492a8e8f2214cb74", + "0x03f6549cdbb6d460112041809dc017215540d9cfad16c6b4cb53a72653cdfe9d", + "0x09fbf7328d564eb64ccb07d3285bd75fad537db2bc74116b30ce9c35dffafd1c", + "0x05d5fb848b96803982673239ac5031581d7ec3299e4a11e05126060b32ec712d", + "0x10e54c8afc4b9dc6cddef6f0533191fb5b7b71258162b2714eceb9ae065a07eb", + "0x2e110fcb39b7fcf1b5f6b436c1059000a8cae5e6b0bb037dc71a3e8368a913f2", + "0x126ce9568ae8a4a9c2dd03120740fc7736c098ef9c9903d2b03dda1bcb7ea2f5", + "0x0e5b9d74e8c9d694348c02e9878add1586c0995a241e5f8952720de553ddb8e4", + "0x11e8b9c6a0f3dfc2a6e64bddf13248a25e47aa8ffe4d7df2dd306122c9e75220", + "0x0b3373b9e5c6380c03befc28f970ae36e47906fa0ed620a92fd5baa514e543bf", + "0x197e432f413777bad2bd8adeb5002eab4670c8aa97a15ed4079b27fd7ed099be", + "0x054db1aa1ce545dc2cb3421c259ed8d825935d6ce3d508a937fa866e311baf43", + "0x0441f6dc6deeddd1b2f6fcda84dbf5dd66493f852d7e3cc8608d20d07b024b32", + "0x0ea350e8486f6a5a4978103fe6de038ac5131196e247311a63c0a8fe91bde755", + "0x2bde43cffca313a0e9ba3a1729d945acf6472450a1ba24923ecd3cdbee78dd37", + "0x19a4bfa90418cb9c0c24cabe8e6b47dc976d5b3a249b418e844b908f6190a099", + "0x12354948f9a1defa9ccda7e9bba19d5fe9f12607b9378159d9e1482b4c760dbd", + "0x0d8295a6ac68c424bee16ba64d8bf1452b7b1b93a8f8f4c34e74b0315f423006", + "0x15589c3a23f930724cbe4e6f7c2b8f12ebc1ea2d7101c7d1d9e63e831c6df3e2", + "0x0d6b40becf1461c3f9553e03851aebf9a5eb38072cd54c1867227af0ac03416d", + "0x248b92d90d341917fd5571f3e3e8aab5e223b235ca4b4b15c0cc43bad44c7444", + "0x06ca3704148ab228c3a7d5938f7d7764e3d3287c25614e9fa4f8a2819be8a275", + "0x1d823ca6d319dffe396e382c77f89bbcd95785eb5b9a5875dc961c83b976b383", + "0x1fc1a60ed2707bde1ca66f3272f823fc8ccaf9c14c341f9de51b3156949a17a3", + "0x2a782579a9b9f1773073be8c15668087201186bfeeb3941ed77f4989ef11c1ba", + "0x171f790819e3d2519b6bd1248f3c3e0fa6436df93a820ecc55d1db3932cda043", + "0x27895d4ae27548176f3b530496f5b468a95880ac8004a96becd9bbc55d3a4c48", + "0x1914f9d9a6c8a08be35b1ccc23658201ede49f12d0ac12d7fa7cad7fdf31635a", + "0x1f134e228658edf8787c30354f76ff10c10c31813a1f1bb3d0fc6323a29bd0b2", + "0x24394e469e6d8da207de25287d9ed95b160d307b09f0c0a6ec9310bf0e1622f9", + "0x2e9341bd02eb55a1f322679701190b32335602122172d7f9a3199dc7ccfbb8f7", + "0x17a378e2c63b36525f30e9e0a286bb0c160e756c37f702490bc8027f3ed3db5c", + "0x2e2c02f884dd13c1b775ebce60cfdd6e01acefb6a221062ea4f2eda2478fd397", + "0x2d555eefabe85656a8b9f9cdc8f6afa2e992390f27831025674a3be84ecd4ff5", + "0x2188b655b0d43187aa8b093d9dc877b691ad6fe344b532b979b42ab2602a3cdb", + "0x2a8dcb729b1f726f749c165a508b23b9f17acd945d2a2f79a020c30955596c43", + "0x1c98b06ae5ab39fe93d2b19354d0ebccbd376441aa493a8830dbba6597244f3c", + "0x0b2c61f353e7404a0d7939e33b95ae3fbe917cbeeb53ad76fa0b7b983489efab" ] - hash = "0x2ce58c501f353a26fc2ae8af6ccce6266524c01c03c4466e47411ceb1bb31e9e" + hash = "0x083c635f4ba33fabe93551fce8236f57afe217c29a7cbfb9aa775ea8bcad3ae9" [inputs.start_sponge_blob] fields = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -9799,10 +9799,10 @@ expected_fields = "0x00000000000000000000000000000000000000000000000000000000000 [inputs.archive_root_membership_witness] leaf_index = "8" sibling_path = [ - "0x1ea1fe558790ea32d4ce29db7703f38b1625baab0bd71ad676fbca5bee1d9bef", - "0x05372a4f102bd7c96e3a195a0853c328d09b27e2481eba63de46f36c3e31976a", + "0x132bcedbf8a27823a34e86b6dd094b6886b64a918c0f40d7b1eaca86cabfbcaf", + "0x11bf8b965644de2efbaf76fa4d9e41efdbf69c9deea9ad62477a9d7e304f68a1", "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", - "0x133e7ead0a424929dd37c25d5e07e6edb14c13deba22fcb5bbb2faf73f540da9", + "0x057edb3907f636bd0d42f38f6ae5250c870a448f1dfe67c481c966d44c8bd9b8", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", @@ -9831,6 +9831,7 @@ sibling_path = [ ] [[inputs.contract_class_logs_preimages]] +[inputs.contract_class_logs_preimages.log] fields = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -12853,12 +12854,15 @@ fields = [ "0x0000000000000000000000000000000000000000000000000000000000000000" ] +[inputs.contract_class_logs_preimages.contract_address] +inner = "0x0000000000000000000000000000000000000000000000000000000000000000" + [inputs.constants] -vk_tree_root = "0x03718577ea45c23b9c6a45e60e2500b2ff0b5128438822bef1ab2081f169196b" -protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331b158ec26565e56169" +vk_tree_root = "0x1648448d030859f5423fdf2595769e40517eb083de6194ac882f8ab3f140d166" +protocol_contract_tree_root = "0x0baea02e0bf351d285508e7fe17aeccb25bbf5bc2abe4c4a12044d9b897f2e74" [inputs.constants.last_archive] - root = "0x2fb30ffc649bc4555aca4cf711d871a98811c42a885c55e6bf9fa0941027b7ec" + root = "0x0e2232c34943202fcd1fcaaedf2e0e85c093e4367ccbcd68a343e5348ae94fb1" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000b" [inputs.constants.global_variables] @@ -12866,10 +12870,10 @@ protocol_contract_tree_root = "0x238fa27105c477fdfd965d4a7c6e0ef707f65952d5b8331 version = "0x0000000000000000000000000000000000000000000000000000000000000001" block_number = "0x000000000000000000000000000000000000000000000000000000000000000b" slot_number = "0x0000000000000000000000000000000000000000000000000000000000000024" - timestamp = "0x0000000000000000000000000000000000000000000000000000000067b7965a" + timestamp = "0x0000000000000000000000000000000000000000000000000000000067bc42fd" [inputs.constants.global_variables.coinbase] - inner = "0x0000000000000000000000009220818fdd39c942e0ffb3dcf2b4ec30e97d875d" + inner = "0x000000000000000000000000c218809c79531316787fb0ce23f01d232542547c" [inputs.constants.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr index dbd4b643429b..49f64bb947b9 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr @@ -235,13 +235,13 @@ mod tests { append_only_tree_snapshot::AppendOnlyTreeSnapshot, constant_rollup_data::ConstantRollupData, contract_class_log::ContractClassLog, gas::Gas, gas_fees::GasFees, - kernel_circuit_public_inputs::PrivateToRollupKernelCircuitPublicInputs, + kernel_circuit_public_inputs::PrivateToRollupKernelCircuitPublicInputs, log::Log, nullifier_leaf_preimage::NullifierLeafPreimage, public_data_write::PublicDataWrite, side_effect::OrderedValue, sponge_blob::SpongeBlob, }, address::{AztecAddress, EthAddress}, constants::{ - ARCHIVE_HEIGHT, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, CONTRACT_CLASS_LOGS_PREFIX, + ARCHIVE_HEIGHT, CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, CONTRACT_CLASS_LOGS_PREFIX, L2_L1_MSGS_PREFIX, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTE_HASH_SUBTREE_HEIGHT, @@ -261,7 +261,7 @@ mod tests { fixtures::{self, merkle_tree::generate_full_sha_tree}, merkle_tree_utils::NonEmptyMerkleTree, }, - traits::{Empty, FromField, Hash}, + traits::{Empty, FromField, Hash, ToField}, utils::{ arrays::{array_concat, get_sorted_tuple::get_sorted_tuple}, field::{field_from_bytes, full_field_less_than}, @@ -526,9 +526,12 @@ mod tests { // Exists separately to allow us to append correct log preimages and hashes unconstrained fn append_contract_class_log(&mut self, log_fields: [Field; N]) { - let padded_log_fields: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = - array_concat(log_fields, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); - let log = ContractClassLog::new(padded_log_fields); + let padded_log_fields: [Field; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS] = + array_concat(log_fields, [0; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - N]); + let log = ContractClassLog { + contract_address: self.tube_data.contract_address, + log: Log { fields: padded_log_fields }, + }; self.contract_class_logs_preimages.push(log); let log_hash = poseidon2_hash_subarray_variable(padded_log_fields, N); self.tube_data.add_contract_class_log_hash(log_hash, N); @@ -1004,24 +1007,24 @@ mod tests { } offset += total_private_logs_len; // cc logs - let total_contract_class_logs_len = NUM_CC_LOGS * (cc_log.len() + 1); + let total_contract_class_logs_len = NUM_CC_LOGS * (cc_log.len() + 2); let contract_class_logs_prefix = encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, total_contract_class_logs_len); reconstructed_tx_effects[offset] = contract_class_logs_prefix; offset += 1; for i in 0..NUM_CC_LOGS { - let siloed_log = silo_contract_class_log( - builder.contract_class_logs_preimages.storage()[i], - builder.tube_data.contract_address, - ); + let siloed_log = + silo_contract_class_log(builder.contract_class_logs_preimages.storage()[i]); let log_len = builder.tube_data.contract_class_logs_hashes.storage()[i].log_hash.length; if log_len != 0 { reconstructed_tx_effects[offset] = log_len as Field; offset += 1; + reconstructed_tx_effects[offset] = builder.tube_data.contract_address.to_field(); + offset += 1; } - for j in 0..CONTRACT_CLASS_LOG_SIZE_IN_FIELDS { + for j in 0..CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS { if j < log_len { - reconstructed_tx_effects[offset] = siloed_log.fields[j]; + reconstructed_tx_effects[offset] = siloed_log.log.fields[j]; offset += 1; } } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr index 5fe9ba87c5aa..26b6a8e7332f 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr @@ -183,12 +183,13 @@ mod tests { abis::{ append_only_tree_snapshot::AppendOnlyTreeSnapshot, constant_rollup_data::ConstantRollupData, contract_class_log::ContractClassLog, - nullifier_leaf_preimage::NullifierLeafPreimage, public_data_write::PublicDataWrite, - side_effect::OrderedValue, sponge_blob::SpongeBlob, tree_snapshots::TreeSnapshots, + log::Log, nullifier_leaf_preimage::NullifierLeafPreimage, + public_data_write::PublicDataWrite, side_effect::OrderedValue, sponge_blob::SpongeBlob, + tree_snapshots::TreeSnapshots, }, address::EthAddress, constants::{ - ARCHIVE_HEIGHT, AVM_VK_INDEX, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + ARCHIVE_HEIGHT, AVM_VK_INDEX, CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, CONTRACT_CLASS_LOGS_PREFIX, L2_L1_MSGS_PREFIX, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTES_PREFIX, NULLIFIERS_PREFIX, @@ -205,7 +206,7 @@ mod tests { fixtures::{self, merkle_tree::generate_full_sha_tree}, merkle_tree_utils::NonEmptyMerkleTree, }, - traits::{Empty, Hash, Serialize}, + traits::{Empty, Hash, Serialize, ToField}, utils::{arrays::array_concat, field::field_from_bytes}, }; @@ -292,9 +293,12 @@ mod tests { // Exists separately to allow us to append correct log preimages and hashes unconstrained fn append_contract_class_log(&mut self, log_fields: [Field; N]) { - let padded_log_fields: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS] = - array_concat(log_fields, [0; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - N]); - let log = ContractClassLog::new(padded_log_fields); + let padded_log_fields: [Field; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS] = + array_concat(log_fields, [0; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - N]); + let log = ContractClassLog { + contract_address: self.tube_data.contract_address, + log: Log { fields: padded_log_fields }, + }; self.contract_class_logs_preimages.push(log); let log_hash = poseidon2_hash_subarray_variable(padded_log_fields, N); self.tube_data.add_contract_class_log_hash(log_hash, N); @@ -452,7 +456,7 @@ mod tests { + 1 // L2 to L1 msgs and prefix + NUM_PUB_LOGS * PUBLIC_LOG_SIZE_IN_FIELDS + 1 // public logs and prefix - + NUM_CC_LOGS * (cc_log.len() + 1) + + NUM_CC_LOGS * (cc_log.len() + 2) + 1 // contract class logs and prefix + 2 + 1 // single public data update (2 fields) and prefix @@ -575,24 +579,24 @@ mod tests { } offset += NUM_PUB_LOGS * PUBLIC_LOG_SIZE_IN_FIELDS; // cc logs - let total_contract_class_logs_len = NUM_CC_LOGS * (cc_log.len() + 1); + let total_contract_class_logs_len = NUM_CC_LOGS * (cc_log.len() + 2); let contract_class_logs_prefix = encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, total_contract_class_logs_len); reconstructed_tx_effects[offset] = contract_class_logs_prefix; offset += 1; for i in 0..NUM_CC_LOGS { - let siloed_log = silo_contract_class_log( - builder.contract_class_logs_preimages.storage()[i], - builder.tube_data.contract_address, - ); + let siloed_log = + silo_contract_class_log(builder.contract_class_logs_preimages.storage()[i]); let log_len = builder.tube_data.contract_class_logs_hashes.storage()[i].log_hash.length; if log_len != 0 { reconstructed_tx_effects[offset] = log_len as Field; offset += 1; + reconstructed_tx_effects[offset] = builder.tube_data.contract_address.to_field(); + offset += 1; } - for j in 0..CONTRACT_CLASS_LOG_SIZE_IN_FIELDS { + for j in 0..CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS { if j < log_len { - reconstructed_tx_effects[offset] = siloed_log.fields[j]; + reconstructed_tx_effects[offset] = siloed_log.log.fields[j]; offset += 1; } } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr index dde44bb4932b..503c640cce13 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/components.nr @@ -9,17 +9,18 @@ use dep::types::{ public_data_write::PublicDataWrite, public_log::PublicLog, sponge_blob::SpongeBlob, }, constants::{ - AZTEC_MAX_EPOCH_DURATION, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, CONTRACT_CLASS_LOGS_PREFIX, - L2_L1_MSGS_PREFIX, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, - MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, - MAX_PUBLIC_LOGS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTES_PREFIX, - NULLIFIERS_PREFIX, PRIVATE_LOG_SIZE_IN_FIELDS, PRIVATE_LOGS_PREFIX, - PUBLIC_DATA_UPDATE_REQUESTS_PREFIX, PUBLIC_LOG_SIZE_IN_FIELDS, PUBLIC_LOGS_PREFIX, - REVERT_CODE_PREFIX, TX_FEE_PREFIX, TX_START_PREFIX, + AZTEC_MAX_EPOCH_DURATION, CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, CONTRACT_CLASS_LOGS_PREFIX, L2_L1_MSGS_PREFIX, + MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, + MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, MAX_PUBLIC_LOGS_PER_TX, + MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NOTES_PREFIX, NULLIFIERS_PREFIX, + PRIVATE_LOG_SIZE_IN_FIELDS, PRIVATE_LOGS_PREFIX, PUBLIC_DATA_UPDATE_REQUESTS_PREFIX, + PUBLIC_LOG_SIZE_IN_FIELDS, PUBLIC_LOGS_PREFIX, REVERT_CODE_PREFIX, TX_FEE_PREFIX, + TX_START_PREFIX, }, hash::accumulate_sha256, merkle_tree::VariableMerkleTree, - traits::{Empty, Serialize}, + traits::{Empty, Serialize, ToField}, utils::arrays::{array_length, array_merge}, }; use blob::blob_public_inputs::BlockBlobPublicInputs; @@ -151,7 +152,7 @@ pub fn encode_blob_prefix(input_type: u8, array_len: u32) -> Field { // MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX public data update requests -> MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 2 fields // MAX_PRIVATE_LOGS_PER_TX * PRIVATE_LOG_SIZE_IN_FIELDS fields for private logs // MAX_PUBLIC_LOGS_PER_TX * PUBLIC_LOG_SIZE_IN_FIELDS fields for public logs -// MAX_CONTRACT_CLASS_LOGS_PER_TX * (CONTRACT_CLASS_LOG_SIZE_IN_FIELDS + 1) fields for contract class logs +// MAX_CONTRACT_CLASS_LOGS_PER_TX * (CONTRACT_CLASS_LOG_SIZE_IN_FIELDS + 1) fields for contract class logs (+1 for log_len) // 7 fields for prefixes for each of the above categories pub(crate) global TX_EFFECTS_BLOB_HASH_INPUT_FIELDS: u32 = 1 + 1 @@ -375,14 +376,22 @@ fn get_tx_effects_hash_input( if log_len != 0 { assert_eq(tx_effects_hash_input[offset], log_len as Field); offset += 1; - // plus one for prefix - total_cc_log_len += log_len + 1; + assert_eq( + tx_effects_hash_input[offset], + contract_class_logs[j].contract_address.to_field(), + ); + offset += 1; + // plus one for prefix, one for address + total_cc_log_len += log_len + 2; check_elt = true; } - for k in 0..CONTRACT_CLASS_LOG_SIZE_IN_FIELDS { + for k in 0..CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS { check_elt &= k != log_len; if check_elt { - assert_eq(tx_effects_hash_input[offset + k], contract_class_logs[j].fields[k]); + assert_eq( + tx_effects_hash_input[offset + k], + contract_class_logs[j].log.fields[k], + ); } } offset += log_len; @@ -529,7 +538,7 @@ unconstrained fn get_tx_effects_hash_input_helper( } // CONTRACT CLASS LOGS - let num_cc_logs = array_length(contract_class_logs); + let num_cc_logs = array_length(contract_class_logs_lengths); if num_cc_logs != 0 { let prefix_index = offset; let mut total_cc_log_len = 0; @@ -541,12 +550,15 @@ unconstrained fn get_tx_effects_hash_input_helper( // prefix this log with its field length tx_effects_hash_input[offset] = log_len as Field; offset += 1; + // add its address (not using a .serialise here because it would involve expensive .concat) + tx_effects_hash_input[offset] = contract_class_logs[j].contract_address.to_field(); + offset += 1; for k in 0..log_len { - tx_effects_hash_input[offset] = contract_class_logs[j].fields[k]; + tx_effects_hash_input[offset] = contract_class_logs[j].log.fields[k]; offset += 1; } - // plus one for prefix - total_cc_log_len += log_len + 1; + // plus one for prefix, one for address + total_cc_log_len += log_len + 2; } let contract_class_logs_prefix = encode_blob_prefix(CONTRACT_CLASS_LOGS_PREFIX, total_cc_log_len); diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr index 80b8e80e6f1e..67d9eab3b09e 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr @@ -1,30 +1,45 @@ use crate::{ abis::{log::Log, log_hash::ScopedLogHash}, - constants::CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + address::AztecAddress, + constants::CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, hash::{poseidon2_hash_subarray_variable, silo_contract_class_log}, - traits::is_empty, + traits::{Empty, is_empty}, utils::arrays::validate_trailing_zeroes, }; -// TODO(MW): add new constant for this - the below is just the largest combination atm -pub type ContractClassLog = Log; +pub struct ContractClassLog { + pub log: Log, + pub contract_address: AztecAddress, +} + +impl Empty for ContractClassLog { + fn empty() -> Self { + ContractClassLog { log: Log::empty(), contract_address: AztecAddress::empty() } + } +} pub fn validate_and_silo_contract_class_log( log: ContractClassLog, log_hash: ScopedLogHash, ) -> ContractClassLog { + // Validate address + assert_eq( + log_hash.contract_address, + log.contract_address, + "mismatched contract class log address", + ); // Validate length - let length = validate_trailing_zeroes(log.fields); + let length = validate_trailing_zeroes(log.log.fields); assert_eq(log_hash.log_hash.length, length, "mismatched contract class log length"); + // Validate hash if length == 0 { assert(is_empty(log_hash), "mismatched contract class log hash"); } else { - // Validate hash - let hashed_log = poseidon2_hash_subarray_variable(log.fields, length); + let hashed_log = poseidon2_hash_subarray_variable(log.log.fields, length); assert_eq(log_hash.log_hash.value, hashed_log, "mismatched contract class log hash"); } // Silo log - silo_contract_class_log(log, log_hash.contract_address) + silo_contract_class_log(log) } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr index 9253823aa62f..2e03d167f90e 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/log_hash.nr @@ -9,7 +9,7 @@ use crate::{ pub struct LogHash { pub value: Field, pub counter: u32, - pub length: u32, // TODO(MW): is this still required? + pub length: u32, } impl Ordered for LogHash { diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 0f720f642757..2218f7b36a53 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -255,8 +255,9 @@ pub global PRIVATE_LOG_DATA_LENGTH: u32 = PRIVATE_LOG_SIZE_IN_FIELDS + 1 /* counter */; pub global SCOPED_PRIVATE_LOG_DATA_LENGTH: u32 = PRIVATE_LOG_DATA_LENGTH + 1; // TODO(MW): add new constant for this - the below is just the largest combination atm -pub global CONTRACT_CLASS_LOG_SIZE_IN_FIELDS: u32 = MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS +pub global CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS: u32 = MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS + REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS; +pub global CONTRACT_CLASS_LOG_SIZE_IN_FIELDS: u32 = CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS + 1; // This includes the contract address, since it is always emitted with a contract class log pub global LOG_HASH_LENGTH: u32 = 3; pub global SCOPED_LOG_HASH_LENGTH: u32 = LOG_HASH_LENGTH + 1; pub global NOTE_HASH_LENGTH: u32 = 2; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr index f8154ec65e95..988a7b16fab1 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr @@ -124,15 +124,15 @@ fn compute_siloed_contract_class_log_field( poseidon2_hash([contract_address.to_field(), first_field]) } -pub fn silo_contract_class_log( - contract_class_log: ContractClassLog, - contract_address: AztecAddress, -) -> ContractClassLog { - if contract_address.is_zero() { +pub fn silo_contract_class_log(contract_class_log: ContractClassLog) -> ContractClassLog { + if contract_class_log.contract_address.is_zero() { contract_class_log } else { let mut log = contract_class_log; - log.fields[0] = compute_siloed_contract_class_log_field(contract_address, log.fields[0]); + log.log.fields[0] = compute_siloed_contract_class_log_field( + contract_class_log.contract_address, + log.log.fields[0], + ); log } } diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts index 8fb20e12e6b7..92196ec70290 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts @@ -423,8 +423,7 @@ export class LogStore { let logIndex = typeof filter.afterLog?.logIndex === 'number' ? filter.afterLog.logIndex + 1 : 0; for (; logIndex < txLogs.length; logIndex++) { const log = txLogs[logIndex]; - // TODO(MW): fix hack for contract class - if (!filter.contractAddress || (log instanceof PublicLog && log.contractAddress.equals(filter.contractAddress))) { + if (!filter.contractAddress || log.contractAddress.equals(filter.contractAddress)) { if (log instanceof ContractClassLog) { results.push(new ExtendedContractClassLog(new LogId(blockNumber, txIndex, logIndex), log)); } else { diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index 590f3d635305..a39abfec756a 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -35,14 +35,8 @@ import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, PUBLIC_LOG_DATA_SIZE_IN_FIELDS, - REGISTERER_CONTRACT_ADDRESS, } from '@aztec/constants'; import { createLogger } from '@aztec/foundation/log'; -import { - REGISTERER_CONTRACT_CLASS_REGISTERED_TAG, - REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG, - REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG, -} from '@aztec/protocol-contracts'; import { type ArchiverDataStore, type ArchiverL1SynchPoint } from '../archiver_store.js'; import { type DataRetrieval } from '../structs/data_retrieval.js'; @@ -723,20 +717,12 @@ export class MemoryArchiverStore implements ArchiverDataStore { if (blockLogs) { for (let logIndex = 0; logIndex < blockLogs.length; logIndex++) { const log = blockLogs[logIndex]; - // TODO(MW): this is a hack - const thisContractAddress = [ - REGISTERER_CONTRACT_CLASS_REGISTERED_TAG, - REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG, - REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG, - ].includes(log.fields[0]) - ? AztecAddress.fromNumber(REGISTERER_CONTRACT_ADDRESS) - : AztecAddress.ZERO; const thisTxEffect = block.data.body.txEffects.filter(effect => effect.contractClassLogs.includes(log))[0]; const thisTxIndexInBlock = block.data.body.txEffects.indexOf(thisTxEffect); const thisLogIndexInTx = thisTxEffect.contractClassLogs.indexOf(log); if ( (!txHash || thisTxEffect.txHash.equals(txHash)) && - (!contractAddress || thisContractAddress.equals(contractAddress)) && + (!contractAddress || log.contractAddress.equals(contractAddress)) && thisTxIndexInBlock >= txIndexInBlock && thisLogIndexInTx >= logIndexInTx ) { diff --git a/yarn-project/circuit-types/src/interfaces/archiver.test.ts b/yarn-project/circuit-types/src/interfaces/archiver.test.ts index 242f7f9cdcf4..ada18a7d4c2c 100644 --- a/yarn-project/circuit-types/src/interfaces/archiver.test.ts +++ b/yarn-project/circuit-types/src/interfaces/archiver.test.ts @@ -336,10 +336,10 @@ class MockArchiver implements ArchiverApi { expect(filter.contractAddress).toBeInstanceOf(AztecAddress); return { logs: [await ExtendedPublicLog.random()], maxLogsHit: true }; } - getContractClassLogs(filter: LogFilter): Promise { + async getContractClassLogs(filter: LogFilter): Promise { expect(filter.txHash).toBeInstanceOf(TxHash); expect(filter.contractAddress).toBeInstanceOf(AztecAddress); - return Promise.resolve({ logs: [ExtendedContractClassLog.random()], maxLogsHit: true }); + return Promise.resolve({ logs: [await ExtendedContractClassLog.random()], maxLogsHit: true }); } getPublicFunction(address: AztecAddress, selector: FunctionSelector): Promise { expect(address).toBeInstanceOf(AztecAddress); diff --git a/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts b/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts index dee298892fe5..d7bc38d1d3e7 100644 --- a/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts +++ b/yarn-project/circuit-types/src/interfaces/aztec-node.test.ts @@ -526,9 +526,9 @@ class MockAztecNode implements AztecNode { expect(filter.contractAddress).toBeInstanceOf(AztecAddress); return { logs: [await ExtendedPublicLog.random()], maxLogsHit: true }; } - getContractClassLogs(filter: LogFilter): Promise { + async getContractClassLogs(filter: LogFilter): Promise { expect(filter.contractAddress).toBeInstanceOf(AztecAddress); - return Promise.resolve({ logs: [ExtendedContractClassLog.random()], maxLogsHit: true }); + return Promise.resolve({ logs: [await ExtendedContractClassLog.random()], maxLogsHit: true }); } getLogsByTags(tags: Fr[]): Promise { expect(tags).toHaveLength(1); diff --git a/yarn-project/circuit-types/src/interfaces/pxe.test.ts b/yarn-project/circuit-types/src/interfaces/pxe.test.ts index 7d2b11b360b0..b2d540813bf9 100644 --- a/yarn-project/circuit-types/src/interfaces/pxe.test.ts +++ b/yarn-project/circuit-types/src/interfaces/pxe.test.ts @@ -481,9 +481,9 @@ class MockPXE implements PXE { expect(filter.contractAddress).toEqual(this.address); return { logs: [await ExtendedPublicLog.random()], maxLogsHit: true }; } - getContractClassLogs(filter: LogFilter): Promise { + async getContractClassLogs(filter: LogFilter): Promise { expect(filter.contractAddress).toEqual(this.address); - return Promise.resolve({ logs: [ExtendedContractClassLog.random()], maxLogsHit: true }); + return Promise.resolve({ logs: [await ExtendedContractClassLog.random()], maxLogsHit: true }); } getBlockNumber(): Promise { return Promise.resolve(1); diff --git a/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts b/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts index 6d3a2c9efe54..bc980531779b 100644 --- a/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts +++ b/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts @@ -19,8 +19,8 @@ export class ExtendedContractClassLog { public readonly log: ContractClassLog, ) {} - static random() { - return new ExtendedContractClassLog(LogId.random(), ContractClassLog.random()); + static async random() { + return new ExtendedContractClassLog(LogId.random(), await ContractClassLog.random()); } static get schema() { diff --git a/yarn-project/circuit-types/src/private_execution_result.ts b/yarn-project/circuit-types/src/private_execution_result.ts index 2d968f1ce6fb..e90b19b7779c 100644 --- a/yarn-project/circuit-types/src/private_execution_result.ts +++ b/yarn-project/circuit-types/src/private_execution_result.ts @@ -200,7 +200,7 @@ export class PrivateCallExecutionResult { await timesParallel(nested, () => PrivateCallExecutionResult.random(0)), [await CountedPublicExecutionRequest.random()], await PublicExecutionRequest.random(), - [new CountedContractClassLog(ContractClassLog.random(), randomInt(10))], + [new CountedContractClassLog(await ContractClassLog.random(), randomInt(10))], ); } } diff --git a/yarn-project/circuit-types/src/tx/tx.ts b/yarn-project/circuit-types/src/tx/tx.ts index fff6ceea0ddc..56d4bbffc3fd 100644 --- a/yarn-project/circuit-types/src/tx/tx.ts +++ b/yarn-project/circuit-types/src/tx/tx.ts @@ -312,7 +312,7 @@ export class Tx extends Gossipable { return new Tx( PrivateKernelTailCircuitPublicInputs.emptyWithNullifier(), ClientIvcProof.empty(), - [ContractClassLog.random()], + [await ContractClassLog.random()], [await PublicExecutionRequest.random()], await PublicExecutionRequest.random(), ); diff --git a/yarn-project/circuit-types/src/tx_effect.ts b/yarn-project/circuit-types/src/tx_effect.ts index 877f1d1b5143..acf08c645dc7 100644 --- a/yarn-project/circuit-types/src/tx_effect.ts +++ b/yarn-project/circuit-types/src/tx_effect.ts @@ -221,7 +221,7 @@ export class TxEffect { makeTuple(MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, () => new PublicDataWrite(Fr.random(), Fr.random())), makeTuple(MAX_PRIVATE_LOGS_PER_TX, () => new PrivateLog(makeTuple(PRIVATE_LOG_SIZE_IN_FIELDS, Fr.random))), await makeTupleAsync(numPublicCallsPerTx * numPublicLogsPerCall, PublicLog.random), - makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, () => ContractClassLog.random()), + await makeTupleAsync(MAX_CONTRACT_CLASS_LOGS_PER_TX, ContractClassLog.random), ); } @@ -360,11 +360,17 @@ export class TxEffect { } if (this.contractClassLogs.length) { const totalLogLen = this.contractClassLogs.reduce( - (total, log) => total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 1), + (total, log) => total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 2), 0, ); flattened.push(this.toPrefix(CONTRACT_CLASS_LOGS_PREFIX, totalLogLen)); - flattened.push(...this.contractClassLogs.flatMap(l => [new Fr(l.getEmittedLength()), ...l.getEmittedFields()])); + flattened.push( + ...this.contractClassLogs.flatMap(l => [ + new Fr(l.getEmittedLength()), + l.contractAddress.toField(), + ...l.getEmittedFields(), + ]), + ); } // The first value appended to each list of fields representing a tx effect is: @@ -448,7 +454,8 @@ export class TxEffect { let i = 0; while (i < length) { const logLen = flatContractClassLogs[i++].toNumber(); - const logFields = flatContractClassLogs.slice(i, (i += logLen)); + // +1 for address + const logFields = flatContractClassLogs.slice(i, (i += logLen + 1)); effect.contractClassLogs.push( ContractClassLog.fromFields( logFields.concat(new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - logLen).fill(Fr.ZERO)), diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.test.ts b/yarn-project/circuits.js/src/structs/contract_class_log.test.ts index 8c5fe9773706..27fd6038937b 100644 --- a/yarn-project/circuits.js/src/structs/contract_class_log.test.ts +++ b/yarn-project/circuits.js/src/structs/contract_class_log.test.ts @@ -1,13 +1,14 @@ -import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; +import { CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; +import { AztecAddress } from '../aztec-address/index.js'; import { ContractClassLog } from './contract_class_log.js'; describe('PublicLog', () => { let log: ContractClassLog; - beforeAll(() => { - log = ContractClassLog.random(); + beforeAll(async () => { + log = await ContractClassLog.random(); }); it('serializes to buffer and deserializes it back', () => { @@ -30,15 +31,19 @@ describe('PublicLog', () => { it('number of emitted fields is correct', () => { const smallLogFields = [new Fr(1), new Fr(2), new Fr(3)]; const smallLog = new ContractClassLog( - smallLogFields.concat(new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - smallLogFields.length).fill(Fr.ZERO)), + AztecAddress.fromField(Fr.ONE), + smallLogFields.concat(new Array(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - smallLogFields.length).fill(Fr.ZERO)), ); expect(smallLog.getEmittedFields()).toEqual(smallLogFields); expect(smallLog.getEmittedLength()).toBe(smallLogFields.length); - const largeLogFields = Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - smallLogFields.length }, () => + const largeLogFields = Array.from({ length: CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - smallLogFields.length }, () => Fr.random(), ); - const largeLog = new ContractClassLog(largeLogFields.concat(new Array(smallLogFields.length).fill(Fr.ZERO))); + const largeLog = new ContractClassLog( + AztecAddress.fromField(Fr.ONE), + largeLogFields.concat(new Array(smallLogFields.length).fill(Fr.ZERO)), + ); expect(largeLog.getEmittedFields()).toEqual(largeLogFields); expect(largeLog.getEmittedLength()).toBe(largeLogFields.length); }); diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.ts b/yarn-project/circuits.js/src/structs/contract_class_log.ts index 3c272ba4f6f3..c6dffdd7453d 100644 --- a/yarn-project/circuits.js/src/structs/contract_class_log.ts +++ b/yarn-project/circuits.js/src/structs/contract_class_log.ts @@ -1,4 +1,4 @@ -import { CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; +import { CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; import { poseidon2Hash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { schemas } from '@aztec/foundation/schemas'; @@ -7,28 +7,33 @@ import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/ import { inspect } from 'util'; import { z } from 'zod'; +import { AztecAddress } from './index.js'; + export class ContractClassLog { static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * CONTRACT_CLASS_LOG_SIZE_IN_FIELDS; // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' - // public fields: Tuple - constructor(public fields: Fr[]) { - if (fields.length !== CONTRACT_CLASS_LOG_SIZE_IN_FIELDS) { + // public fields: Tuple + constructor(public contractAddress: AztecAddress, public fields: Fr[]) { + if (fields.length !== CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS) { throw new Error( - `Invalid number of fields for ContractClassLog. Expected ${CONTRACT_CLASS_LOG_SIZE_IN_FIELDS}, got ${fields.length}`, + `Invalid number of fields for ContractClassLog. Expected ${CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS}, got ${fields.length}`, ); } } toFields(): Fr[] { - return this.fields; + return [this.contractAddress.toField(), ...this.fields]; } static fromFields(fields: Fr[] | FieldReader) { const reader = FieldReader.asReader(fields); // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' // return new ContractClassLog(reader.readFieldArray(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS)); - return new ContractClassLog(Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS }, () => reader.readField())); + return new ContractClassLog( + reader.readObject(AztecAddress), + Array.from({ length: CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS }, () => reader.readField()), + ); } isEmpty() { @@ -36,39 +41,42 @@ export class ContractClassLog { } static empty() { - return new ContractClassLog(new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS).fill(Fr.ZERO)); + return new ContractClassLog(AztecAddress.ZERO, new Array(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS).fill(Fr.ZERO)); } toBuffer(): Buffer { - return serializeToBuffer(this.fields); + return serializeToBuffer([this.contractAddress, this.fields]); } static fromBuffer(buffer: Buffer | BufferReader) { const reader = BufferReader.asReader(buffer); // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' // reader.readArray(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, Fr); - const fields = Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS }, () => + const address = reader.readObject(AztecAddress); + const fields = Array.from({ length: CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS }, () => reader.remainingBytes() == 0 ? Fr.ZERO : Fr.fromBuffer(reader), ); - return new ContractClassLog(fields); + return new ContractClassLog(address, fields); } clone() { return ContractClassLog.fromBuffer(this.toBuffer()); } - static random() { - // TODO(MW): Lazily used /2 instead of CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, because this keeps overfilling block blobs + static async random() { + // TODO(MW): Lazily used /2 instead of CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, because this keeps overfilling block blobs // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' - // makeTuple(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, Fr.random); - const fields = Array.from({ length: Math.ceil(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS / 2) }, () => Fr.random()); + // makeTuple(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, Fr.random); + const fields = Array.from({ length: Math.ceil(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS / 2) }, () => Fr.random()); return new ContractClassLog( - fields.concat(Array.from({ length: Math.floor(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS / 2) }, () => Fr.ZERO)), + await AztecAddress.random(), + fields.concat(Array.from({ length: Math.floor(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS / 2) }, () => Fr.ZERO)), ); } getEmittedLength() { // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back. + // Does not include address and length prefix. return this.getEmittedFields().length; } @@ -90,9 +98,10 @@ export class ContractClassLog { static get schema() { return z .object({ + contractAddress: AztecAddress.schema, fields: z.array(schemas.Fr), }) - .transform(({ fields }) => ContractClassLog.fromFields(fields)); + .transform(({ contractAddress, fields }) => ContractClassLog.fromFields([contractAddress.toField(), ...fields])); } [inspect.custom](): string { diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index 54e2203c7728..5c7d6b89eb28 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -4,7 +4,7 @@ import { AVM_PROOF_LENGTH_IN_FIELDS, AZTEC_MAX_EPOCH_DURATION, BLOBS_PER_BLOCK, - CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, FIELDS_PER_BLOB, GeneratorIndex, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, @@ -197,7 +197,10 @@ function makeNullifier(seed: number) { function makeContractClassLog(seed: number) { // The '* 1' removes the 'Type instantiation is excessively deep and possibly infinite. ts(2589)' err - return new ContractClassLog(makeTuple(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS * 1, fr, seed)); + return new ContractClassLog( + makeAztecAddress(seed), + makeTuple(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS * 1, fr, seed + 1), + ); } function makePrivateLog(seed: number) { diff --git a/yarn-project/constants/src/constants.gen.ts b/yarn-project/constants/src/constants.gen.ts index 83ef00bc0221..b7b032cb4a6f 100644 --- a/yarn-project/constants/src/constants.gen.ts +++ b/yarn-project/constants/src/constants.gen.ts @@ -149,7 +149,8 @@ export const READ_REQUEST_LENGTH = 2; export const TREE_LEAF_READ_REQUEST_LENGTH = 2; export const PRIVATE_LOG_DATA_LENGTH = 20; export const SCOPED_PRIVATE_LOG_DATA_LENGTH = 21; -export const CONTRACT_CLASS_LOG_SIZE_IN_FIELDS = 3019; +export const CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS = 3019; +export const CONTRACT_CLASS_LOG_SIZE_IN_FIELDS = 3020; export const LOG_HASH_LENGTH = 3; export const SCOPED_LOG_HASH_LENGTH = 4; export const NOTE_HASH_LENGTH = 2; diff --git a/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts b/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts index bec32a8c542a..87ad5b15c6db 100644 --- a/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts +++ b/yarn-project/end-to-end/src/e2e_deploy_contract/contract_class_registration.test.ts @@ -66,6 +66,10 @@ describe('e2e_deploy_contract contract class registration', () => { ); const logs = await aztecNode.getContractClassLogs({ txHash: registrationTxReceipt.txHash }); expect(logs.logs.length).toEqual(1); + + // TODO(#10007): The below is temporary as it's commented out on a below test + const logData = logs.logs[0].log.toBuffer(); + writeTestData('yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex', logData); }); // TODO(#10007) Remove this test. We should always broadcast public bytecode. @@ -88,7 +92,7 @@ describe('e2e_deploy_contract contract class registration', () => { // TODO(#10007) Enable this. // const logs = await aztecNode.getContractClassLogs({ txHash: registrationTxReceipt.txHash }); // expect(logs.logs.length).toEqual(1); - // const logData = logs.logs[0].log.data; + // const logData = logs.logs[0].log.toBuffer(); // writeTestData('yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex', logData); const registeredClass = await aztecNode.getContractClass(contractClass.id); diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts index 97383034407f..9505a29078a8 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts @@ -50,7 +50,7 @@ import { AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, AZTEC_MAX_EPOCH_DURATION, BLOBS_PER_BLOCK, - CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, HONK_VERIFICATION_KEY_LENGTH_IN_FIELDS, type NESTED_RECURSIVE_PROOF_LENGTH, type NULLIFIER_TREE_HEIGHT, @@ -78,10 +78,10 @@ import type { BlockRootRollupData as BlockRootRollupDataNoir, BlockRootRollupInputs as BlockRootRollupInputsNoir, ConstantRollupData as ConstantRollupDataNoir, + ContractClassLog as ContractClassLogNoir, EmptyBlockRootRollupInputs as EmptyBlockRootRollupInputsNoir, FeeRecipient as FeeRecipientNoir, FixedLengthArray, - Log as LogNoir, MergeRollupInputs as MergeRollupInputsNoir, Field as NoirField, ParityPublicInputs as ParityPublicInputsNoir, @@ -308,25 +308,18 @@ export function mapBlockBlobPublicInputsFromNoir( * @param log - The ts contract class log. * @returns The noir contract class log. */ -export function mapContractClassLogToNoir(log: ContractClassLog): LogNoir { +export function mapContractClassLogToNoir(log: ContractClassLog): ContractClassLogNoir { return { - // @ts-expect-error - below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' - fields: Array.from({ length: CONTRACT_CLASS_LOG_SIZE_IN_FIELDS }, (_, idx) => - mapFieldToNoir(log.fields[idx]), - ) as Tuple, + log: { + // @ts-expect-error - below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' + fields: Array.from({ length: CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS }, (_, idx) => + mapFieldToNoir(log.fields[idx]), + ) as Tuple, + }, + contract_address: mapAztecAddressToNoir(log.contractAddress), }; } -/** - * Maps a contract class log from noir. - * @param log - The noir contract class log. - * @returns The ts contract class log. - */ -export function mapContractClassLogFromNoir(log: LogNoir) { - // @ts-expect-error - below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' - return new ContractClassLog(mapTupleFromNoir(log.fields, log.fields.length, mapFieldFromNoir)); -} - function mapPublicDataHintToNoir(hint: PublicDataHint): PublicDataHintNoir { return { leaf_slot: mapFieldToNoir(hint.leafSlot), diff --git a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts index 9a4e13fbeb52..c8600a85a9fa 100644 --- a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts +++ b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts @@ -23,7 +23,9 @@ const mockTxsWithCCLog = (numTxs: number) => numberOfRevertiblePublicCallRequests: 2, hasPublicTeardownCallRequest: true, }); - const contractClassLogs = Array(MAX_CONTRACT_CLASS_LOGS_PER_TX).fill(0).map(ContractClassLog.random); + const contractClassLogs = await Promise.all( + Array(MAX_CONTRACT_CLASS_LOGS_PER_TX).fill(0).map(ContractClassLog.random), + ); const logHashes = await Promise.all( contractClassLogs.map(async l => ScopedLogHash.fromFields([ diff --git a/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex b/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex index 5dbace9d23ef..24a463d78a2c 100644 --- a/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex +++ b/yarn-project/protocol-contracts/fixtures/ContractClassRegisteredEventData.hex @@ -1 +1 @@ -20cd27645f65c15a38720ca984aef936592f3938a705db706d068ad13fc58ae92146f63439ea2a890005e1c9a8a07134e04126c06d79a09c981f49ac701c472200000000000000000000000000000000000000000000000000000000000000011cc15db35c462bf2b8d14998121f5434364db024b7e2bddd0ccd0076cb02dd8801ebc21157ceca1255b54f0a5a4843ef36334372d8e1b0096787a648b464c1af00000000000000000000000000000000000000000000000000000000000048200026000204012700000104804d2600000403260202040126020304001f180003000002804c2d08804c0001240000004524000000b12702000104804d2602020400003a0d00010002270080430400052a0080440000000000000000010000000000000000002b00804500000000000000000000000000000000010000000000000000000000000000000000270080460400402700804704003827008048040004002700804904000e2700804a0400032700804b040100252400001e7a2802000200005189a4170a380102032602040400260206040300380406052c080102001000010501260302040100280202052c0e040500280502052c0e040526020504030000380205042c0d020400280402042c0e04022c0d020400280402042c0e0402002c0d020400280402042c0e04022c0d020400280402042c0e04022c0d02040000280402042c0e04022c0d020400280402042c0e0402260204040023020003000000015d220000019f26020304052c08000500100003002400001ea32c040000002c0d020300280302032c0e030200280202062c0d060526020704020038060700033a0d00030005220000019f28020003007a81a21e0a38010305260203010100260206000626020704012602080000260209040626020a010026020b04022300020005000001dd22000006e12c08010c26020d04040010010d0126030c04010000280c020d1f2c0007804a000d2c0d0c0d00280d020d2c0e0d0c2c08010d0000000102012c0e0c0d2c08010c00000102012c0e040c26020f04102c0800102c000c0d112c0c0c122c0c06130010000f002400001ec52c0400002c0c110e2602001004112c0800112c0c0d122c0c0c132c0c061400100010002400001ec52c040000002c0c120f26021104122c0800122c0c0d132c0c0c140010001100240000001fa52c0400002c0c1310002810020d00380d04112c0d110c1c0c0c0d002b0200001000000000000000000000000000ffffffffffffffffffffffffffffffff00ffffffff0e380d101123020011000002df24000020202c08010d260210040300001001100126030d040100280d02102c0c10112c0e0e1100281102112c0e0f00112c08010e26020f04070010010f0126030e040100280e020f2c0c0f102c0e00081000281002102c0e081000281002102c0e081000281002102c0e08100028001002102c0e081000281002102c0e08102c08010f00000102012c0e0e0f2c0800010e260210040a001001100126030e040100280e02102c0c10112c0e08110000281102112c0e081100281102112c0e031100281102112c0e08110028110211002c0e081100281102112c0e031100281102112c0e081100281102112c0e08110000281102112c0e03112c08011000000102012c0e0e102b02000e00083e791100d835097629f0067531fc15cafd79a89beecb39903f69572c636f4a5a2b02000011001a7f5efaad7f315c25a918f30cc8d7333fccab7ad7c90f14de81bcc52800f9935d2b02001200054aa86a73cb8a34525e5bbed6e43ba1198e860f5f395000268f71df4591bde4022b02001300209dcfbf2cfb57f9f6046f44d71ac6faf8007254afc7407c04eb621a6287cac1262c0801142602150407001001150126030014040100281402152c0c15162c0e0e1600281602162c0e111600281602162c000e0a1600281602162c0e121600281602162c0e131600281602162c0e0a162c000c040522000004c10c38050b0e2302000e00001c1822000004d32c0d0f052600020d000226021104060d3080480011001223020012000004f624000020322d0004000580032700800404000724000020442d088005000e00280e02110128000011804800122c0e0d1226020d04060d308043000d001123020011000005392400000020322d04000e80032700800404000724000020442d088005000500280500020d0128000d804300112c0e08112c0e050f2c0d100d2b02000e002df8b94000e5890e4e1377e05373fae69a1d754f6935e6a780b666947431f2cdcd2602110004090c3809111223020012000005a624000020322d04000d8003270080040400000a24000020442d088005000f00280f021100381109122c0e0e122b02000d00002ecd88d15967bc53b885912e0d16866154acb6aac2d3f85e27ca7eefb2c100908326020e040726021204090c380e1213230200130000060d24000020322d0004000f80032700800404000a24000020442d08800500110028110212003812000e132c0e0d1326020d040826020f04090c380d0f12230200120000064f2400000020322d04001180032700800404000a24000020442d088005000e00280e02000f00380f0d122c0e0a122c0e0e102c08010d26020f04040010010f0126030d00040100280e020f26021004090028050211260212040600280d021342f7000f0000110013001000280d020e00380e040f2c0d0f05370c000c0005002802020d002c0d0d0c26020e040200380d0e053a0d0005000c22000006e128020005003200b6bd200a3801050c2302000c000006fc22000008052c08010526020c0403000010010c012603050401002805020c1f3c0007000b000c2c0d050c00280c020c002c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e04052600020e040f2c08000f2c0c0c102c0c05110010000e0024000020d22c0400002c000c100d00280d020f00380f04102c0d100e26020f04102c0800102c0c0c112c000c05120010000f0024000020d22c0400002c0c110d00280d020c00380c040f002c0d0f051c0c050c002b02000d00000000000000000000000000ffffffffff00ffffffffffffffffffffffffffffff0e380c0d0f2302000f000007e1240000002020370c0005000e002802020d2c0d0d0c26020e040200380d0e053a0d000500000c220000080528020005008a4870ec0a3801050c2302000c000008202200000008b02c08010526020c04020010010c012603050401002805020c1f3c0007000007000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c0008010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05112c0c0006120010000e00240000214d2c0400002c0c100d3302000d002802020d2c0d000d0c26020e040200380d0e053a0d0005000c22000008b02802000500cd8c9a007a0a3801050c2302000c000008cb22000009d32c08010526020c0402001001000c012603050401002805020c1f3c00070007000c2c0d050c00280c020c2c0e000c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e00040f2c08000f2c0c0c102c0c05110010000e00240000222d2c0400002c0c10000d26020c040e2c08000e2c0c0d0f0010000c0024000022a82c0400002c0c0f00051e02000c060a380c050d2302000d0000096f26020e04003b09010e1c0c05000c0026020d040126020f040300380d0f0e2c0801050010010e01260305040100002805020e2c0e0d0e00280e020e2c0e0d0e26020e04030038050e0d2c0c0d000e2c0e0c0e002805020e2c0d0e0d26020f040200380e0f0c3a0d000c000d2200000009d32802000500f99f5a2d0a3801050c260205026f26020d026526020e00022026020f0272260210026c26021102772302000c00000a0c2200000cf62c0008011226021304020010011301260312040100281202131f3c000700070013002c0d121300281302132c0e13122c08011300000102012c0e12132c0801120000000102012c0e041226021504162c0800162c0c13172c0c12182c0c0619001000001500240000214d2c0400002c0c1714260213040126021604030038131615002c0801120010011501260312040100281202152c0e131500281502152c0e130015260215040300381215132c0c13152c0e141500281202152c0d15142602160004020038151613360d00130014260212000a2602130014260214001e260216000403260218040300381618172c080115001001170126031504010028150217002c0e161700281702172c0e1617260217040300381517162c0c16172c0e12170000281702172c0e131700281702172c0e141700281502142c0d14132602160400020038141612360d0012001326021202642602130248260214022c2602150200212c080116260217040e0010011701260316040100281602172c0c17182c0e00131800281802182c0e0d1800281802182c0e101800281802182c0e10180028001802182c0e051800281802182c0e141800281802182c0e0e1800281802182c000e111800281802182c0e051800281802182c0e0f1800281802182c0e10180000281802182c0e121800281802182c0e15182c080112260213040e00100113010026031204010028120213260214040d00381413142c0c13150c38151417160c0017172302001700000c342c0e081500281502152200000c152c0801130000010002012c0e1213260212040d2c0c040c2200000c4f0c380c1214230200140000001b9b2200000c612c0d130c260215040d062815021326021704030038151716002c0801140010011601260314040100281402162c0e151600281602162c0e1500162602170403003814171600280c02172d04001780032d04001680042d04000015800524000022d400281402162c0d16152602170402003816170c360d000c00001500280202142c0d14122602150402003814150c3a0d000c00122200000c00f62802000c0097b974f70a38010c122302001200000d11220000158c2c0801001226021304070010011301260312040100281202131f3c0007000900132c0d00121300281302132c0e13122c08011300000102012c0e12132c0801120000010002012c0e041226021504162c0800162c0c13172c0c1218001000150024000000231a2c0400002c0c1714002814021600381604172c0d17152c0d13142c0d12001626021804060c381618192302001900000da8240000203200281402180038001816192c0d191700381607180e381618192302001900000dcd24000023952600021a04060c38181a1b2302001b00000de42400002032002814021a00381a18001b2c0d1b190038160b180e3816181a2302001a00000e0924000023952c0e1400132c0e18121c0c1714051c0c140b001c0c1916051c0c16140026021704182c000800182c0c13192c0c121a2c0c061b001000170024000023a72c0400002c0c00191626021804192c0800192c0c131a2c0c121b2c0c061c00100018002400000023a72c0400002c0c1a17260219041a2c08001a2c0c131b2c0c121c001000190000240000231a2c0400002c0c1b18002818021300381304192c0d19121c0c120013002b02001800000000000000000000000000ffffffffffffffffffffffff00ffffffffffffffff0e381318192302001900000ee024000020202c0801130000000102012c0e0a132c08011800000102012c0e08182c08011900000102012600021a007f2c0e1a192c08011a000001020126021c041d2c08001d2c0c151e000010001c0024000024872c0400002c0c1e1b2c0d1b1500281502152c0e151b05002800148044001500380b1514260215041c2c08001c2c0c141d00100015002400000024872c0400002c0c1d0b2c0d0b1400281402142c0e140b26021402002600021502bc26021c026a26021d029b26021e02d32c08011f260220044500100100200126031f040100281f02202c0c20212c0e152100282102212c0e1c210028002102212c0e1d2100282102212c0e1e2100282102212c0e142100282102212c000e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210221002c0e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210200212c0e142100282102212c0e142100282102212c0e142100282102212c0e14002100282102212c0e142100282102212c0e142100282102212c0e14210028210002212c0e142100282102212c0e142100282102212c0e142100282102212c0e00142100282102212c0e142100282102212c0e142100282102212c0e14210028002102212c0e142100282102212c0e142100282102212c0e142100282102212c000e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210221002c0e142100282102212c0e142100282102212c0e142100282102212c0e14210000282102212c0e142100282102212c0e142100282102212c0e14210028210200212c0e142100282102212c0e142100282102212c0e142100282102212c0e14002100282102212c0e142100282102212c0e142100282102212c0e14210028210002212c0e142100282102212c0e142100282102212c0e142100282102212c0e00142100282102212c0e142100282102212c0e142100282102212c0e14210028002102212c0e142100282102212c0e142100282102212c0e142100282102212c000e14212c0e1f1a260214042026021504242c0c040c22000012250c380c141c002302001c00001a9022000012372c0d1a0b2802000c045be0cd19280200140400bb67ae8528020015043c6ef3722802001a04a54ff53a2802001b04510e527f002802001c049b05688c2802001d041f83d9ab2802001e046a09e6672c08011f002602200409001001200126031f040100281f02202c0c20212c0e1e210028210002212c0e142100282102212c0e152100282102212c0e1a2100282102212c0e001b2100282102212c0e1c2100282102212c0e1d2100282102212c0e0c212c0800010c00000102012c0e1f0c2c0801140000010201260215044426021c04202c000800202c0c0b212c0c15222c0c04230010001c0024000024cd2c0400002c0c00211a2c0c221b2c0d1a1c00281c021c2c0e1c1a2c0e1b140b28001b8046001c002302001c0000134e220000138e2c08011b26021c04090010011c0126031b04000100281a021c00281f021d00281b021e3f3f001e001d001c2c0d1b1a00281a00021a2c0e1a1b2c0e1b0c220000138e26021c041d2c08001d2c0c0b1e2c0c15001f2d08804600200010001c0024000024cd2c0400002c0c1e1a2c0c1f1b2c0d001a0b00280b020b2c0e0b1a2c0e1b140b28001b8046000b2302000b000013e10022000013ea2c0e041422000013ea2c0d140b26021b008626021d041e2c0800001e2c0c1a1f2c0c0b202c0c0b212c0c1b220010001d0024000027bb2c040000002c0c1f1c2c0d1c1a00281a021a2c0e1a1c00380b071a0e380b1a1b2302001b000000144224000023952c0e1a142c0d1c0b00280b020b2c0e0b1c0d30804700001a000b2302000b0000146822000014b02c0d0c0b2c08011a26021b0409001000011b0126031a040100281c021b00280b021d00281a021e3f3f001e001d001b002c0d1a0b00280b020b2c0e0b1a2c0e1a0c2c0e041422000014b02c0d140b2600021a041d2c08001d2c0c1c1e2c0c0b1f2c0c15200010001a0024000028d32c000400002c0c1e142c0d140b00280b020b2c0e0b142c0d0c0b260215041a2c0800001a2c0c141b2c0c0b1c00100015002400002d972c0400002c0c1b0c2c0d0c000b00280b020b2c0e0b0c260214041a2c08001a2c0c0c1b0010001400240000002fbf2c0400002c0c1b0b26020c041a2c08001a2c0c131b2c0c181c2c0c191d002c0c0b1e2c0c161f2c0c12202c0c17210010000c00240000312e2c0400000000280202122c0d120c2602130402003812130b3a0d000b000c220000158c280200000b009756f6200a38010b0c2302000c000015a7220000174d2c08010b2602000c04050010010c0126030b040100280b020c1f2c00078048000c2c0d0b0c0000280c020c2c0e0c0b2c08010c00000102012c0e0b0c2c08010b00000102012c000e040b26021304142c0800142c0c0c152c0c0b162c0c06170010001300240000003db02c0400002c0c151226021404152c0800152c0c0c162c0c0b172c0c06001800100014002400003db02c0400002c0c161326021504162c0800162c0c0c00172c0c0b1800100015002400003e902c0400002c0c171400281402160038160004172c0d17151c0c1514002b02001600000000000000000000000000ffffff00ffffffffffffffffffffffffffffffffff0e3814161723020017000016a924000000202026021604172c0800172c0c0c182c0c0b192c0c061a0010001600240000003db02c0400002c0c18142c08010b00000102012c0e0a0b2c08010c0000000102012c0e080c2c0801080000010201260216004a2c0e160826021604172c000800172c0c0b182c0c0c192c0c081a2c0c121b2c0c131c2c0c151d2c0c141e000010001600240000312e2c040000002802020c2c0d0c0b260212040200380c0012083a0d0008000b220000174d2802000800eb2b616b0a3801080b2302000b0000001768220000195c2c0801012602080407001001080126030104010028010002081f3c0007000900082c0d010700280702072c0e07012c0801070000010200012c0e01072c08010100000102012c0e040126020904122c0800122c0c0713002c0c01142c0c0615001000090024000023a72c0400002c0c130826020b0412002c0800122c0c07132c0c01142c0c06150010000b0024000023a72c0400002c000c130926020c04122c0800122c0c07132c0c01142c0c06150010000c002400000023a72c0400002c0c130b26021204132c0800132c0c07142c0c0115001000001200240000231a2c0400002c0c140c26021304142c0800142c0c0c1500100000130024000022a82c0400002c0c151226021304142c0800142c0c07152c0c0100162c0c0617001000130024000023a72c0400002c0c150c26021404152c080000152c0c07162c0c01172c0c0618001000140024000023a72c0400002c0c1613001e020001030a3801080623020006000018cb2400003f0b1e020001040a380100090623020006000018e22400003f1d1e020001050a38010b062302000600000018f92400003f2f1e020001060a3801120623020006000019102400003f411e00020001080a38010c0623020006000019272400003f531e020001070a3801130006230200060000193e2400003f6500280202072c0d070626020804020038070008013a0d00010006220000195c260201026e2602020274260206026326020700026b260208027326020902552c08010b26020c04110010010c0126030b04010000280b020c2c0c0c122c0e091200281202122c0e011200281202122c0e07120000281202122c0e011200281202122c0e051200281202122c0e11120028120200122c0e011200281202122c0e0e1200281202122c0e081200281202122c0e0d001200281202122c0e101200281202122c0e0d1200281202122c0e06120028120002122c0e021200281202122c0e051200281202122c0e0f120a380a0301230200000100001a8f26020204122c080105260206041200100106012c0c0506290300000605e58f985907316290002806020600280b020726020804102d0400078000032d04000680042d040008800524000022d4260207041000380607062c0e04000600280602063b0d0502252c0d1a1c0128000c8048001d0e380c1d1e230200001e00001aae240000239526021f04200c380c1f202302002000001ac524000000203200281b021f00381f0c202c0d201e26022004440c381d2021230200210000001aea24000020322d04001c80032700800404004524000020442d08800500001f00281f02200038201d212c0e1e2100380c151c0e380c1c1d2302001d0000001b27240000239526021e04200c380c1e202302002000001b3e24000020320000280b021e00381e0c202c0d201d26022004440c381c20212302002100001b630024000020322d04001f80032700800404004524000020442d088005001e0028001e02200038201c212c0e1d212c0e1e1a00380c071c2c0c1c0c22000012252c000d1314260217040d0c380c17182302001800001bb624000020320028160217000038170c182c0d18151c0c151700260218040d0c380c18192302001900001b00e024000020322d04001480032700800404000e24000020442d08800500150000281502180038180c192c0e17192c0e151300380c07142c0c140c2200000c4f002c0d0f0e26021204020c380512132302001300001c33240000203200280d02001200381205132c0d13111c0c1113051c0c13120002381112130928001380440000151c0c1516051c0c161300023815131609280016804400150528001380440000160038161213053080450015001200381312160a38111612230200120000001c9f26021704003b0901170438050b1126021604060c38111617230200170000001cbb24000020322d04000e80032700800404000724000020442d088005000012002812021600381611172c0e1317003811070e26021304060c380e1316230002001600001cfd24000020322d04001280032700800404000724000020442d00088005001100281102130038130e162c0e15162c0e110f2c0d100e0528000500804a001126021304060c381113152302001500001d4a240000203200281402001300381311152c0d1512003811071326021604060c38131617230200170000001d742400002032002814021600381613172c0d17150038110b162602180406000c381618192302001900001d9e2400002032002814021800381816192c0d19001726021804090c381118192302001900001dc324000020322d04000e8003270000800404000a24000020442d0880050016002816021800381811192c0e12190026021104090c381311122302001200001e0024000020322d0400168003270000800404000a24000020442d088005000e00280e021100381113122c0e151200003813071126021304090c381113152302001500001e4224000020322d04000e0080032700800404000a24000020442d0880050012002812021300381311152c000e17152c0e1210003805070e2c0c0e0522000004c1270080040478000d00000000800480032300800300001ea22901000105f7a1f3afa5add4ca3b01010225002400001e7a1e020001011e020002000a380102032302000300001ec4240000003f77252400001e7a26020604072c0800072c0c01082c0c02090010000600240000001fa52c0400002c0c080526020100060a38030102260201040000280502000700380701082c0d08062302000200001f972200001f1726020100080a38030001022302000200001f522200001f2e260201001b0a38030102230200020000001f4926020504003b0901052c0c06042200001fa01c0c0601002b0200020000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000e380102032302000300001f8e24000020202c0c06042200001fa02c0c0604002200001fa02c0c0401252400001e7a2c0d01032c0d020426020604030c38040006072302000700001fc92400002032002803020600380604072c0d07052c0800010626020704020010010701260306040100280602072c0c07082c0e050826000205040100380405070e38040708230200080000201324000023952c0e0301002c0e07022c0c06012529010001055a02e41bb51ea99f3b01010225290100010005e89d09fea1112d0e3b010102252d01800380060b0080060002800723008000070000205f220000206a2d008003800522000020d12d000001800501000001008004000101008003800480092d008003800a2d008005800b0b00800a800980000c2300800c000020bd2d01800a80082d028008800b0100800a0002800a010000800b0002800b220000208c27018005040001030080060002800622000020d100252400001e7a2c0d01032c0d020426020604020c380406072302000700002000f62400002032002803020600380604072c0d07052c0801062602070402001000010701260306040100280602072c0c07082c0e050826020504010038040507000e38040708230200080000214024000023952c0e03012c0e07022c0c060125002400001e7a26020604072c0800072c0c01082c0c0209001000060024000022002d2c0400002c0c080526020100060a38030102260201040000280502070038000701082c0d0806230200020000221f220000219f26020100080a380301022300020002000021da22000021b6260201001b0a3803010223020002000021d12600020504003b0901052c0c060422000022281c0c0601002b0200020000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e3801000203230200030000221624000020202c0c060422000022282c0c06042200000022282c0c0401252400001e7a2c0d01032c0d020426020604010c380406072300020007000022512400002032002803020600380604072c0d07052c0801062600020704020010010701260306040100280602072c0c07082c0e050826020504000100380405070e38040708230200080000229b24000023952c0e03012c0e0700022c0c0601252400001e7a2602020400002801020400380402052c0d05031c000c0302051c0c0201001c0c0102052c0c02012501008003800580072d0080030080082d00800480090b0080088007800a2300800a000023192d01800880062d0002800680090100800800028008010080090002800922000022e8252400001e007a2c0d01032c0d020426020604060c38040607230200070000233e240000200032002803020600380604072c0d07052c0801062602070402001001070126030006040100280602072c0c07082c0e0508260205040100380405070e3804070800230200080000238824000023952c0e03012c0e07022c0c06012529010001050045a7ca711941e4153b010102252400001e7a26020604072c0800072c0c0108002c0c02090010000600240000231a2c0400002c0c080526020100060a38030100022602010400002805020700380701082c0d080623020002000024792200000023f926020100080a3803010223020002000024342200002410260201001b0a0038030102230200020000242b26020504003b0901052c0c060422000024821c000c0601002b02000200000000000000000000000000ffffffffffffffffffff00ffffffffffffffffffff0e38010203230200030000247024000020202c0c06000422000024822c0c060422000024822c0c0401252400001e7a26020301002c00080102260204042100100104012603020401002802020426020504204303b0000001804b0005000300042c0d020100280102012c0e01022c0c020125240000001e7a26020504002c080106260207041100100107012603060401002806020700260208041000380807082c0c07090c3809080a160c0a0a2302000a0000251c002c0e0509002809020922000024fd2c08010700000102012c0e06070128000300804600060e38030608230200080000254324000023950c3802060823020008000000256022000025552d088046000422000025a40c38020308230200080000002592220000257202380203080e3803020923020009000025892400003f892c000c0806220000259b2c0c0506220000259b2c0c060422000025a40728000480004800022c08010600000102012c0e02062602090404063804090a04380a090b000238040b080a380805092602080401230200090000260422000025e40038020008090e3802090a2302000a000025fb24000023952c0e090622000026042c0d000609260206020026020a02012c0c0502220000261b0c3802090b2302000b0000002636220000262d2c0d07012c0c0402252c08010c00000102012c0e050c05002800028048000d26020f04000b28000f8048000e2302000e0000267a072800000d804800110a38110210230200100000267a2400003f9b2c0c050b2200002600830d28000b8048000e2302000e000026ef22000026982c0d070b2c0d0c0d2600020e04100c38020e0f2302000f000026b724000020322d04000b8003270080000404001124000020442d088005000c00280c020e00380e020f2c0e0d0f00380002080b2c0e0c072c0c0b02220000261b00380d0b0f0e380d0f1023020010000000270624000023950c380f0410230200100000272122000027182c0c060e2200000027660038030f100e38031011230200110000273824000023952602110400440c38101112230200120000274f2400002032002801021100381110122c0d00120f2c0c0f0e22000027662c0d0c0f26021104122c0800122c0c0f132c0c0a001400100011002400003fad2c0400002c0c13101c0c0e0f040038100f0e0e3800100e1123020011000027a924000023952c0e0e0c00380b080e2c0c0e0b2200000026832400001e7a2c0d010600280602062c0e060107280002804800062602000704100c3806070823020008000027ec240000203200280102070038070608002c0d080226020700650a380407082602070280230200080000286122000028001626020800860a38040809230200090000283126020a04003b09010a2602080004092c0800092c0c020a2c0c030b2c0c070c001000080024000040342c040000002c0c0a042c0c0405220000289126020804092c0800092c0c020a2c0c030b002c0c070c001000080024000040342c0400002c0c0a042c0c040522000028910026020304100c3806030423020004000028a824000020322d0400018003270000800404001124000020442d0880050002002802020300380306042c0e05042c000c0201252400001e7a2c0d010400280402042c0e04012c0801040000010201002c0e01042c08010500000102012c0e020526020704040638020708043808070009023802090626020704000a380607082302000800002a3f220000292a07280000028048000803308048000600090f2800068048000a2302000a0000294f240000003f8926020a04100c38080a0b2302000b00002966240000203200280102000a00380a080b2c0d0b061c0c090b021c0c0b0a041c0c0a0b0226020a02080400380a0b0c26020e02000a380e0b0d2302000d000029b606380c0b100a38100a000f2302000f000029b62400003f9b1a38060c0a26020c040d2c08000d2c0c0a000e2c0c0b0f0010000c002400003fad2c0400002c0c0e0626020b04100c3808000b0c2302000c000029f524000020322d0400018003270080040400112400000020442d088005000a00280a020b00380b080c2c0e060c2c0e0a040038020901000e380201062302000600002a3624000023952c0e01052200002a3f2c0d050200072800028048000526020204012c0c05012200002a590d28000180490005230002000500002d442200002a6e2602050408043805030626020904000a38090300082302000800002aa1063806030b0a380b050a2302000a00002aa12400003f009b1c0c06030026020601002c08010526020804090010010801260305040100002805020826020904084303b00003804b00090006000826020304022602060200012c0c07012200002ae80c380103072302000700002aff2200002afa2c0d04000125052800018048000726020904000b280009804800082302000800002b3600072800078048000b0a380b010a2302000a00002b362400003f9b2c0d04080100308049000100090f3080490009000a2302000a00002b57240000239526020b0004080c38070b0c2302000c00002b6e2400002032002805020b00380b070c2c000d0c0a003807020b0e38070b0c2302000c00002b93240000239526020d0408000c380b0d0e2302000e00002baa2400002032002805020d00380d0b0e2c0d0e000c003807030b0e38070b0d2302000d00002bcf240000239526020e04080c38000b0e0f2302000f00002be62400002032002805020e00380e0b0f2c0d0f0d0100280007804a000b0e38070b0e2302000e00002c0e240000239526020e04080c00380b0e0f2302000f00002c252400002032002805020e00380e0b0f2c0d0f07001c0c0a0b0426020e040f2c08000f2c0c0b102c0c06110010000e002400003f00ad2c0400002c0c100a1c0c0c0b0400380a0b0c0e380a0c0e2302000e00002c0077240000239526020b040e2c08000e2c0c0c0f2c0c06100010000b00240000003fad2c0400002c0c0f0a1c0c0d0b0400380a0b0c0e380a0c0d2302000d0000002cb6240000239526020b040d2c08000d2c0c0c0e2c0c060f0010000b00240000003fad2c0400002c0c0e0a1c0c070b0400380a0b070e380a070c2302000c0000002cf5240000239526020b04100c38090b0c2302000c00002d0c2400002032002d04000880032700800404001124000020442d088005000a00280a020b0038000b090c2c0e070c2c0e0a0400380102072c0c07012200002ae82c0d04052602000804100c380108092302000900002d5f24000020322d0400058003270080040004001124000020442d0880050006002806020800380801092c0e07090038010002052c0e06042c0c05012200002a592400001e7a2c0d020400280402042c0e0004022c080104000001020126020502002c080106260207042100100107012600030604010028060207260208042000380807082c0c07090c3809080a160c0a000a2302000a00002dfc2c0e050900280902092200002ddd2c0801050000010200012c0e06052c080106260207040900100107012603060401002801020700280002020800280602093f3f0009000800072c0d060100280102012c0e01062c0e0006042602010400260202040126020604082c0c01032200002e5c0c38030607002302000700002e732200002e6e2c0d0501252c0d040826020a04080c38030a000b2302000b00002e8e2400002032002808020a00380a030b2c0d0b091c0c0900080026020a01002c08010926020b04050010010b012603090401002809020b0026020c04044303b00008804b000c000a000b053080480003000826020b0400000a380b030a2302000a00002f04063808030d0b28000d8048000c2302000c0000002f042400003f9b2c0c01072200002f0d0d2800078048000a2302000a0000002f302200002f2200380302072c0c07032200002e5c2c0d050a003808070b0e0038080b0c2302000c00002f4b240000239526020d04040c38070d0e2302000e0000002f622400002032002809020d00380d070e2c0d0e0c26020e04200c380b000e0f2302000f00002f8724000020322d04000a8003270080040400212400000020442d088005000d00280d020e00380e0b0f2c0e0c0f2c0e0d05003807020a002c0c0a072200002f0d2400001e7a2c080103000001020126020400012c0e0400032c080104000001020126020500002c0e05042c08010600000102012c0e0500062602050401260207041e260208040f2702000900010026020a04002c0c0a000222000030190c3802080a2302000a00003067220000302b2c0d060200280100020700380708092c0d09051c0c0501002c0d0305043801050300380203012c000e01062c0d0402043802050300380103022c0c0201252c0d060a023807020b000e3802070c2302000c000030822400003f8926020d04200c380b0d0e230200000e000030992400002032002801020d00380d0b0e2c0d0e0c1c0c0c0b002c0d00030c04380b0c0d00380a0d0b2c0e0b0604380c090a2c0e0a032c0d040b03300080490002000c0f2800028049000d2302000d000030e82400003f8926020e0400200c380c0e0f2302000f000030ff2400002032002801020e00380e0c0f2c0d000f0d1c0c0d0c0004380c0a0d00380b0d0a2c0e0a04003802050a2c0c0a022200000030192400001e7a26020900142c08010a26020b04030010010b0126030a00040100280a020b2c0c0b0c2c0e090c00280c020c2c0e050c2a02000900000000000000000002000000000000000026020f04102c0800102c0c09110010000f000024000041442c0400002c0c110b2c0c120c2c0c130d2c0c140e2c0d0b090000280902092c0e090b2c08010900000102012c0e0b092c0d0c0b00280b020b2c000e0b0c2c08010b00000102012c0e0c0b2c08010c00000102012c0e0d0c2c0800010d00000102012c0e0e0d26020e040126020f040026021004022c0c0f082200000032070c380810012302000100003d40220000321926020304102c080010002c0c09112c0c0b122c0c0c132c0c0d14001000030024000041eb2c0400002c000c11021e020003031e020008001e0200090426020a02002c08010b26020c0400e10010010c0126030b040100280b020c26020d04e000380d0c0d2c0c0c100c0038100d11160c1111230200110000329d2c0e0a100028100210220000327e2c0008010a00000102012c0e0b0a26020c04102c0800102c0c06110010000c002400000024872c0400002c0c110b2c0d0b0600280602062c0e060b26020c04102c000800102c0c03110010000c0024000024872c0400002c0c11062c0d06030028000302032c0e030626020c04102c0800102c0c08110010000c0024000024872c000400002c0c11032c0d030800280802082c0e080326020c04102c0800102c0c0009110010000c0024000024872c0400002c0c11082c0d080900280902092c0e00090826020c04102c0800102c0c04110010000c0024000024872c0400002c0c0011092c0d090400280402042c0e040926020c04102c0800102c0c0211001000000c0024000024872c0400002c0c11042c0d040200280202022c0e020426020c0004102c0800102c0c07110010000c0024000024872c0400002c0c11022c0d02000c00280c020c2c0e0c0226020c04a026020d0480260210042026021104c02600021204602c0c0f0122000034000c3801101323020013000039ef2200003412002c0d0a022c080103260204041100100104012603030401002803020426020600041000380604062c0c04080c38080609160c0909230200090000345b2c0e0f00080028080208220000343c2c08010400000102012c0e030428020003049b0500688c28020006043c6ef37228020008045be0cd192802000904510e527f280200000a04bb67ae852802000b041f83d9ab2802000c04a54ff53a2802000d046a0009e6672c08011026021204090010011201260310040100281002122c0c1213002c0e0d1300281302132c0e0a1300281302132c0e061300281302132c0e0c130000281302132c0e091300281302132c0e031300281302132c0e0b130028130200132c0e08132c08010300000102012c0e10032c08010600000102012c0e0f060026020804e02c0c0f0122000035370d280001804a000923020009000038d122000000354c26020a04122c0800122c0c02132c0c08142c0c11150010000a0024000000426f2c0400002c0c13012c0c14092c0d010200280202022c0e02012c0e0001042c0e09060b2800098046000223020002000035a122000035aa2c0e0f060022000035aa2c0d0602260209006526020b04102c0800102c0c01112c0c0212002c0c02132c0c09140010000b0024000027bb2c0400002c0c110a2c0d0a010000280102012c0e010a2c0e0a040038020e010e3802010923020009000036062400000023952c0e01062c0d0a0200280202022c0e020a0d3080470001000223020000020000362c22000036742c0d03012c0801022602090409001001090126030002040100280a0209002801020b002802020c3f3f000c000b00092c0d02010000280102012c0e01022c0e02032c0e0f0622000036742c0d060226020904102c000800102c0c0a112c0c02122c0c0813001000090024000028d32c0400002c0c0011062c0d060200280202022c0e02062c0e06042c0d030226020404102c080000102c0c06112c0c021200100004002400002d972c0400002c0c11032c0d03020000280202022c0e020326020404102c0800102c0c031100100004002400002f00bf2c0400002c0c110226020300052c0801042602060404001001060126030400040100280402062c0c06082c0e030800280802082c0e020800280802082c0e0005082c0d040300280302032c0e03042a02000300000000000000000300000000000000000026020a04102c0800102c0c03110010000a0024000041442c040000002c0c11052c0c12062c0c13082c0c14092c0d050300280302032c0e03052c0008010300000102012c0e05032c0d060500280502052c0e05062c0801050000000102012c0e06052c08010600000102012c0e08062c08010800000102012c0e0009082c0c0f0122000037de0d280001804a000923020009000038612200003700f326020404092c0800092c0c030a2c0c050b2c0c060c2c0c080d00100004000024000041eb2c0400002c0c0a011e0200030032380001000300042602030100000a380403052302000500003842240000455d3438000200070003260202010100230200030000385c240000456f3302000125230200090000386e22000038c30026020a04030c38010a0b2302000b000038852400002032002804020a00380a00010b2c0d0b0926020a040f2c08000f2c0c03102c0c05112c0c06122c0c0813002c0c09140010000a0024000045812c04000022000038c30038010e092c0c09000122000037de053080460001000926020b04000a380b010a2302000a0000390005063809010d0b28000d8046000c2302000c000039052400003f9b26020c0400122c0800122c0c02132c0c08142c0c09150010000c00240000426f2c040000002c0c130a2c0c140b2c0d0a0c00280c020c2c0e0c0a0c3809080c2302000c000000394f22000039652c0d0a0900280902092c0e090a2c0e0a042200003965230002000c00003972220000397b2c0e0b06220000397b2c0d06090b280009804600000a04380c0a09230200090000399922000039e12c0d04092c0d030a2c0801000b26020c04090010010c0126030b0401002809020c00280a020d00280b0210003f3f0010000d000c2c0d0b0900280902092c0e090b2c0e0b0322000039e1000038010e092c0c090122000035372c0d0a1326021504200c38011516230200160000003a0a240000203200280b021500381501162c0d161426021604e00c38010016172302001700003a2f24000020322d0400138003270080040400e12400000020442d0880050015002815021600381601172c0e141700380110130e38011300142302001400003a6c240000239526021604200c380116172302001700003a00832400002032002806021600381601172c0d171426021704e00c38131718230002001800003aa824000020322d0400158003270080040400e124000020442d000880050016002816021700381713182c0e141801280001804600130e38011300142302001400003ae8240000239526021504200c380115172302001700003a00ff2400002032002803021500381501172c0d171426021704e00c38131718230002001800003b2424000020322d0400168003270080040400e124000020442d000880050015002815021700381713182c0e141800380112130e38011314230200001400003b61240000239526021604200c380116172302001700003b78240000002032002808021600381601172c0d171426021704e00c38131718230200180000003b9d24000020322d0400158003270080040400e124000020442d088005000016002816021700381713182c0e14180038010d130e38011314230200140000003bda240000239526021504200c380115172302001700003bf1240000203200002809021500381501172c0d171426021704e00c381317182302001800003c001624000020322d0400168003270080040400e124000020442d088005001500002815021700381713182c0e14180038010c130e380113142302001400003c5300240000239526021604200c380116172302001700003c6a240000203200280400021600381601172c0d171426021704e00c381317182302001800003c8f2400000020322d0400158003270080040400e124000020442d088005001600281602001700381713182c0e141800380111130e380113142302001400003ccc24000000239526021504200c380115172302001700003ce3240000203200280202150000381501172c0d171426021704e00c381317182302001800003d082400002032002d0400168003270080040400e124000020442d088005001500281502170038001713182c0e14182c0e150a0038010e132c0c13012200003400230200010000003d4d2200003da226020204020c380802032302000300003d6424000020320000280a020200380208032c0d030126020204112c0800112c0c09122c0c0b132c000c0c142c0c0d152c0c0116001000020024000045812c0400002200003da2000038080e012c0c010822000032072400001e7a26020604072c0800072c0c0108002c0c020900100006002400003e902c0400002c0c080526020100060a38030100022602010400002805020700380701082c0d08062302000200003e82220000003e0226020100080a380301022302000200003e3d2200003e19260201001b0a00380301022302000200003e3426020504003b0901052c0c06042200003e8b1c000c0601002b02000200000000000000000000000000ffffffffffffffffffff00ffffffffffffffffffff0e380102032302000300003e7924000020202c0c0600042200003e8b2c0c06042200003e8b2c0c0401252400001e7a2c0d01032c0d00020426020604040c380406072302000700003eb4240000203200280302060000380604072c0d07052c0801062602070402001001070126030604010028060200072c0c07082c0e0508260205040100380405070e380407082302000800003e00fe24000023952c0e03012c0e07022c0c0601252901000105be11c73bbb04a400fc3b0101022529010001057425c86e086b03c13b010102252901000105e3b100cb17b4b196ae3b010102252901000105203960faa7b733883b0101022529010000010597178cf85aace5563b0101022529010001053b7ee0a2f674688e3b0100010225290100010565a49ce5d4594d753b010102252901000105288692b04700dcfd433b010102252901000105646188a8c6cf94cb3b010102252400001e7a0026020404000a3801040523020005000040262200003fc9260204020804380400020526020702000a380702062302000600003ffc06380502090a38090408230002000800003ffc2400003f9b183801050226020102200c38050104260201010001230200040000401d24000046b02c0c0203220000402f2c0c040322000040002f2c0c0301252400001e7a26020504040638020506043806050702380207040003308048000400020f28000480480005230200050000406a2400003f891c0c000206021c0c0605041c0c0502022602050208043805020626020802000a380800020723020007000040ac063806020a0a380a050923020009000040ac240000003f9b1a3801060526020604072c0800072c0c05082c0c02090010000600240000003fad2c0400002c0c08011c0c0302040330804a000400030f280004804a00000523020005000040f62400003f891c0c0305021c0c0504041c0c0403022602000504062c0800062c0c02072c0c030800100005002400003fad2c0400002c0c00070400380104020e38010203230200030000413f24000023952c0c020125240000001e7a26020200002c0801032602040404001001040126030304010028030002042c0c04052c0e020500280502052c0e020500280502052c0e02052c0d03000400280402042c0e04032c0801042602050405001001050126030404010028000402052c0c05062c0e020600280602062c0e020600280602062c0e02060028000602062c0e0106260201040026020201002c0c02052c0c01062c0c04022c0c0005042c0c03012c0c0603252400001e7a2c0d040526020601000a3805060723000200070000420f26020804003b09010826020504062c0800062c0c01072c0c0002082c0c03092c0c040a001000050024000046c22c0400002c0d01052c0d0200062c0d03072c0e05012c0e06022c0e070326020101012c0e0104260201040000002806020300380301042c0d04022c0c0201252400001e7a26020504002c08000106260207041100100107012603060401002806020726020804100038080700082c0c07090c3809080a160c0a0a2302000a000042be2c0e0509002809020900220000429f2c08010700000102012c0e060701280003804600060e380306080023020008000042e524000023950c38020608230200080000430222000042f7002d088046000422000043460c38020308230200080000433422000043140238000203080e38030209230200090000432b2400003f892c0c0806220000433d2c000c0506220000433d2c0c0604220000434607280004804800022c0801060000000102012c0e02062602090404063804090a04380a090b0238040b080a3808050009260208040123020009000043a6220000438600380208090e3802090a230200000a0000439d24000023952c0e090622000043a62c0d060926020602002602000a02012c0c050222000043bd0c3802090b2302000b000043d822000043cf2c000d07012c0c0402252c08010c00000102012c0e050c052800028048000d2602000f04000b28000f8048000e2302000e0000441c0728000d804800110a3811020010230200100000441c2400003f9b2c0c050b22000044250d28000b8048000e002302000e00004491220000443a2c0d070b2c0d0c0d26020e04100c38020e0f002302000f0000445924000020322d04000b8003270080040400112400002044002d088005000c00280c020e00380e020f2c0e0d0f003802080b2c0e0c072c0c000b0222000043bd00380d0b0f0e380d0f1023020010000044a824000023950c00380f041023020010000044c322000044ba2c0c060e22000045080038030f10000e3803101123020011000044da240000239526021104e00c381011122302000012000044f12400002032002801021100381110122c0d120f2c0c0f0e2200000045082c0d0c0f26021104122c0800122c0c0f132c0c0a140010001100240000003fad2c0400002c0c13101c0c0e0f040038100f0e0e38100e1123020011000000454b24000023952c0e0e0c00380b080e2c0c0e0b220000442529010001056100be47556b1380913b010102252901000105b87a3944b3b13c563b01010225240000001e7a2c0d03062c0d040726020801000a3807080923020009000045a92600020a04003b09010a0b280006804a00072602060401230200070000463c2200000045c32c0d01072c0d02082c0d03092c0d040a26020c04030c38090c0d230200000d000045ea24000020322d04000780032700800404000424000020442d08008005000b00280b020c00380c090d2c0e050d00380906050e3809050723020000070000462724000023952c0e0b012c0e08022c0e05032c0e0a0422000046af0026020704082c0800082c0c01092c0c020a2c0c030b2c0c040c00100007002400000046c22c0400002c0d01072c0d02082c0d040926020a04002d0400078003002700800404000424000020442d088005000b00280b020c00380c0a0d2c0e05000d2c0e0b012c0e08022c0e06032c0e090422000046af252901000105c96f93003b139de9163b010102252400001e7a260206040026020704012c0c06052200000046da0d280005804a0006230200060000474522000046ef2c0d01052c0d0200062c0d03072c0d04082c08010926020a04050010010a01260309040100280600020a26020b0404002809020c3e0f000a000c2c0d090600280602062c0e0609002c0e05012c0e09022c0e07032c0e0804252c0d03060c38050608003805070600230200080000476022000048112c0d01082c0d02092c0d030a2c0d040b2602000d04040c38050d0e2302000e000047872400002032002809020d00380d050e002c0d0e0c26020e04030c38050e0f2302000f000047ac240000203200280802000e00380e050f2c0d0f0d00380c0d0e26020d04040c38050d0f2302000f00000047d624000020322d04000980032700800404000524000020442d088005000c0000280c020d00380d050f2c0e0e0f2c0e08012c0e0c022c0e0a032c0e0b042200000048112c0c060522000046da2d0018ca18ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +000000000000000000000000000000000000000000000000000000000000000320cd27645f65c15a38720ca984aef936592f3938a705db706d068ad13fc58ae90321fc89f3f6ce9730f5d48bbeacfb28f611f6a97e62fb4fd492dfbaf93b46e80000000000000000000000000000000000000000000000000000000000000001103db9d8abd8d61dc45f40f7d8a6910a366ae9b0f2bc289e5384688ba20dce272e48f56e2f89ae8cad557d2375c4bb45e7061689f591280b2038108dda8067ad000000000000000000000000000000000000000000000000000000000000452c002600020401270000010480672600000403260202040126020304001f18000300000280662d088066000124000000452400000202270200010480672602020400003a0d00010002270080430400052a0080440000000000000000010000000000000000002b0080450000000000000000000000000000000001000000000000000000000000000000000028008046046a09e6672800804704bb67ae852800800048043c6ef3722800804904a54ff53a2800804a04510e527f2800804b049b0500688c2800804c041f83d9ab2800804d045be0cd192d000001804e2700804f0400000901000001804f00012701804e0400010100804e0002804f2d00804f8050002d028046805001008050000280502d028047805001008050000280502d02800048805001008050000280502d028049805001008050000280502d02804a80500001008050000280502d02804b805001008050000280502d02804c80500100800050000280502d02804d80502700804f0400402700805004000427008051040000382700805204000e27008053040003270080540401002700805501000027000080560200002700805704000027008058000000270080590100012700805a040000012700805b0400022700805c0200042700805d0000062700805e020008270000805f04000827008060000008270080610000142700806200001b27008063000200202700806404002027008065020080252400001fb228020002005189a400170a380102032602040400260206040300380406052c080102001001050126000302040100280202052c0e040500280502052c0e040526020504030038020500042c0d020400280402042c0e0402230200030000026822000002aa2602030400042c08000400100003002400001fdb2c0400002c0d020300280302032c0e03000200280202052c0d0504260206040200380506033a0d0003000422000002aa0028020003007a81a21e0a38010304260203040623020004000002ca2200000800062c08010526020604040010010601260305040100280502061f24805a80530000062c0d050600280602062c0e06052c08010600000102012c0e05062c0801000500000102012d0a8057000526020804092c0800092c0c060a2c0c050b2d0800805d000c00100008002400001ffd2c0400002c0c0a07260209040a2c08000a002c0c060b2c0c050c2d08805d000d00100009002400001ffd2c0400002c0c0b000826020a040b2c08000b2c0c060c2c0c050d0010000a0024000020d52c040000002c0c0c090028090206012800068057000a2c0d0a051c0c0506002b0200090000000000000000000000000000ffffffffffffffffffffffffffffffffffff00ffff0e3806090a2302000a000003d5240000214e2c0801062602090403001000010901260306040100280602092c0c090a2c0e070a00280a020a2c0e080a2c0008010726020804070010010801260307040100280702082c0c08092d0a805800000900280902092d0a8058000900280902092d0a8058000900280902092d0a008058000900280902092d0a8058000900280902092d0a805800092c0801080000000102012c0e07082c080107260209040a001001090126030704010028070200092c0c090a2d0a8058000a00280a020a2d0a8058000a00280a020a2d0a805900000a00280a020a2d0a8058000a00280a020a2d0a8058000a00280a020a2d0a008059000a00280a020a2d0a8058000a00280a020a2d0a8058000a00280a020a002d0a8059000a2c08010900000102012c0e07092b02000700054aa86a73cb8a0034525e5bbed6e43ba1198e860f5f3950268f71df4591bde4022b02000a0020009dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126002b02000b00083e7911d835097629f0067531fc15cafd79a89beecb39903f6900572c636f4a5a2b02000c001a7f5efaad7f315c25a918f30cc8d7333fccab7a00d7c90f14de81bcc528f9935d2c08010d26020e04070010010e0126030d04010000280d020e2c0c0e0f2c0e0b0f00280f020f2c0e0c0f00280f020f2d0a805500000f00280f020f2c0e070f00280f020f2c0e0a0f00280f020f2d0a8055000f002d088057000422000005db0d280004805b00072302000700001d3e2200000500f02c0d0804260206000226020a04060d308050000a000b2302000b000006130024000021602d04000480032700800404000724000021722d088005000700280007020a0128000a8050000b2c0e060b26020604060d3080430006000a230200000a0000065624000021602d04000780032700800404000724000021722d0880000500040028040206012800068043000a2d0a8058000a2c0e04082c0d09062b00020007002df8b940e5890e4e1377e05373fae69a1d754f6935e6a780b66694007431f2cdcd26020a04090c38030a0b2302000b000006c524000021602d0400000680032700800404000a24000021722d0880050008002808020a00380a030b002c0e070b26020604072b020007002ecd88d15967bc53b885912e0d1686615400acb6aac2d3f85e27ca7eefb2c1908326020b04090c38060b0c2302000c000000072c24000021602d04000880032700800404000a24000021722d088005000a0000280a020b00380b060c2c0e070c26020704090d30805f0007000823020008000000076c24000021602d04000a80032700800404000a24000021722d088005000006002806020701280007805f00082d0a805500082c0e06092c0801072602000804040010010801260307040100280602082602090409002804020a26020b000406002807020c42f70008000a000c0009002807020601280006805700082c000d0804370c0005000400280202062c0d0605260207040200380607043a0d00000400052200000806280200040032b6bd200a3801040523020005000008212200000009322c08010426020504030010010501260304040100280402051f2480005a805b00052c0d040500280502052c0e05042c08010500000102012c0e0405002c08010400000102012d0a8057000426020704082c0800082c0c05092c0c04000a001000070024000022002c0400002c0c090600280602080128000880570000092c0d090726020804092c0800092c0c050a2c0c040b00100008002400002200002c0400002c0c0a06002806020501280005805700082c0d08041c0c040500002b02000600000000000000000000000000ffffffffffffffffffffffffffff00ffffffffffff0e38050608230200080000090e240000214e370c000400070000280202062c0d0605260207040200380607043a0d0004000522000009322802000004008a4870ec0a38010405230200050000094d22000009e12c0801042602000504020010010501260304040100280402051f24805a805a00052c0d04050000280502052c0e05042c08010500000102012c0e04052c08010400000102012d000a8057000426020704082c0800082c0c05092c0c040a2d08805d000b00100000070024000022792c0400002c0c09063302000600280202062c0d060526020700040200380607043a0d0004000522000009e12802000400cd8c9a7a0a380104000523020005000009fc2200000b062c0801042602050402001001050126030400040100280402051f24805a805a00052c0d040500280502052c0e05042c0801000500000102012c0e04052c08010400000102012d0a8057000426020704082c000800082c0c05092c0c040a001000070024000023512c0400002c0c09062602000504072c0800072c0c0608001000050024000023ca2c0400002c0c08041e02000005060a380504062302000600000aa226020704003b0901071c0c040500260002060401260208040300380608072c080104001001070126030404010028040002072c0e060700280702072c0e0607260207040300380407062c0c06072c0e00050700280402072c0d0706260208040200380708053a0d000500062200000b00062802000400f99f5a2d0a380104052602040277260206026f2602070265260002080272260209026c2302000500000b3a2200000e2b2c08010a26020b0402000010010b0126030a040100280a020b1f24805a805a000b2c0d0a0b00280b02000b2c0e0b0a2c08010b00000102012c0e0a0b2c08010a00000102012d0a805700000a26020d040e2c08000e2c0c0b0f2c0c0a102d08805d00110010000d002400000022792c0400002c0c0f0c26020b040126020e040300380b0e0d2c08010a000010010d0126030a040100280a020d2c0e0b0d00280d020d2c0e0b0d26020d00040300380a0d0b2c0c0b0d2c0e0c0d00280a020d2c0d0d0c26020e04020038000d0e0b360d000b000c26020a000a26020b001e26020d040326020f04030038000d0f0e2c08010c0010010e0126030c040100280c020e2c0e0d0e00280e020e002c0e0d0e26020e040300380c0e0d2c0c0d0e2c0e0a0e00280e020e2d0a806100000e00280e020e2c0e0b0e00280c020d2c0d0d0b26020e040200380d0e0a36000d000a000b26020a022126020b026426020c024826020d022c2c08010e2602000f040e0010010f0126030e040100280e020f2c0c0f102c0e0c100028100210002c0e071000281002102c0e091000281002102c0e091000281002102c0e06100000281002102c0e0d1000281002102d0a8063001000281002102c0e04100028001002102c0e061000281002102c0e081000281002102c0e091000281002102c000e0b1000281002102c0e0a102c08010a26020b040e0010010b0126030a04010000280a020b26020c040d00380c0b0c2c0c0b0d0c380d0c0f160c0f0f230200000f00000d672d0a8058000d00280d020d2200000d462c08010b00000102012c000e0a0b26020a040d2d08805700052200000d840c38050a0c2302000c00001c00be2200000d962c0d0b0526020d040d06280d020b26020f040300380d0f0e2c0008010c0010010e0126030c040100280c020e2c0e0d0e00280e020e2c0e0d0e0026020f040300380c0f0e002805020f2d04000f80032d04000e80042d04000d00800524000023f400280c020e2c0d0e0d26020f040200380e0f05360d000500000d002802020c2c0d0c0a26020d040200380c0d053a0d0005000a2200000e2b00280200050097b974f70a3801050a2302000a00000e4622000016ae2c08010a0026020b04070010010b0126030a040100280a020b1f34805a0003000b2c0d0a000b00280b020b2c0e0b0a2c08010b00000102012c0e0a0b2c08010a0000010200012d0a8057000a26020d040e2c08000e2c0c0b0f2c0c0a100010000d0024000000243a2c0400002c0c0f0c00280c020e0128000e8057000f2c0d0f0d2c0d0b000c2c0d0a0e26021004060c380e10112302001100000ee2240000216000280c0002100038100e112c0d110f0128000e805a00100e380e10112302001100000f000a24000024b326021204060c381012132302001300000f2124000021600028000c021200381210132c0d13110128000e805b00100e380e1012230200120000000f4924000024b32c0e0c0b2c0e100a1c0c0f0e051c0c0e0c001c0c110f051c000c0f0e0026021004112c0800112c0c0b122c0c0a132d08805d001400100010000024000024c52c0400002c0c120f26021104122c0800122c0c0b132c0c0a14002d08805d0015001000110024000024c52c0400002c0c131026021204132c080000132c0c0b142c0c0a150010001200240000243a2c0400002c0c141100281100020b0128000b805700122c0d120a1c0c0a0b002b0200110000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380b1112230002001200001027240000214e2c08010b00000102012d0a8055000b2c0801110000000102012d0a805800112c080112000001020126021300802c0e13122c08000113000001020126021504162c0800162c0c0d170010001500240000259d2c000400002c0c17142c0d140d00280d020d2c0e0d140528000e8044000d00380c000d0e26020d04152c0800152c0c0e160010000d00240000259d2c0400002c0c00160c2c0d0c0d00280d020d2c0e0d0c26020d02bc26020e026a260215029b2600021602d32c08011726021804450010011801260317040100281702182c0c1800192c0e0d1900281902192c0e0e1900281902192c0e151900281902192c0e16001900281902192d0a8056001900281902192d0a8056001900281902192d0a800056001900281902192d0a8056001900281902192d0a8056001900281902192d000a8056001900281902192d0a8056001900281902192d0a805600190028190200192d0a8056001900281902192d0a8056001900281902192d0a805600190028001902192d0a8056001900281902192d0a8056001900281902192d0a805600190000281902192d0a8056001900281902192d0a8056001900281902192d0a805600001900281902192d0a8056001900281902192d0a8056001900281902192d0a008056001900281902192d0a8056001900281902192d0a805600190028190219002d0a8056001900281902192d0a8056001900281902192d0a805600190028190002192d0a8056001900281902192d0a8056001900281902192d0a805600190000281902192d0a8056001900281902192d0a8056001900281902192d0a805600001900281902192d0a8056001900281902192d0a8056001900281902192d0a800056001900281902192d0a8056001900281902192d0a8056001900281902192d000a8056001900281902192d0a8056001900281902192d0a805600190028190200192d0a8056001900281902192d0a8056001900281902192d0a805600190028001902192d0a8056001900281902192d0a8056001900281902192d0a805600190000281902192d0a8056001900281902192d0a8056001900281902192d0a805600001900281902192d0a8056001900281902192d0a8056001900281902192d0a008056001900281902192d0a8056001900281902192d0a805600190028190219002d0a8056001900281902192d0a8056001900281902192d0a805600190028190002192d0a8056001900281902192d0a8056001900281902192d0a805600190000281902192d0a8056001900281902192d0a8056001900281902192d0a805600001900281902192d0a8056001900281902192d0a805600192c0e171326020d0400242d088057000522000013e80d2800058064000e2302000e00001bd42200000013fd2c0d130d2d09804e000e00280e020e2d06000e804e26020e04442602150004162c0800162c0c0d172c0c0e182d0880570019001000150024000025e32c000400002c0c17132c0c18142c0d131500281502152c0e15132c0801152602160004090010011601260315040100281302160120804e0002001700281502183f003f0018001700162c0d151300281302132c0e131526021704182c0800182c0c000d192c0c0e1a2d08804f001b001000170024000025e32c0400002c0c19132c000c1a162c0d130d00280d020d2c0e0d13072800168050000d26021804100c38000d181923020019000014e4240000216000281302180038180d192c0d191726000219041a2c08001a2c0c171b2c0c161c2d088065001d00100019002400002800ba2c0400002c0c1b1826021904100c380d191a2302001a000015322400002100602d04001380032700800404001124000021722d08800500170028170219000038190d1a2c0e181a0d2800168051000d2302000d000015a6220000156d2c0800010d2602130409001001130126030d04010028170213002815021400280d0200163f3f0016001400132c0c0d052d088057000c22000015cd01280016805a00000d0e38160d1323020013000015c024000024b32c0c15052c0c0d0c2200001500cd2c0d050d00280d020d2c0e0d0526021304182c0800182c0c17192c0c0c1a002c0c0e1b00100013002400002a3f2c0400002c0c190d2c0d0d0c00280c020c002c0e0c0d26020e04132c0800132c0c0d142c0c05150010000e002400002e92002c0400002c0c140c2c0d0c0500280502052c0e050c26020d04132c0800132c000c0c140010000d0024000030892c0400002c0c140526020c04132c0800132c000c0b142c0c11152c0c12162c0c05172c0c0f182c0c0a192c0c101a0010000c000024000031e02c040000002802020b2c0d0b0a26020c040200380b0c053a0d000005000a22000016ae28020005009756f6200a3801050a2302000a000016c900220000187e2c08010526020a04050010010a012603050401002805020a1f2400805a8050000a2c0d050a00280a020a2c0e0a052c08010a00000102012c0e05000a2c08010500000102012d0a8057000526020c040d2c08000d2c0c0a0e2c0c00050f2d08805d00100010000c002400003c8f2c0400002c0c0e0b26020d040e002c08000e2c0c0a0f2c0c05102d08805d00110010000d002400003c8f2c040000002c0c0f0c26020e040f2c08000f2c0c0a102c0c05110010000e002400003d00672c0400002c0c100d00280d020f0128000f805700102c0d100e1c0c0e0d00002b02000f00000000000000000000000000ffffffffffffffffffffffffffff00ffffffffffff0e380d0f1023020010000017d4240000214e26020f04102c080000102c0c0a112c0c05122d08805d00130010000f002400003c8f2c0400002c000c110d2c08010500000102012d0a805500052c08010a00000102012d0a805800000a2c08010f0000010201260210004c2c0e100f26021004112c0800112c0c0005122c0c0a132c0c0f142c0c0b152c0c0c162c0c0e172c0c0d1800100010000024000031e02c040000002802020b2c0d0b0a26020c040200380b0c053a0d000005000a220000187e2802000500eb2b616b0a3801050a2302000a00001899220000001a992c08010126020504070010010501260301040100280102051f3480005a000300052c0d010300280302032c0e03012c08010300000102012c0e0103002c08010100000102012d0a8057000126020a040b2c08000b2c0c030c2c0c01000d2d08805d000e0010000a0024000024c52c0400002c0c0c0526020b040c2c0008000c2c0c030d2c0c010e2d08805d000f0010000b0024000024c52c040000002c0c0d0a26020c040d2c08000d2c0c030e2c0c010f2d08805d00100010000c000024000024c52c0400002c0c0e0b26020d040e2c08000e2c0c030f2c0c0110000010000d00240000243a2c0400002c0c0f0c26020e040f2c08000f2c0c0c10000010000e0024000023ca2c0400002c0c100d26020e040f2c08000f2c0c0310002c0c01112d08805d00120010000e0024000024c52c0400002c0c100c26020f0004102c0800102c0c03112c0c01122d08805d00130010000f0024000024c52c000400002c0c110e1e020001030a380105032302000300001a082400003de01e00020001040a38010a032302000300001a1f2400003df21e020001050a38010b00032302000300001a362400003e041e020001060a38010d032302000300001a004d2400003e161e020001080a38010c032302000300001a642400003e281e02000001070a38010e032302000300001a7b2400003e3a00280202052c0d05032600020a04020038050a013a0d000100032200001a992602010273260202025526000203026e260205027426020a026326020b026b2c08010c26020d0411001001000d0126030c040100280c020d2c0c0d0e2c0e020e00280e020e2c0e030e0028000e020e2c0e0b0e00280e020e2c0e030e00280e020e2c0e060e00280e020e2c000e040e00280e020e2c0e030e00280e020e2d0a8063000e00280e020e2c0e01000e00280e020e2c0e070e00280e020e2c0e090e00280e020e2c0e070e00280e00020e2c0e0a0e00280e020e2c0e050e00280e020e2c0e060e00280e020e2c0e00080e0b208055805900012302000100001bd326020204122c08010326020404001200100104012c0c03042903000405e58f985907316290002804020400280c00020526020604102d04000580032d04000480042d040006800524000023f426000205041000380405042d0a8057000400280402043b0d0302252c0d130e01280000058050001526021704200c380517182302001800001bf7240000216000280014021700381705182c0d181626021804440c381518192302001900001c1c2400000021602d04000e80032700800404004524000021722d088005001700281700021800381815192c0e16190038050d0e26021604200c38051618230200180000001c5e240000216000280c021600381605182c0d181526021804440c380e1800192302001900001c8324000021602d0400178003270080040400452400002100722d088005001600281602180038180e192c0e15192c0e161301280005805a00000e2c0c0e0522000013e82c0d0b0c26020f040d0c38050f10230200100000001cd9240000216000280e020f00380f05102c0d100d1c0c0d0f00260210040d000c380510112302001100001d0324000021602d04000c80032700800404000e0024000021722d088005000d00280d021000381005112c0e0f112c0e0d0b0128000005805a000c2c0c0c052200000d842c0d080726020b04020c38040b0c230200000c00001d592400002160002806020b00380b040c2c0d0c0a1c0c0a0c051c000c0c0b0002380a0b0c0928000c8044000e1c0c0e0f051c0c0f0c0002380e0c000f0928000f8044000e0528000c8044000f00380f0b0c05308045000e000b0000380c0b0f0a380a0f0b2302000b00001dc526021004003b0901100528000480005b000a26020f04060c380a0f102302001000001de424000021602d0400078000032700800404000724000021722d088005000b00280b020f00380f0a102c0e000c100128000a805a000726020c04060c38070c0f2302000f00001e292400000021602d04000b80032700800404000724000021722d088005000a00280a020c0000380c070f2c0e0e0f2c0e0a082c0d0907052800048053000a26020c04060c00380a0c0e2302000e00001e76240000216000280d020c00380c0a0e2c0d0e0b000128000a805a000c26020f04060c380c0f102302001000001ea324000021600000280d020f00380f0c102c0d100e0128000a805b000f26021104060c380f1100122302001200001ed0240000216000280d02110038110f122c0d12102602110004090c380a11122302001200001ef524000021602d0400078003270080040400000a24000021722d088005000f00280f02110038110a122c0e0b1226020a0400090c380c0a0b2302000b00001f3224000021602d04000f8003270080040400000a24000021722d0880050007002807020a00380a0c0b2c0e0e0b0128000c80005a000a26020c04090c380a0c0e2302000e00001f7724000021602d0400078000032700800404000a24000021722d088005000b00280b020c00380c0a0e2c0e00100e2c0e0b0901280004805a00072c0c070422000005db270080040478000d00000000800480032300800300001fda2901000105f7a1f3afa5add4ca3b01010002252400001fb21e020001011e020002000a380102032302000300001ffc240000003e4c252400001fb226020604072c0800072c0c01082c0c020900100006000024000020d52c0400002c0c08050b280003805d000100280502060128000600805700072c0d070223020001000020c7220000204b0b2800038060000123020000010000208222000020600b2800038062000123020001000020792602050400003b0901052c0c020422000020d01c0c0201002b0200030000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380103052300020005000020be240000214e2c0c020422000020d02c0c020422000020d02c000c0401252400001fb22c0d01032c0d020426020604030c380406072302000700000020f92400002160002803020600380604072c0d07052c0801062602070400020010010701260306040100280602072c0c07082c0e050801280004805a0000050e38040507230200070000214124000024b32c0e03012c0e05022c0c0601002529010001055a02e41bb51ea99f3b010102252901000105e89d09fea1112d000e3b010102252d01800380060b00800600028007230080070000218d2200000021982d008003800522000021ff2d000001800501000001800400010100800300800480092d008003800a2d008005800b0b00800a8009800c2300800c00002100eb2d01800a80082d028008800b0100800a0002800a0100800b0002800b2200000021ba27018005040001030080060002800622000021ff252400001fb22c0d0001032c0d020426020604020c380406072302000700002224240000216000280003020600380604072c0d07052c0801062602070402001001070126030604010000280602072c0c07082c0e050801280004805a00050e3804050723020007000000226c24000024b32c0e03012c0e05022c0c0601252400001fb22602060407002c0800072c0c01082c0c0209001000060024000023512c0400002c0c08050b00280003805d0001002805020601280006805700072c0d070223020001000023004322000022c70b2800038060000123020001000022fe22000022dc0b280003008062000123020001000022f526020504003b0901052c0c0204220000234c1c000c0201002b02000300000000000000000000000000ffffffffffffffffffff00ffffffffffffffffffff0e38010305230200050000233a240000214e2c0c020004220000234c2c0c0204220000234c2c0c0401252400001fb22c0d01032c0d00020426020604010c380406072302000700002375240000216000280302060000380604072c0d07052c0801062602070402001001070126030604010028060200072c0c07082c0e050801280004805a00050e3804050723020007000023bd2400000024b32c0e03012c0e05022c0c0601252400001fb200280102030128000300805700042c0d04021c0c0203051c0c0301001c0c0102052c0c0201250100800003800580072d00800380082d00800480090b0080088007800a2300800a00000024392d01800880062d028006800901008008000280080100800900028009220000002408252400001fb22c0d01032c0d020426020604060c3804060723020000070000245e2400002160002803020600380604072c0d07052c0801062602070004020010010701260306040100280602072c0c07082c0e050801280004805a0000050e3804050723020007000024a624000024b32c0e03012c0e05022c0c06000125290100010545a7ca711941e4153b010102252400001fb226020604072c000800072c0c01082c0c02090010000600240000243a2c0400002c0c08050b28000003805d0001002805020601280006805700072c0d0702230200010000258f0022000025130b28000380600001230200010000254a22000025280b2800038000620001230200010000254126020504003b0901052c0c020422000025981c0c000201002b02000300000000000000000000000000ffffffffffffffffffffff00ffffffffffffffffff0e380103052302000500002586240000214e2c0c02040022000025982c0c020422000025982c0c0401252400001fb226020301002c08000102260204042100100104012603020401002802020426020504204303b000000180540005000300042c0d020100280102012c0e01022c0c0201252400001f00b22c080105260206041100100106012603050401002805020626020704100000380706072c0c06080c38080709160c0909230200090000262f2d0a80570008000028080208220000260e2c08010600000102012c0e05060c380203052302000005000026ae220000264e01280003804f00070e3803070823020008000026680024000024b30c380207082302000800002685220000267a2d08804f00052200000026a502380203070e38030208230200080000269c2400003e5e2c0c07052200000026a52c0c050422000026b92d088057000422000026b90728000480500000022c08010500000102012c0e020526020804040638040809043809080a023800040a070b28000780570008230200080000271a22000026f701280002805a0000070e38020708230200080000271124000024b32c0e0705220000271a2c0d0500072d088057000222000027290c380207052302000500002744220000273b2c000d06012c0c0402252c08010800000102012d0a805700082d088057000522000000275e0d2800058050000923020009000027cd22000027732c0d06052c0d08000926020a04100c38020a0b2302000b0000279224000021602d0400058003270000800404001124000021722d0880050008002808020a00380a020b2c0e090b0001280002805a00052c0e08062c0c05022200002729052800028050000a2602000c04000b28000c8050000b2302000b000028040728000a8050000e0a380e02000d2302000d000028042400003e7000380a050b0e380a0b0c2302000c000028001b24000024b30c380b040a2302000a00002838220000282d2d088056000922000000287d0038030b0a0e38030a0c2302000c0000284f24000024b326020c0400440c380a0c0d2302000d000028662400002160002801020c00380c0a0d2c0d000d0b2c0c0b09220000287d2c0d080a1928000a805e000b1c0c090a0400380b000a090e380b090c2302000c000028a524000024b32c0e090801280005805a0000092c0c0905220000275e2400001fb226020604040638020607043807060802003802080503308050000500020f2800058050000623020006000028f0240000003e5e1c0c0207021c0c0706041c0c0602020530805e0002000626020802000a00380802072302000700002933063806020a0b28000a805e00092302000900000029332400003e701a380106070d280002805c0001230200010000295822000000294d2d0880570004220000297b18380706010d280006806300022302000200000029722400003e822c0c0104220000297b1c0c03020403308053000500030f0028000580530006230200060000299d2400003e5e1c0c0306021c0c0605041c000c0503020d280003805c000523020005000029cc22000029c12d0880570001002200002a230530805e0003000526020702000a380703062302000600002a000006380503090b280009805e00082302000800002a002400003e701838020503000d280005806300022302000200002a1a2400003e822c0c03012200002a230000380401020e380402032302000300002a3a24000024b32c0c0201252400001f00b22c0d010400280402042c0e04012c08010400000102012c0e01042c0801050000000102012c0e020526020704040638020708043808070902380209060b28000006805700072302000700002bca2200002a9407280002805000080330805000000600090f2800068050000a2302000a00002ab92400003e5e26020a04100c0038080a0b2302000b00002ad02400002160002801020a00380a080b2c0d0b06001c0c090b021c0c0b0a041c0c0a0b020530805e000b000a26020d02000a380d000b0c2302000c00002b2106380a0b0f0b28000f805e000e2302000e00002b21002400003e701a38060a0c0d28000b805c00062302000600002b462200002b3b002d08805700072200002b6918380c0a060d28000a8063000b2302000b00002b00602400003e822c0c06072200002b6926020a04100c38080a0b2302000b0000002b8024000021602d04000180032700800404001124000021722d088005000600002806020a00380a080b2c0e070b2c0e060400380209010e38020106230200000600002bc124000024b32c0e01052200002bca2c0d05020728000280500005002c0c05012200002bdf0d280001805200022302000200002e3a2200002bf4050030805f0003000226020604000a380603052302000500002c2806380203080b00280008805f00072302000700002c282400003e701c0c02030026020501002c00080102260206040900100106012603020401002802020626020704084303b000000380540007000500062d08805700012200002c670d280001805b0003230200000300002c812200002c7c2c0d04012505280001805000032c0d040501308000520001000626020804080c380308092302000900002cac240000216000280200020800380803092c0d090701280003805a00080e380308092302000900002c00d424000024b326020a04080c38080a0b2302000b00002ceb240000216000280002020a00380a080b2c0d0b0901280003805b00080e3803080a2302000a0000002d1324000024b326020b04080c38080b0c2302000c00002d2a240000216000002802020b00380b080c2c0d0c0a01280003805300080e3803080b2302000b0000002d5224000024b326020b04080c38080b0c2302000c00002d69240000216000002802020b00380b080c2c0d0c031c0c07080419280008805e00071c0c0908000400380708090e3807090b2302000b00002da024000024b319280009805e0000071c0c0a080400380708090e3807090a2302000a00002dc424000024b31928000009805e00071c0c03080400380708030e380703092302000900002de82400000024b326020804100c380608092302000900002dff24000021602d0400058000032700800404001124000021722d0880050007002807020800380806092c0e0003092c0e070401280001805a00032c0c03012200002c672c0d04022602060400100c380106072302000700002e5524000021602d0400028003270080040400001124000021722d0880050005002805020600380601072d0a805700070128000001805a00022c0e05042c0c02012200002bdf2400001fb22c0d02040028040200042c0e04022c08010400000102012c080105260206042100100106012603050004010028050206260207042000380706072c0c06080c38080709160c0909230002000900002ef42d0a8056000800280802082200002ed32c0801060000010200012c0e05062c080105260207040900100107012603050401002801020700280002020800280502093f3f0009000800072c0d050100280102012c0e01052c0e0005042d08805700032200002f470d280003805f00012302000100002f61220000002f5c2c0d0601252c0d040226020704080c380307082302000800002f7c240000002160002802020700380703082c0d08051c0c05020026020701002c08010005260208040500100108012603050401002805020826020904044303b0000200805400090007000805308050000300022d08805700012200002fd10d28000100805000072302000700002ff72200002fe601280003805a00012c0c0103220000002f472c0d060700380201080e38020809230200090000301224000024b32600020a04040c38010a0b2302000b000030292400002160002805020a00380a01000b2c0d0b0926020b04200c38080b0c2302000c0000304e24000021602d0400000780032700800404002124000021722d088005000a00280a020b00380b080c002c0e090c2c0e0a0601280001805a00072c0c07012200002fd12400001fb22c00080103000001020126020400012c0e04032c08010400000102012d0a80580000042c08010500000102012d0a80580005260206041e260207040f27020008000001002d088057000222000030da0c38020709230200090000312822000030ec002c0d0502002801020800380807092c0d09061c0c0601002c0d030604380106000300380203012c0e01052c0d0402043802060300380103022c0c0201252c0d000509023806020a26020c04200c380a0c0d2302000d00003148240000216000002801020c00380c0a0d2c0d0d0b1c0c0b0a002c0d030b04380a0b0c0038090c000a2c0e0a0504380b08092c0e09032c0d040a033080520002000b0f280002800052000c2302000c000031972400003e5e26020d04200c380b0d0e2302000e00000031ae2400002160002801020d00380d0b0e2c0d0e0c1c0c0c0b0004380b09000c00380a0c092c0e090401280002805a00092c0c090222000030da2400001f00b22c08010926020a04030010010a012603090401002809020a2c0c0a0b2d0a008061000b00280b020b2c0e050b2a02000a00000000000000000200000000000000000026020f04102c0800102c0c0a110010000f002400003e942c0400002c000c110b2c0c120c2c0c130d2c0c140e2c0d0b0a00280a020a2c0e0a0b2c0801000a00000102012c0e0b0a2c0d0c0b00280b020b2c0e0b0c2c08010b0000010200012c0e0c0b2c08010c00000102012c0e0d0c2c08010d00000102012c0e0e0d002d088057000822000032a90d280008805b00012302000100003c1c2200003200be260203040e2c08000e2c0c0a0f2c0c0b102c0c0c112c0c0d120010000300002400003f342c0400002c0c0f021e020003031e020008001e020009042c0801000a26020b04e10010010b0126030a040100280a020b26020c04e000380c0b0c002c0c0b0d0c380d0c0e160c0e0e2302000e0000333f2d0a8056000d00280d02000d220000331e2c08010b00000102012c0e0a0b26020c040d2c08000d2c0c06000e0010000c00240000259d2c0400002c0c0e0a2c0d0a0600280602062c0e06000a26020c040d2c08000d2c0c030e0010000c00240000259d2c0400002c0c0e00062c0d060300280302032c0e030626020c040d2c08000d2c0c080e0010000c0000240000259d2c0400002c0c0e032c0d030800280802082c0e080326020c04000d2c08000d2c0c090e0010000c00240000259d2c0400002c0c0e082c0d08090000280902092c0e090826020c040d2c08000d2c0c040e0010000c0024000025009d2c0400002c0c0e092c0d090400280402042c0e040926020c040d2c08000d002c0c020e0010000c00240000259d2c0400002c0c0e042c0d04020028020202002c0e020426020c040d2c08000d2c0c070e0010000c00240000259d2c040000002c0c0e022c0d020c00280c020c2c0e0c0226020c048026020d04c026020e04006026020f04a02d0880570001220000349f0d2800018064001023020010000000393122000034b42c0d0b022d09804e000300280302032d060003804e2c0801000300000102012d0a804e000326020404e02d088057000122000034e80d280000018053000623020006000038a122000034fd26020a040e2c08000e2c0c020f002c0c04102c0c0d110010000a002400003fad2c0400002c0c0f082c0c10092c000d080200280202022c0e0208072800098050000226020b04100c38020b0c230002000c000035542400002160002808020b00380b020c2c0d0c0a26020c040d002c08000d2c0c0a0e2c0c090f2d08806500100010000c0024000028ba2c040000002c0c0e0b26020c04100c38020c0d2302000d000035a224000021602d0400000880032700800404001124000021722d088005000a00280a020c00380c020d002c0e0b0d0d28000980510002230200020000361a22000035dd2c0d03022c0800010326020804090010010801260303040100280a0208002802020900280302000b3f3f000b000900082c0c03012d088057000622000036452c0d03020128000009805a00030e38090308230200080000363824000024b32c0c02012c0c03060022000036452c0d010300280302032c0e0301260208040b2c08000b2c0c0a0c002c0c060d2c0c040e00100008002400002a3f2c0400002c0c0c032c0d03040000280402042c0e040326020604082c0800082c0c03092c0c010a0010000600240000002e922c0400002c0c09042c0d040100280102012c0e010426020304082c000800082c0c0409001000030024000030892c0400002c0c090126020300052c0008010426020604040010010601260304040100280402062c0c06082c0e03080000280802082c0e010800280802082c0e05082c0d040300280302032c0e0304002a020003000000000000000003000000000000000026020a040b2c08000b2c000c030c0010000a002400003e942c0400002c0c0c052c0c0d062c0c0e082c0c000f092c0d050300280302032c0e03052c08010300000102012c0e05032c0d06000500280502052c0e05062c08010500000102012c0e06052c0801060000010200012c0e08062c08010800000102012c0e09082d088057000222000037b20d2800000280530009230200090000382e22000037c726020404092c0800092c0c03000a2c0c050b2c0c060c2c0c080d00100004002400003f342c0400002c0c0a02001e0200030032380002000300040b280004805500032302000300003814240000004284343800010007000323020003000038292400004296330200022523020000090000383b220000389026020a04030c38020a0b2302000b00003852240000002160002804020a00380a020b2c0d0b0926020a040b2c08000b2c0c030c2c000c050d2c0c060e2c0c080f2c0c09100010000a0024000042a82c04000022000000389001280002805a00092c0c090222000037b20530804f0001000626020a00040e2c08000e2c0c020f2c0c04102c0c06110010000a002400003fad2c040000002c0c0f082c0c10092c0d080600280602062c0e06082c0d03062c08010a2600020b04090010010b0126030a0401002808020b002806020c00280a020e3f3f00000e000c000b2c0d0a0600280602062c0e060a2c0e0a0301280001805a0006002c0c060122000034e82c0d0b1026021204200c38011213230200130000394c00240000216000280a021200381201132c0d131126021304e00c3801131423020000140000397124000021602d0400108003270080040400e124000021722d080080050012002812021300381301142c0e111401280001806400102602130420000c3801131423020014000039b62400002160002806021300381301142c0d14001126021404e00c3810141523020015000039db24000021602d040012800327000080040400e124000021722d0880050013002813021400381410152c0e11150001280001804f001026021204200c380112142302001400003a20240000216000002803021200381201142c0d141126021404e00c381014152302001500003a004524000021602d0400138003270080040400e124000021722d088005001200002812021400381410152c0e11150038010e1026021304200c38011314230200001400003a872400002160002808021300381301142c0d141126021404e00c38001014152302001500003aac24000021602d0400128003270080040400e12400000021722d0880050013002813021400381410152c0e11150038010c102602120004200c380112142302001400003aee2400002160002809021200381201142c000d141126021404e00c381014152302001500003b1324000021602d040013800003270080040400e124000021722d0880050012002812021400381410152c0e0011150038010f1026021304200c380113142302001400003b55240000216000002804021300381301142c0d141126021404e00c381014152302001500003b7a0024000021602d0400128003270080040400e124000021722d088005001300280013021400381410152c0e11150038010d1026021204200c38011214230200140000003bbc2400002160002802021200381201142c0d141126021404e00c38100014152302001500003be124000021602d0400138003270080040400e12400000021722d0880050012002812021400381410152c0e11152c0e120b0128000180005a00102c0c1001220000349f2302000100003c292200003c7e26020204020c00380802032302000300003c402400002160002809020200380208032c0d030100260202040e2c08000e2c0c0a0f2c0c0b102c0c0c112c0c0d122c0c011300100000020024000042a82c0400002200003c7e01280008805a00012c0c01082200000032a92400001fb226020604072c0800072c0c01082c0c02090010000600240000003d672c0400002c0c08050b280003805d000100280502060128000680570000072c0d07022302000100003d592200003cdd0b28000380600001230200010000003d142200003cf20b280003806200012302000100003d0b26020504003b000901052c0c02042200003d621c0c0201002b0200030000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e38010305230200000500003d50240000214e2c0c02042200003d622c0c02042200003d622c0c040001252400001fb22c0d01032c0d020426020604040c38040607230200070000003d8b2400002160002803020600380604072c0d07052c0801062602070402000010010701260306040100280602072c0c07082c0e050801280004805a00050e00380405072302000700003dd324000024b32c0e03012c0e05022c0c060125290001000105be11c73bbb04a4fc3b0101022529010001057425c86e086b03c13b00010102252901000105e3b1cb17b4b196ae3b010102252901000105203960fa00a7b733883b01010225290100010597178cf85aace5563b010102252901000100053b7ee0a2f674688e3b01010225290100010565a49ce5d4594d753b01010200252901000105288692b047dcfd433b010102252901000105646188a8c6cf9400cb3b010102252901000105c96f933b139de9163b010102252400001fb22c0800010226020304040010010301260302040100280202032c0c03042d0a805800000400280402042d0a8058000400280402042d0a805800042c0d02030028030200032c0e03022c08010326020404050010010401260303040100280302042c0c0004052d0a8058000500280502052d0a8058000500280502052d0a805800050000280502052c0e01052d08805500042c0c02012c0c03022d088057000325240000001fb22c0d04050b280005805500062302000600003f5626020704003b0901000726020504062c0800062c0c01072c0c02082c0c03092c0c040a00100005000024000043d32c0400002c0d01052c0d02062c0d03072c0e05012c0e06022c0e0007032d0a80590004002806020201280002805700032c0d0301252400001fb2002c080105260206041100100106012603050401002805020626020704100038000706072c0c06080c38080709160c09092302000900003ff92d0a805700080000280802082200003fd82c08010600000102012c0e05060c38020305230200050000004078220000401801280003804f00070e3803070823020008000040322400000024b30c38020708230200080000404f22000040442d08804f000522000000406f02380203070e3803020823020008000040662400003e5e2c0c070522000000406f2c0c050422000040832d088057000422000040830728000480500002002c08010500000102012c0e020526020804040638040809043809080a023804000a070b2800078057000823020008000040e422000040c101280002805a0007000e3802070823020008000040db24000024b32c0e070522000040e42c0d0507002d088057000222000040f30c38020705230200050000410e22000041052c0d0006012c0c0402252c08010800000102012d0a805700082d08805700052200000041280d280005805000092302000900004197220000413d2c0d06052c0d08090026020a04100c38020a0b2302000b0000415c24000021602d0400058003270000800404001124000021722d0880050008002808020a00380a020b2c0e090b0100280002805a00052c0e08062c0c050222000040f3052800028050000a26020c0004000b28000c8050000b2302000b000041ce0728000a8050000e0a380e020d002302000d000041ce2400003e7000380a050b0e380a0b0c2302000c000041e50024000024b30c380b040a2302000a0000420222000041f72d08805600092200000042470038030b0a0e38030a0c2302000c0000421924000024b326020c04e0000c380a0c0d2302000d000042302400002160002801020c00380c0a0d2c0d0d000b2c0c0b0922000042472c0d080a1928000a805e000b1c0c090a0400380b0a00090e380b090c2302000c0000426f24000024b32c0e090801280005805a0009002c0c09052200004128290100010561be47556b1380913b01010225290100010005b87a3944b3b13c563b010102252400001fb22c0d03062c0d04070b280007008055000823020008000042ce26020904003b0901090b2800068053000723020000070000435f22000042e32c0d01062c0d02072c0d03082c0d040926020b0400030c38080b0c2302000c0000430a24000021602d0400068003270080040400000424000021722d088005000a00280a020b00380b080c2c0e050c0128000880005a00050e38080506230200060000434a24000024b32c0e0a012c0e07022c0e0005032c0e090422000043d226020604072c0800072c0c01082c0c02092c0c03000a2c0c040b001000060024000043d32c0400002c0d01062c0d02072c0d0408002d04000680032700800404000424000021722d0880050009002809020a012800000a8057000b2c0e050b2c0e09012c0e07022d0a805a00032c0e08042200000043d2252400001fb22d088057000522000043e30d2800058053000623020006000000444e22000043f82c0d01052c0d02062c0d03072c0d04082c0801092602000a04050010010a012603090401002806020a26020b0404002809020c3e0f00000a000c2c0d090600280602062c0e06092c0e05012c0e09022c0e07032c0e080004252c0d03060c3805060701280005805a0006230200070000446c22000045001d2c0d01072c0d02082c0d03092c0d040a26020c04040c38050c0d2302000d00000044932400002160002808020c00380c050d2c0d0d0b26020d04030c3805000d0e2302000e000044b82400002160002807020d00380d050e2c0d0e0c0038000b0c0d26020c04040c38050c0e2302000e000044e224000021602d0400088000032700800404000524000021722d088005000b00280b020c00380c050e2c0e000d0e2c0e07012c0e0b022c0e09032c0e0a04220000451d2c0c06052200004300e32d0018ca18ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex b/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex index 41a60fbefada..ba589897a334 100644 --- a/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex +++ b/yarn-project/protocol-contracts/fixtures/PrivateFunctionBroadcastedEventData.hex @@ -1 +1 @@ -0abf338154e355442d9916d630da0491036d5a7b23c42b477c1395ba3bf9b42d270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f101503049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea01bb3b34c9349b23ac39d039e544844c573e5610c8888080c4c4e906254d8c7a124ac28b575def2e243406b17fa9f0925bf1118986880d83a9b745459bc8f3a1233d10e0c959338e062b1c76fb81e17fcf61643da568eac372bb7feac8bfa3570861b8c908d4acade859229678fac5c86ce12b5fa26c04ceef065df68e74b1181a0ca5eecb1430479902264f04e557160a4666fb42bb8b283c6397e3d17ac9372a6595890719fef7967c209488728aa5342438ba52058a3c770202f55acf685400000000000000000000000000000000000000000000000000000000000000050a3e92c5ed495ea48c51f5a0382513a803cc73b357a6771bbc41530ae4c4bc3d03b075046b71ff5f8e0792de4b82ddc979fcb3b8c03abe12972e65c57759fb462cee63a8ffb1c63b886b7dba5ae1677fc71d848a6fb52e8156dfa49136faaec800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000d9e0e7f11eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b9441dec445c8fa1078b7dce9b3ccf5de0be2245124caabca925bb78b32f1937accf00000000000000000000000000000000000000000000000000000000000055fc001f8b08000000000000ffeddd05745b67c2706b87390e3333c7761c66666666006666680a699b32738a4953a694999b5298999919efd68cfd55759d76662a7700baef3f5a6b2fcb967cfcbc47872cd94789c2fe7919161e16563dfc9fd713510092988f89a9409cafc57e0cbe9e2c9efba589e76be9e2f95a783c5fcb18cfd700b2519d385fcb1fcffd0ac4f3b582f17cad503c5f2b1ef3b5e04ba2988f7562003e5688a8141d3db072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab440056ac52714054950a15065689ae52b96abfaa9523aa464657181839a862d50a008322fe79599ffe976945fca94b54ff84746ef8cf9dd171bf10b065a2a441d600c07cb81273bd44d82fd74b065ddf10739fd8efdbc8e79b68336d49ffcbd763002f49e2cc83883f77892c15c2696d4c1fbac7666bc896a1f81f9bad418fcda600a0eb9b83ae6f89f3d86ce3f3edb48376c6f3d8240ef163533c84cbfaaed0cd00cfc8e0ed4960ba05e2ccdbb89744219e2f89c242bb6cc41a33c45cdfcd98f600d05eda47fbe9001da44374988ed0513a46c7e9049da453e9636646f2a00522002167c6c110ae28f1704335eda8e079713afd3f3f9e491ff6ebbd53e086cb7100be16b853dca52ad45bc18321d8720d1cf4cfcbe9106e05cf84f0c10d2c942900c2feb535f4cfba83e74164950a5151952b04ee5765404464f480fe5155a2a20006f48b8ee81fd1b77fd4c0aad191550745474557e83fa07f3fa6d9377250c400a0befdab0eaaf2cf69057bcfa64f407060e27137e17f167f36849bdd73215c00b0126a1e9e4bffdbe9fed979782ec45bb8508ffbcc35c6fd67a77b3ec4874000b11bd4f331cbf95fb9973a22dc4b5d88d9d85c8cbb97ba10cf5eeae25fb097003a12c2bdd485106e4c2e4af7521712682f75297d02822f25c05eea5208f7520097ffe67ba97facbc09b097bafc37df4b5dbcc6b8ffec74af24d05eeaca7f61002f755cb897ba1abbb1090ffbf51ee96a3c7ba9c09d127a2f753c847ba9aba100dc98843bf7525713682f95283c01c18189877a2f9528740f6064e2f0bff75e002a300f1387877e2f9538fcefbd970aaca4f18dfbcf4e374978c2eca59284ff00f57ba953c2bd54d2988d4db2b87ba9c00d71f752c9fe82bdd4a910eea59286007063924cba970a9e07a1dc4b250f4f4070f204d84b250fe15e2ac5df7c2f150098872912602f95e26fbe974a768d71ffd9e9a64ca0bd54caf0dfee99426d4f0015327b64bff85eb00d4c3ff685d9dd412fd2ee4b7fed17d353f33d69282da5000b4ff817d3f784f07994d4215cf7d38778b98afbd8a40f7a6cd2045d4f1b74003d5df8af1f9b703ecf401929533c8f4da897cfccfff93ca8f0afcc83e0e573006fd032191ef4f5cc71e641163ecf4ad928fb5f300f72846c39a8109d90ce9c00ffb97340c4bff058e5087a4cf6073d560782aee78cf358e5e2f3dc9487f2fe0005db9210bef41b992b84db927c21de3727d4fc3b14c2f9973b84f32fbf64fe001d0ee1fccb13c2f9572081f765f982b60df983ae1708ba9e37ceb6a1209f1700a2c254e42fd83684f005b7c882217c6c8a4a96eda3219c7f854238ff8a49e600dfb110cebfc2219c7fc51378db5034681b502ce87af1a0eb45e26c1b4af07900492a45a5ff826d43085fe6882c11c2c7a68c64d93e11c265bb6408e75f59c900fc3b19c2f9572a84f3af5c026f1bca046d03ca065d2f1774bd749c6d43793e008fa0488afa0bb60d217c7239b27c081f9b0a09fcd854087a0c2282ae47065d008f8af3d844f37945aa4495ff82dfcdab846e1e0c8a6f1e54091a6b74d0f52c00bff3fc44553eaf16f38f533562e641d298fbfe157fe85f3584cb45f0f39f3500635e54a815f7d5a8c00d73e27cad56ccd7822fa15e31ab867065aaf9af4fab00ff1f4c2bb256885f8d4a1c16ff4ba461ffe6fcfc237758022e943543bcb18a00bdd48ebb30d6fe175e060de5c2f207d6c83fb83da2760817e23ae1215b187e00f54a489d7f6165feb3f65a219c0fa19ca775ff8d79fa473f2b789ed60dda6800a60c9a9fc1f334e2cf5d22affcfef4a2fa0f8aac507160e58a1195fa46571c0050a942d480a8ca1103a22b0e8a041c55359a5933a87f74950155a22a0c8aaa001cd5ff4a687dff58c662376cb13b92d8bd6aad98ebf5f8589f1a84ffb57f2f00d220817e7308f163fcabbf176918b3876e1477a318b821eedf8b34fa17369400117feef2ab99f867ff5ea4610857ea4621de43ff557f2f123c0f42f9f7228d00c313101c9878a8ff5ea471087f276b12c2052ba1e66193f0d0ffbd4893106f00e1423dee46d718f79f9d6ed3101f8ac66e509b86ff76cf14eaa3a450be3e57002f84cb7db3ffd20635e2cf5d229b85785988bd340f4f4070f3f0d04fb74502006f0423fedce51fe36e11fecb0c0ed1747ff749dd3f3b1f42f96270fd103e3e002da52b6bcb045a595b852720b85502acacadffe62b6b60dcadffe29535e2cf005d7eb5378cf87397906e4cdb8478a14f15f378b709fa5dbb7ed0f516e1bf3c00537d28e82fbb0e075d8ffdb7edb6dcb71db58ff99ed869d7bbc6b41b054dfb008feed3818f1da95378c2ac9b2d6296d1501f5d76fe9b1f5527d4b8bb8470fd00090bba240eb1b35108d7cdae211e73dcb146fcb94b6460fd0ce5e31258273b0027c0b2d32d819e6b0bf5b2733184ff58dbfd6fbeec04b6fd217c9a2c32b0ae00744b8065a74788979d50cfc7c03213ca638bc072d32301e663a2b08459074300edec19ba793920be57fc7b061d8b049685d8ebdbd25ffb15ff5e7cde9bfa5000dff0843fc5e1be106e877a497f190ce17f0dfdea97c17ee10908ee9700bf0c00f6ff9bff321818777fd9333709b5a0fe59d700e9ca1a4a77b07760780282070026c0ca3ae86fbeb206c63d288156d6501f09f48fb1867aefda3ffceff978070056d8c0862e71d8b52f217257887d5d2bf812ea65ad4458e87706a136961418004b2580f1fffe683559d86f2fa11e4042fdea11162267c58ad115060dec5b390021e7c1b6043a3d4da89dbb24ce24a19bd6affe087a70ccce7148dc3fb10adc005020ecd79750ef990687706f32343cb42b70ec7c181acf7c08f5833b24c48700c1c9c2fe9ac3e084ded0857c811b1ac2056e58022d70c3fe8515efeff4fb6000e9b0845908423de6102eac916524634e1cc23197958c39847bcac8727fd1980023fedc25b27c08e79fe5c82d22cce18c9438a324ce0a1267b4c45951e2ac240071569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c750025ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b30085c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec247100769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d2500ce7e12677f897380c43950e21c24710e963887489c4325ce6112e77089738400c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e009638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c007325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f3360089f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f3018900f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f90094c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f9400385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c006f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f004a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b2500ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae009638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce006d12e776897387c4b953e2dc9540cec4719c7fa7f7a5defd178d39e2cf5d2200f78470fe0d0d772c8f7bc31cce7d12e77e89f380c47950e23c24711e96388f00489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e7007989f382c47951e2bc24715e9638af489c5725cec0040dce4412676289338900c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a6009738c325ce0c126746893393c49959e2cc9240cebff3df0564fd7f70ccd92400cb63f6447f7efe55eddbaf7f4464c5be09f9d82409e198734896c7f2211c73004ec9f298eb2f7a6c22fedc253277a2d03dcebbd23bc69c2784631e2cf9bba900bc92f5269fc4995fe22c20711694380b499c8525ce2212675189b398c4595c00e22c21719694384b499ca525ce3212675989b39cc4595ee28c90382325ce280089b382c4192d715694382b499c9525ce2a12675589b39ac4595de2ac2171d60094386b499cb525ce3a12675d89b39ec4595fe26c20713694381b499c8d25ce002612675389b399c4d95ce26c2171b694385b499cad25ce3612675b89b39dc400d95ee2ec20717694383b499c9d25ce2e12675789b39bc4d95de2ec2171f69400387b499cbd25ce3e12675f89b39fc4d95fe21c20710e943807499c8325ce210012e750897398c4395ce21c21718e943847499ca325ce3112e75889739cc439005ee29c20714e943827499c9325ce2912e75489739ac4395de29c2171ce94380067499cb325ce3912e77512e75c89f37a89f30689f34689f32689739ec479b300c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e2bc4be2bc5be2bc47e200bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c44e27c54e27c4ce27c005ce27c42e25c20713e29713e25713e2d713e23713e2b713e27712e94381749009ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce5725ced724ced725ce003724ce3725ceb724ce2512e7db12e73b12e7bb12e77b12e7fb12e70712e7870012e74712e7c712e72712e7a712e76712e7e712e71712e79712e75712e7d71200e73712e7b712e77712e75289f37b89f30789f34789f32789f367897399c4b9005ce25c2171ae943857499cab25ce3512e75a89739dc4b95ee2dc20716e94380037499c9b25ce2d12e75689739bc4b95de2dc2171ee943877499cbb25ce3d1200e75e89739fc4b95fe23c20711e94380f499c8725ce2312e75189f398c4795c00e23c21719e94384f499ca725ce3312e75989f39cc4795ee2bc20715e94382f00499c9725ce2b12e75589332cb1c39948e24c2c71269138934a9cc924cee41200670a8933a5c4994ae24c2d71a69138d34a9ce924cef41267b8c49941e2cc280071669238334b9c5924ceac1267368933bbc49943e2cc2971e69238734b9c790024cebc12673e8933bfc45940e22c28711692380b4b9c4524cea212673189b300b8c45942e22c29719692384b4b9c6524ceb212673989b3bcc4192171464a9c005112670589335ae2ac28715692382b4b9c5524ceaa12673589b3bac45943e200ac2971d692386b4b9c7524ceba12673d89b3bec4d940e26c28713692381b4b009c4d24cea612673389b3b9c4d942e26c2971b692385b4b9c6d24ceb612673b0089b3bdc4d941e2ec28717692383b4b9c5d24ceae12673789b3bbc4d943e2ec002971f692387b4b9c7d24cebe12673f89b3bfc43940e21c28710e9238074b9c004324cea112e7308973b8c43942e21c29718e9238474b9c6324ceb112e738890073bcc43941e29c28714e9238274b9c5324cea912e7348973bac43943e29c290071ce9238674b9c7324ceeb24ceb912e7f512e70d12e78d12e74d12e73c89f3006689f31689f3568973bec4799bc479bbc47987c479a7c47997c479b7c4798f00c479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c4f988c4f9a8c4f998c400f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c56e27c4ee25c28712e0092389f9738174b9c2f489c2f4a9c2f499c2f4b9caf489caf4a9caf499caf4b009c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725cef724cef725ce0f24ce000f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f24ce2f25ceaf24ceaf0025ce6f24ce6f25ceef24cea512e7f712e70f12e78f12e74f12e7cf12e732890073b9c4b942e25c2971ae9238574b9c6b24ceb512e73a8973bdc4b941e2dc2800716e9238374b9c5b24cead12e7368973bbc4b943e2dc2971ee9238774b9c7b0024cebd12e73e8973bfc47940e23c28711e92380f4b9c4724cea312e73189f300b8c47942e23c29719e92384f4b9c6724ceb312e73989f3bcc47941e2bc2871005e92382f4b9c5724ceab12675812873391c49958e24c227126953893499cc90025ce1412674a893395c4995ae24c2371a69538d3499ce925ce70893383c4990051e2cc2471669638b3489c5925ce6c126776893387c49953e2cc2571e6963800f3489c7925ce7c12677e89b380c45950e22c24711696388b489c4525ce621200677189b384c45952e22c2571969638cb489c6525ce72126779893342e28c940038a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b38600c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c2471360096389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce007612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c400d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e96003887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce710012e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c4390053e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce791200e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f3001e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f3310089f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e2005c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f009738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f48009c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c005f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce650012e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b90051e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc2571ee963800f7489c7b25ce7d12e77e89f380c47950e23c24711e96388f489c4725ce631200e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c4795100e2bc24715e9638af489c5725ceb0a40e67228933b1c49944e24c2a7126933800934b9c2924ce9412672a8933b5c49946e24c2b71a69338d34b9ce1126706890033a3c49949e2cc2c71669138b34a9cd924ceec12670e8933a7c4994be2cc2d0071e69138f34a9cf924cefc12670189b3a0c45948e22c2c711691388b4a9cc50024cee212670989b3a4c4594ae22c2d71969138cb4a9ce524cef2126784c41900297146499c1524ce6889b3a2c45949e2ac2c71569138ab4a9cd524ceea1267000d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa12670389b3a1c4d948e2006c2c713691389b4a9ccd24cee612670b89b3a5c4d94ae26c2d71b69138db4a009ced24cef612670789b3a3c4d949e2ec2c71769138bb4a9cdd24ceee12670f0089b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e7008973a0c43948e21c002c710e9138874a9cc324cee112e7088973a4c4394ae21c2d718e9138c74a9c00e324cef112e7048973a2c43949e29c2c714e9138a74a9cd324cee912e70c890073a6c4394be29c2d71ce9138af9338e74a9cd74b9c37489c374a9c37499cf30024ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d12e79d12e75d12e7dd1200e73d12e7bd12e77d12e7fd12e70312e78312e74312e7c312e72312e7a312e7006312e7e312e71312e70289f34989f32989f36989f31989f35989f3398973a100c4b948e27c5ee25c2c71be2071be2871be2471be2c71be2271be2a71be267100be2e71be2171be2971be25712e9138df9638df9138df9538df9338df97383f0090383f94383f92383f96383f91383f95383f93383f9738bf9038bf9438bf920038bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c3f4a9c3f499c3f4b9c00cb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a9ceb24cef512e706890073a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e8973a7c4b94be2dc2d0071ee9138f74a9cfb24cefd12e70189f3a0c47948e23c2c711e91388f4a9cc70024cee312e70989f3a4c4794ae23c2d719e9138cf4a9ce724cef312e70589f300a2c47949e2bc2c715e9138af4a9c61c91cce44126762893389c49954e24c26007126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c00126746893393c49959e2cc2271669538b3499cd925ce1c12674e893397c499005be2cc2371e69538f3499cf925ce0212674189b390c45958e22c2271169538008b499cc525ce1212674989b394c4595ae22c2371969538cb499ce525ce0889003352e28c92382b489cd112674589b392c45959e2ac2271569538ab499cd52500ce1a12674d89b396c4595be2ac2371d69538eb499cf525ce0612674389b39100c4d958e26c22713695389b499ccd25ce1612674b89b395c4d95ae26c2371b6009538db499ced25ce0e12674789b393c4d959e2ec2271769538bb499cdd25ce001e12674f89b397c4d95be2ec2371f69538fb499cfd25ce0112e740897390c4003958e21c22710e953887499cc325ce1112e748897394c4395ae21c23718e950038c7499ce325ce0912e744897392c43959e29c22714e9538a7499cd325ce190012e74c897396c4395be29c23715e2771ce9538af97386f90386f94386f923800e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b24ce3b25cebb24cebb0025ce7b24ce7b25cefb24cefb25ce0724ce0725ce8724ce8725ce4724ce472500cec724cec725ce2724ce0512e79312e75312e7d312e73312e7b312e77312e70042897391c4f9bcc4b958e27c41e27c51e27c49e27c59e27c45e27c55e27c4d00e27c5de27c43e27c53e27c4be25c2271be2d71be2371be2b71be2771be2f71007e20717e28717e24717e2c717e22717e2a717e26717e2e717e21717e29717e0025717e2d717e23717e2b717e27712e9538bf97387f90387f94387f92387f96003897499ccb25ce1512e74a897395c4b95ae25c2371ae9538d7499ceb25ce0d0012e746897393c4b959e2dc22716e9538b7499cdb25ce1d12e74e897397c4b9005be2dc2371ee9538f7499cfb25ce0312e74189f390c47958e23c22711e9538008f499cc725ce1312e74989f394c4795ae23c23719e9538cf499ce725ce0b1200e74589f392c47959e2bc22715e9538c3923b9c8924cec41267128933a9c499004ce24c2e71a69038534a9ca924ced412671a8933adc4994ee24c2f71864b9c001924ce8c1267268933b3c49945e2cc2a71669338b34b9c3924ce9c12672e890033b7c49947e2cc2b71e69338f34b9c0524ce8212672189b3b0c45944e22c2a00711693388b4b9c2524ce9212672989b3b4c45946e22c2b71969338cb4b9c11001267a4c4192571569038a325ce8a12672589b3b2c45945e2ac2a71569338ab004b9c3524ce9a12672d89b3b6c45947e2ac2b71d69338eb4b9c0d24ce861267002389b3b1c4d944e26c2a713693389b4b9c2d24ce9612672b89b3b5c4d946e2006c2b71b69338db4b9c1d24ce8e12672789b3b3c4d945e2ec2a71769338bb4b009c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb4b9c0324ce8112e720008973b0c43944e21c2a710e9338874b9c2324ce9112e7288973b4c43946e21c002b718e9338c74b9c1324ce8912e7248973b2c43945e29c2a714e9338a74b9c003324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f71de2071de2871de240071ce93386f96386f91386f9538e74b9cb7499cb74b9c77489c774a9c77499c00774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f499c0f4b9c8f489c8f004a9c8f499c8f4b9c4f489c0b24ce2725cea724cea725ce6724ce6725cee72400ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f9b2c4f98ac4f9aac4f9009ac4f9bac4f986c4f9a6c4f996c4b944e27c5be27c47e27c57e27c4fe27c5f00e2fc40e2fc50e2fc48e2fc58e2fc44e2fc54e2fc4ce2fc5ce2fc42e2fc52e200fc4ae2fc5ae2fc46e2fc56e2fc4ee25c2a717e2f71fe2071fe2871fe2471fe002c712e9338974b9c2b24ce9512e72a8973b5c4b946e25c2b71ae9338d74b9c001b24ce8d12e7268973b3c4b945e2dc2a716e9338b74b9c3b24ce9d12e72e890073b7c4b947e2dc2b71ee9338f74b9c0724ce8312e72189f3b0c47944e23c2a00711e93388f4b9c2724ce9312e72989f3b4c47946e23c2b719e9338cf4b9c170024ce8b12e72589f3b2c47945e2bc2a7186a5703813499c8925ce2412675289003399c4995ce24c2171a6943853499ca925ce3412675a89339dc4995ee20c97003833489c1925ce4c12676689338bc49955e2cc267166973873489c3925ce5c0012676e89338fc49957e2cc2771e697380b489c0525ce4212676189b388c4590054e22c26711697384b489c2525ce5212676989b38cc45956e22c2771969738002324ce4889334ae2ac2071464b9c1525ce4a12676589b38ac45955e2ac2671005697386b489c3525ce5a12676d89b38ec45957e2ac2771d697381b489c0d2500ce4612676389b389c4d954e26c26713697385b489c2d25ce5612676b89b38d00c4d956e26c2771b697383b489c1d25ce4e12676789b38bc4d955e2ec2671760097387b489c3d25ce5e12676f89b38fc4d957e2ec2771f6973807489c0325ce004112e760897388c43954e21c26710e973847489c2325ce5112e76889738cc4003956e21c27718e973827489c1325ce4912e76489738ac43955e29c26714e97003867489c3325ce5912e76c89738ec4799dc43957e2bc5ee2bc41e2bc51e2bc0049e29c2771de2c71de2271de2a71ce97386f93386f9738ef9038ef9438ef920038ef9638ef9138ef9538ef9338ef97381f90381f94381f92381f96381f9138001f95381f93381f97389f903817489c4f4a9c4f499c4f4b9ccf489ccf4a9ccf00499c0b25ce4512e7f312e76289f30589f34589f32589f36589f31589f3558900f33589f37589f30d89f34d89f32d897389c4f9b6c4f98ec4f9aec4f99ec4f900bec4f981c4f9a1c4f991c4f9b1c4f989c4f9a9c4f999c4f9b9c4f985c4f9a500c4f995c4f9b5c4f98dc4f9adc4f99dc4b954e2fc5ee2fc41e2fc51e2fc49e200fc59e25c26712e973857489c2b25ce5512e76a89738dc4b956e25c2771ae97003837489c1b25ce4d12e76689738bc4b955e2dc26716e973877489c3b25ce5d0012e76e89738fc4b957e2dc2771ee97380f489c0725ce4312e76189f388c4790054e23c26711e97384f489c2725ce5312e76989f38cc47956e23c27719e9738002f489c1725ce4b12e76589f38ac47955e20c4be970269238134b9c4924cea4001267328933b9c49942e24c2971a69238534b9c6924ceb412673a8933bdc419002e71669038334a9c9924cecc1267168933abc4994de2cc2e71e69038734a9c00b924cedc12671e8933afc4994fe2cc2f711690380b4a9c8524cec21267118900b3a8c4594ce22c2e719690384b4a9ca524ced212671989b3acc4594ee22c2f007146489c91126794c45941e28c96382b4a9c9524ceca12671589b3aac4594d00e2ac2e71d690386b4a9cb524ceda12671d89b3aec4594fe2ac2f713690381b004a9c8d24cec612671389b3a9c4d94ce26c2e71b690385b4a9cad24ced61267001b89b3adc4d94ee26c2f717690383b4a9c9d24cece12671789b3abc4d94de200ec2e71f690387b4a9cbd24cede12671f89b3afc4d94fe2ec2f710e9038074a009c8324cec112e7108973a8c4394ce21c2e718e9038474a9ca324ced112e718008973acc4394ee21c2f714e9038274a9c9324cec912e7148973aac4394de29c002e71ce9038674a9cb324ced912e71c89f33a8973aec479bdc47983c479a3c4007993c4394fe2bc59e2bc45e2bc55e29c2f71de2671de2e71de2171de2971de002571de2d71de2371de2b71de2771de2f713e20713e28713e24713e2c713e2200713e2a713e26713e2e713e21712e90389f94389f92389f96389f91389f9538009f9338174a9c8b24cee725cec512e70b12e78b12e74b12e7cb12e72b12e7ab0012e76b12e7eb12e71b12e79b12e75b12e71289f36d89f31d89f35d89f33d8900f37d89f30389f34389f32389f36389f31389f35389f33389f37389f30b89f3004b89f32b89f36b89f31b89f35b89f33b8973a9c4f9bdc4f983c4f9a3c4f99300c4f9b3c4b94ce25c2e71ae9038574a9cab24ced512e71a8973adc4b94ee25c002f716e9038374a9c9b24cecd12e7168973abc4b94de2dc2e71ee9038774a9c00bb24cedd12e71e8973afc4b94fe2dc2f711e90380f4a9c8724cec312e7118900f3a8c4794ce23c2e719e90384f4a9ca724ced312e71989f3acc4794ee23c2f00715e90382f4a9c9724cecb12e71589f3aac41996cae14c247126963893489c004925ce64126772893385c49952e24c2571a69638d3489c6925ce7412677a8900335ce2cc207166943833499c9925ce2c12675689339bc4995de2cc2171e694003873499cb925ce3c12675e89339fc4995fe22c20711694380b499c8525ce220012675189b398c4595ce22c21719694384b499ca525ce3212675989b39cc459005ee28c90382325ce2889b382c4192d715694382b499c9525ce2a12675589b3009ac4595de2ac2171d694386b499cb525ce3a12675d89b39ec4595fe26c2071003694381b499c8d25ce2612675389b399c4d95ce26c2171b694385b499cad2500ce3612675b89b39dc4d95ee2ec20717694383b499c9d25ce2e12675789b39b00c4d95de2ec2171f694387b499cbd25ce3e12675f89b39fc4d95fe21c20710e00943807499c8325ce2112e750897398c4395ce21c21718e943847499ca325ce003112e75889739cc4395ee29c20714e943827499c9325ce2912e75489739ac400395de29c2171ce943867499cb325ce3912e77512e75c89f37a89f30689f3460089f32689739ec479b3c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e200bc4be2bc5be2bc47e2bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c0044e27c54e27c4ce27c5ce27c42e25c20713e29713e25713e2d713e23713e2b00713e27712e943817499ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce005725ced724ced725ce3724ce3725ceb724ce2512e7db12e73b12e7bb12e77b0012e7fb12e70712e78712e74712e7c712e72712e7a712e76712e7e712e7171200e79712e75712e7d712e73712e7b712e77712e75289f37b89f30789f34789f3002789f367897399c4b95ce25c2171ae943857499cab25ce3512e75a89739dc400b95ee2dc20716e943837499c9b25ce2d12e75689739bc4b95de2dc2171ee94003877499cbb25ce3d12e75e89739fc4b95fe23c20711e94380f499c8725ce230012e75189f398c4795ce23c21719e94384f499ca725ce3312e75989f39cc479005ee2bc20715e94382f499c9725ce2b12e75589332cb5c39948e24c2c7126910038934a9cc924cee412670a8933a5c4994ae24c2d71a69138d34a9ce924cef4001267b8c49941e2cc2871669238334b9c5924ceac1267368933bbc49943e2cc002971e69238734b9c7924cebc12673e8933bfc45940e22c28711692380b4b9c004524cea212673189b3b8c45942e22c29719692384b4b9c6524ceb21267398900b3bcc4192171464a9c5112670589335ae2ac28715692382b4b9c5524ceaa1200673589b3bac45943e2ac2971d692386b4b9c7524ceba12673d89b3bec4d94000e26c28713692381b4b9c4d24cea612673389b3b9c4d942e26c2971b692385b004b9c6d24ceb612673b89b3bdc4d941e2ec28717692383b4b9c5d24ceae1267003789b3bbc4d943e2ec2971f692387b4b9c7d24cebe12673f89b3bfc43940e2001c28710e9238074b9c4324cea112e7308973b8c43942e21c29718e9238474b009c6324ceb112e7388973bcc43941e29c28714e9238274b9c5324cea912e734008973bac43943e29c2971ce9238674b9c7324ceeb24ceb912e7f512e70d12e7008d12e74d12e73c89f36689f31689f3568973bec4799bc479bbc47987c479a700c47997c479b7c4798fc479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c400f988c4f9a8c4f998c4f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c0056e27c4ee25c28712e92389f9738174b9c2f489c2f4a9c2f499c2f4b9caf48009caf4a9caf499caf4b9c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725ce00f724cef725ce0f24ce0f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f0024ce2f25ceaf24ceaf25ce6f24ce6f25ceef24cea512e7f712e70f12e78f1200e74f12e7cf12e7328973b9c4b942e25c2971ae9238574b9c6b24ceb512e73a008973bdc4b941e2dc28716e9238374b9c5b24cead12e7368973bbc4b943e2dc002971ee9238774b9c7b24cebd12e73e8973bfc47940e23c28711e92380f4b9c004724cea312e73189f3b8c47942e23c29719e92384f4b9c6724ceb312e7398900f3bcc47941e2bc28715e92382f4b9c5724ceab1267581a873391c49958e24c00227126953893499cc925ce1412674a893395c4995ae24c2371a69538d3499c00e925ce70893383c49951e2cc2471669638b3489c5925ce6c126776893387c4009953e2cc2571e69638f3489c7925ce7c12677e89b380c45950e22c2471169600388b489c4525ce6212677189b384c45952e22c2571969638cb489c6525ce7200126779893342e28c9438a324ce0a1267b4c45951e2ac2471569638ab489c550025ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b30081c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c257100b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d2500ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f89738000c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e009638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce006912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b2400ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f3004e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f3610089f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc400f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f0091385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a009cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c005f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f0025ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce007512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c400b953e2dc2571ee9638f7489c7b25ce7d12e77e89f380c47950e23c24711e9600388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce730012e77989f382c47951e2bc24715e9638af489c5725ceb0b40e67228933b1c4009944e24c2a71269338934b9c2924ce9412672a8933b5c49946e24c2b71a6930038d34b9ce11267068933a3c49949e2cc2c71669138b34a9cd924ceec12670e008933a7c4994be2cc2d71e69138f34a9cf924cefc12670189b3a0c45948e22c002c711691388b4a9cc524cee212670989b3a4c4594ae22c2d71969138cb4a9c00e524cef2126784c419297146499c1524ce6889b3a2c45949e2ac2c7156913800ab4a9cd524ceea12670d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa1200670389b3a1c4d948e26c2c713691389b4a9ccd24cee612670b89b3a5c4d94a00e26c2d71b69138db4a9ced24cef612670789b3a3c4d949e2ec2c71769138bb004a9cdd24ceee12670f89b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e700008973a0c43948e21c2c710e9138874a9cc324cee112e7088973a4c4394ae2001c2d718e9138c74a9ce324cef112e7048973a2c43949e29c2c714e9138a74a009cd324cee912e70c8973a6c4394be29c2d71ce9138af9338e74a9cd74b9c3700489c374a9c37499cf324ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d1200e79d12e75d12e7dd12e73d12e7bd12e77d12e7fd12e70312e78312e74312e700c312e72312e7a312e76312e7e312e71312e70289f34989f32989f36989f3190089f35989f3398973a1c4b948e27c5ee25c2c71be2071be2871be2471be2c7100be2271be2a71be2671be2e71be2171be2971be25712e9138df9638df9138df009538df9338df97383f90383f94383f92383f96383f91383f95383f93383f970038bf9038bf9438bf9238bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c003f4a9c3f499c3f4b9ccb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a009ceb24cef512e7068973a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e008973a7c4b94be2dc2d71ee9138f74a9cfb24cefd12e70189f3a0c47948e23c002c711e91388f4a9cc724cee312e70989f3a4c4794ae23c2d719e9138cf4a9c00e724cef312e70589f3a2c47949e2bc2c715e9138af4a9c61e91cce4412676200893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c002771a69738c325ce0c126746893393c49959e2cc2271669538b3499cd925ce001c12674e893397c4995be2cc2371e69538f3499cf925ce0212674189b390c4005958e22c22711695388b499cc525ce1212674989b394c4595ae22c237196950038cb499ce525ce08893352e28c92382b489cd112674589b392c45959e2ac220071569538ab499cd525ce1a12674d89b396c4595be2ac2371d69538eb499cf50025ce0612674389b391c4d958e26c22713695389b499ccd25ce1612674b89b30095c4d95ae26c2371b69538db499ced25ce0e12674789b393c4d959e2ec227100769538bb499cdd25ce1e12674f89b397c4d95be2ec2371f69538fb499cfd2500ce0112e740897390c43958e21c22710e953887499cc325ce1112e74889739400c4395ae21c23718e9538c7499ce325ce0912e744897392c43959e29c22714e009538a7499cd325ce1912e74c897396c4395be29c23715e2771ce9538af9738006f90386f94386f9238e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b0024ce3b25cebb24cebb25ce7b24ce7b25cefb24cefb25ce0724ce0725ce872400ce8725ce4724ce4725cec724cec725ce2724ce0512e79312e75312e7d312e7003312e7b312e77312e742897391c4f9bcc4b958e27c41e27c51e27c49e27c5900e27c45e27c55e27c4de27c5de27c43e27c53e27c4be25c2271be2d71be237100be2b71be2771be2f717e20717e28717e24717e2c717e22717e2a717e26717e002e717e21717e29717e25717e2d717e23717e2b717e27712e9538bf97387f9000387f94387f92387f963897499ccb25ce1512e74a897395c4b95ae25c2371ae009538d7499ceb25ce0d12e746897393c4b959e2dc22716e9538b7499cdb25ce001d12e74e897397c4b95be2dc2371ee9538f7499cfb25ce0312e74189f390c4007958e23c22711e95388f499cc725ce1312e74989f394c4795ae23c23719e950038cf499ce725ce0b12e74589f392c47959e2bc22715e9538c3d23b9c8924ce00c41267128933a9c4994ce24c2e71a69038534a9ca924ced412671a8933adc400994ee24c2f71864b9c1924ce8c1267268933b3c49945e2cc2a71669338b34b009c3924ce9c12672e8933b7c49947e2cc2b71e69338f34b9c0524ce821267210089b3b0c45944e22c2a711693388b4b9c2524ce9212672989b3b4c45946e22c002b71969338cb4b9c111267a4c4192571569038a325ce8a12672589b3b2c4590045e2ac2a71569338ab4b9c3524ce9a12672d89b3b6c45947e2ac2b71d6933800eb4b9c0d24ce8612672389b3b1c4d944e26c2a713693389b4b9c2d24ce961200672b89b3b5c4d946e26c2b71b69338db4b9c1d24ce8e12672789b3b3c4d94500e2ec2a71769338bb4b9c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb004b9c0324ce8112e7208973b0c43944e21c2a710e9338874b9c2324ce9112e700288973b4c43946e21c2b718e9338c74b9c1324ce8912e7248973b2c43945e2009c2a714e9338a74b9c3324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f0071de2071de2871de2471ce93386f96386f91386f9538e74b9cb7499cb74b9c0077489c774a9c77499c774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f00499c0f4b9c8f489c8f4a9c8f499c8f4b9c4f489c0b24ce2725cea724cea72500ce6724ce6725cee724ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f900b2c4f98ac4f9aac4f99ac4f9bac4f986c4f966023913c7715688a8141d3db00072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab4456ac52714054950a0015065689ae52b96abfaa9523aa464657181839a862d50a8362a65d3c84637e00eb2f1a73c49fbb442e491fbaf9372cdcf138270de1fc7b5bb26c270be198df00918c397908c7fcae64cc294238e6f724634e19c231bf2f1973aa108ef903c90098538770cc1f4ac69c268463fe4832e6b4211cf3c79231a70be1983f918c190066c8c6fca964cce1211cf36792316708e1983f978c396308c7fc8564cc99420038e62f2563ce1cc2317f25197396108ef96bc998b38670ccdf48c69c2d846300fe5632e6ec211cf3779231e708e198974ac69c338463fe5e32e65c211cf30f009231e70ee1987f948c394f08c7fc9364cc794338e69f2563ce17c2312f938c00397f08c7bc5c32e602211cf30ac9980b8670cc2b25632e14c231af928cb9700008c7bc5a32e622211cf31ac9988b8670cc6b25632e16c231af0be1989384fd00f36f7c027fdf16b894a6325496ca51f9c0cfa0488a0acc078aa68a54892a530015aa4ad5a83ad5a09a548b6ac78cbb2ed5a3fad4801a52236a4c4da82935a300e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a52002fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d6368002c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d3000d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f000fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b488009ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d007a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adf00d30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb40085b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a004e27e8249da2d37486ced2393a4f17e8225da2cb7485ae5260054b448929090025a564949c52504a4a45a9290da5a574949ec2290365a44c9499b25056ca4600d92907e5a45c949bf2505eca47f9a90015a44254988a50512a46c5a90495a40052549aca50592a47e5298222298a2a503455a44a5499aa5055aa46d5a906d500a45a549bea505daa47f5a90135a446d4989a50536a46cda905b5a456d49ada00505b6a47eda90375a44ed499ba5057ea46dda907f5a45ed49bfa505fea47fd0069000da441349886d0501a46c369048da451349ac6d0581a47e369024da449003499a6d0549a46d36906cda459349be6d0753497aea71be846ba89e6d1cd74000bdd4af3e936ba9deea03be92eba9beea17be93eba9f1ea007e9217a981ea10047e9317a9c9ea005f4243d454fd333f42c3d470b69113d4f8be9057a915ea20097e9157a955ea3d7e90d7a93dea225f436bd43efd27bf43e7d401fd247f431007d429fd267f4397d415fd257f4357d43dfd277b494bea71fe847fa897ea66500b49c56d04a5a45ab690dada575b49e36d046da449b690b6da56db49d76d04e00da45bb690feda57db49f0ed0413a4487e9081da563749c4ed0493a45a7e90c009da573749e2ed045ba4497e90a5da5c0c144224a4c49282925a3e494825252002a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc940087f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a004f111449515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea523d00aa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1da8230075a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c134840086d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d2349a4e00336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d1ed740007dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f4042da00027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41abd4e006fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cfe90b00fa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a5a4d006b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682feda300fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f374812ed20025ba4c57e82a8571909d881253124a4ac92839a5a094948a52531a4a4be928003d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a004885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e09784488aa20a00144d15a91255a62a5495aa5175aa4135a916d5a63a5497ea517d6a400da9110035a626d4949a51736a412da915b5a636d496da517bea401da91375a62ed49500ba5177ea413da917f5a63ed497fa517f1a400369100da621349486d1701a41002369148da6313496c6d1789a401369124da6293495a6d1749a41336916cda60039741dcda5ebe906ba916ea2797433dd42b7d27cba8d6ea73be84eba8beea6007be85eba8feea707e8417a881ea647e8517a8c1ea72768013d494fd1d3f40c003d4bcfd1425a44cfd3627a815ea497e8657a855ea5d7e8757a83dea4b7680900bd4defd0bbf41ebd4f1fd087f4117d4c9fd0a7f4197d4e5fd097f4157d4ddf00d0b7f41d2da5efe907fa917ea29f69192da715b49256d16a5a436b691dada7000db49136d166da425b691b6da71db49376d16eda437b691feda70374900ed100613a4247e9181da71374924ed1693a4367e91c9da70b74912ed165ba425729002c29eb3f25a62494949251724a41292915a5a6349496d2517a0aa70c949132005166ca4259291b65a71c949372516eca4379291fe5a70254900a51612a424500a91815a71254924a51692a4365a91c95a7c03f4944521455a068aa4895a8320055a1aa548daa530daa49b5a836d5a1ba548fea53036a488da83135a1a6d48c009a530b6a49ada835b5a1b6d48eda5307ea489da83375a1aed48dba530fea4900bda837f5a1bed48ffad3001a488368300da1a1348c86d3081a49a368348da100b1348ec6d3049a489368324da1a9348da6d30c9a49b36836cda1eb682e5d4f0037d08d7413cda39be916ba95e6d36d743bdd4177d25d7437dd43f7d27d743f003d400fd243f4303d428fd263f4383d410be8497a8a9ea667e8597a8e16d222007a9e16d30bf422bd442fd32bf42abd46afd31bf426bd454be86d7a87dea5f700e87dfa803ea48fe863fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d004f3fd08ff413fd4ccb6839ada095b48a56d31a5a4beb683d6da08db48936d30016da4adb683beda09db48b76d31eda4bfb683f1da08374880ed3113a4ac7e800389da093748a4ed3193a4be7e83c5da08b74892ed315ba4a61c958ff29312500a1a4948c92530a4a49a92835a5a1b4948ed2533865a08c9489325316ca4ad900283be5a09c948b72531eca4bf9283f15a08254880a53112a4ac5a83895a09200548a4a53192a4be5a83c05fe612892a2a802455345aa4495a90a55a56a549d006a504daa45b5a90ed5a57a549f1a50436a448da90935a566d49c5a504b6a4500ada90db5a576d49e3a5047ea449da90b75a56ed49d7a504fea45bda90ff5a5007ed49f06d0401a448369080da561349c46d0481a45a3690c8da571349e26d000449a4493690a4da569349d66d04c9a45b3690e5d4773e97aba816ea49b681e00dd4cb7d0ad349f6ea3dbe90eba93eea2bbe91eba97eea3fbe9017a901ea28700e9117a941ea3c7e9095a404fd253f4343d43cfd273b49016d1f3b4985ea01700e9257a995ea157e9357a9ddea037e92d5a426fd33bf42ebd47efd307f4217d00441fd327f4297d469fd317f4257d455fd337f42d7d474be97bfa817ea49fe800675a46cb6905ada455b49ad6d05a5a47eb69036da44db499b6d056da46db690007eda45db49bf6d05eda47fbe9001da44374988ed0513a46c7e9049da45374009aced0593a47e7e9025da44b7499aed0550a4bcefa4f89290925a564949c5200504a4a45a9290da5a574949ec2290365a44c9499b25056ca46d92907e5a45c00949bf2505eca47f9a90015a44254988a50512a46c5a90495a452549aca5059002a47e529f0cf7391144515289a2a5225aa4c55a82a55a3ea54836a522daa4d0075a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a300f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d200201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c5368002a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f900741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d004e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd004aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe90033fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b680025ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb40087f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a004f17e8225da2cb7485ae52580ad67f4a4c49282925a3e4948252522a4a4d6900282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523e00ca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f817f24008da428aa40d154912a5165aa4255a91a55a71a54936a516daa4375a91ed5a70006d4901a51636a424da91935a716d4925a516b6a436da91db5a70ed4913a510067ea425da91b75a71ed4937a516fea437da91ff5a701349006d1601a42436900180da711349246d1681a4363691c8da709349126d1649a4253691a4da71934009366d16c9a43d7d15cba9e6ea01be9269a4737d32d742bcda7dbe876ba83ee00a4bbe86eba87eea5fbe87e7a801ea487e8617a841ea5c7e8717a8216d093f400143d4dcfd0b3f41c2da445f43c2da617e8457a895ea657e8557a8d5ea737e8004d7a8b96d0dbf40ebd4befd1fbf4017d481fd1c7f4097d4a9fd1e7f4057d49005fd1d7f40d7d4bdfd152fa9e7ea01fe927fa9996d1725a412b6915ada635b40096d6d17ada401b69136da62db495b6d176da413b6917eda63db497f6d17e3a004007e9101da62374948ed1713a4127e9149da6337496ced179ba4017e9125d00a62b7495c252b2fe53624a4249291925a714949252516a4a4369291da5a77000ca4019291365a62c9495b25176ca41392917e5a63c9497f2517e2a4005a9100015a62254948a51712a4125a91495a6325496ca51790afc5375244551058aa6008a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a086d4881a5300136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a5317ea4adda8003bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac368388da09134008a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b66d31cba008ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd4577d33d74002fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e8697a869ea500e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25bb484dea60077e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abea66fe85b00fa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48ed6d306da00489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a4887e8301d00a1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da1ab14968a00f59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca489928330065a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c008a53092a49a5a83495a1b2548eca53e0040391144515289a2a5225aa4c55a8002a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d400825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea004d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8d00a3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d740023dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd00083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea700c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f003ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30f00f423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b600d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e2700e8249da2d37486ced2393a4f17e8225da2cb7485ae52586ad67f4a4c4928290025a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e00392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a200d25486ca52392a4f81936d44521455a068aa4895a83255a1aa548daa530daa0049b5a836d5a1ba548fea53036a488da83135a1a6d48c9a530b6a49ada835b500a1b6d48eda5307ea489da83375a1aed48dba530fea49bda837f5a1bed48ffa00d3001a488368300da1a1348c86d3081a49a368348da1b1348ec6d3049a48930068324da1a9348da6d30c9a49b36836cda1eb682e5d4f37d08d7413cda39be90016ba95e6d36d743bdd4177d25d7437dd43f7d27d743f3d400fd243f4303d42008fd263f4383d410be8497a8a9ea667e8597a8e16d2227a9e16d30bf422bd44002fd32bf42abd46afd31bf426bd454be86d7a87dea5f7e87dfa803ea48fe86300fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d4f3fd08ff413fd4ccb006839ada095b48a56d31a5a4beb683d6da08db48936d316da4adb683beda09d00b48b76d31eda4bfb683f1da08374880ed3113a4ac7e8389da093748a4ed319003a4be7e83c5da08b74892ed315ba4a616958ff293125a1a4948c92530a4a4900a92835a5a1b4948ed2533865a08c9489325316ca4ad9283be5a09c948b7253001eca4bf9283f15a08254880a53112a4ac5a83895a092548a4a53192a4be5a8003c054e3c1349515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea00523daa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1d00a82375a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c100348486d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d234009a4e336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d100ed7407dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f404002da027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41a00bd4e6fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cf00e90bfa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a005a4d6b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682f00eda3fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f37481002ed225ba4c57e82a85a565fda7c494849252324a4e292825a5a2d49486d252003a4a4fe19481325226ca4c59282b65a3ec948372522eca4d79282fe5a3fc5400800a52212a4c45a82815a3e254824a52292a4d65a82c95a3f21438095324450051058aa68a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a08600d4881a53136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a531700ea4adda83bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac36838008da091348a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b0066d31cba8ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd450077d33d742fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e869007a869ea5e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25b00b484dea677e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abe00a66fe85bfa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48e00d6d306da489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a480087e8301da1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da100ab14968ef59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca004899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a8301500a1a2548c8a53092a49a5a83495a1b2548eca53e0846491144515289a2a522500aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da8290035a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed483007a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d0063682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4b00d7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741f00dd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea38500b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea17700e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a004adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da200cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed200313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52587ad67f4a004c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b2005236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e2500a82495a2d25486ca52392a4f8193f345521455a068aa4895a83255a1aa548d00aa530daa49b5a876e07f15a92ed5a3fad4801a52236a4c4da82935a3e6d482005a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d007da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da300f1348126d2249a4c53682a4da3e9348366d22c9a4d81f79a0fbc8f7be03dd20003ef3f1e786fefc0fb6607de933af07ecf81f7520ebc4f71e03d8003efaf1b0078efdac0fbc206de7335f07ea681f70a0dbc0f67e03d2e03ef1f19786fc6c000fb1e06de5330f07e7d81f7c20bbccf5ce03ddc02ef8f1678efb1c0fb7a05de00332bf07e5481f77a0abc8f52e03d8a02efff13786f9dc0fbd604de1326f07e002b81f73209bc4f48e03d3802ef6f1178ef88c0fb3204fe2734f07e028173f50007ce831f38c77ce0fced81f39907ce151e38df75e0fccf81f32107ce0f1c38005f6ee0fcb181f3a906ce2f1a38df66e0fc9381f33106ce4f18385f5fe0fc750081f3b905ce6f1638df57e0fc5781f34105ce8f14385f50e0fc3981f3c904ce00af1238df48e0fc1b81f35104cecf10385f41e0fff703ffcf1ef8ffeec0ff3b0007feff37f0ffb089fff96f76813fb5fdc7a574d82f97987fc1098bf953dcb000983fc9098b79692e2ce629bab09843f5b09855362c707ec6c0f90a03e7ef0b009ccf2e707eb7c0f9ce02e7ff0a9c0f2b707ea8c0f99202e70f0a9c4f27707e0099c0f95602e71f099c8f23707e8a0254900a51612a4245a91815a71254924a0085fdf6922ae87ae6988f5977d5cd3976e9a286c1f76b1ff371c1e27c4b72ef004adc2df8b60ebf735bd7dfb9adfbefdc362de663bde22bbb2e4c34e754f06d0073633e1e2954a44ea636ff9805ff7799f73b63987f8ddb52c67cac18f33176009e248ef918786c038f6b9d98cf23fedc253255d074433dfd2a1115fb053fa60009e00fbc3cf37fcb7b42cd9fd86926c0f4ff71cef2c0a5d99c5fa61f772c81004bba98cf1305cdcbd8ef092c33b1eb4be07aeea0ef0f9e5e58ccf4e24e27f600f6841c6b9588e87eb1d34f9a00d3e7a1fac77984ff31c639bf9d97b1b7259d00f3eb9f1d7c5bb2a0db9206cdcf2271e64f422c6bc1f3276196b5c87f9caff3005acb57ec7a5a7f4e42fcec8801b1d36f1033fdb0ff7cda9171bf103bed86090063af103bfd460933fd41b1d36ffcefcf9bc83f9a78ecb49bfcfbd38ef88373007cfcdfbea3e97f30ed3f3abf48e0d824b0ee958f995eecf62f785b16bb0d4b00e0f52632519c9f1716e76785c5f9f9a9c312769f9428cecf8bf5c49d3fb1d70003c778b1fb87c10327d41f3d6ac2b8befd27341d357e42df51fd07060f217800b21982be1e7c7bf025ee7de2de2feefdd3c5737b2c334dd0d753cc09fbd5d000fef131e86bb19bead84d77cae0fbc7b92d55d06d49e7fcda953ae6f3a4413f0027785ab18e6471ee5f2ee6f3f0988fc983be27f6fb33c4f3f393c7f9f9bf7200c7f3b5e04528eeb492c4f3b5d8fb070ef78bc75c0fccd7d85535e99c5fa61700aa45b272958888585fecbc4f16f6ebc5332ccecf4f16e7fed1319fa78e33de00d85d719dffd039a872dfc84115fa0eea5bb1ef8001d1fdfb668a33fde0791600984fb1bf96b80fbba307fcefb0fbf72fa13aec4e1ff6cbf56c41df13b8340f009a76a238b7b588e7e7ba0fbf23a232c7e34f1a34b6c0e57f8797bfb9fceff000f2bf787819fbab5d92b0df2ebb71f741710fb1e21e82855d631af11debc4fd001949e2995e8339bfbe2de9bf608b6fdd0b8be76bf1d992fc812d693cb6b8d3004dfc3be3b8d6cf093605ffba1e775e278a735b7c76c3b14ec998cfffdbc73a002562aeffef58e7772f1512f858242a81f7cbf11eebc4b79df8bd639df87efd008e3dbef9a3e3a0e0639db8bfb227d05369fd13f8318bfcdf5369ffd1e57fc7003affc5639d42bf4cfa57eb7db2b06b1fa7248b73dfbc311f03cf2fe4bac6f40092ffcef462b72349aef17d0562aea78a671affce3cf9834b647c8e44f138ec00c71ab1cf01fdb78f356ac75c971f6b0c941f6b44ff5d8e3592c4b95f7cdff3007bc7237fd54b7109349ffeef714e9e40d38f9d6fc982e65d7cbf47c6fefcb800dbc3d8dbe3fb181616ffcb1ffff71c7958c21e7bfdded882fdb1cb468638f7008f3b0fae35ad64ffe6b4fe9b8f69f0bc0e7e4cff719f39bfdcf67b2f87278b00735bb239bf1d63e038227fd0fdae750c1cb85fa9a0eb5171e651426e9f136a00bb10b8640ebbf6b14decd7feeeaf5dc53efff0777eed2af65835f818eb7fbf004ffde6f2bfdfa7fe8bbf4f550dfb659e5f6bbb1cfc7c49ecf5f0b0dfee836200bf3781f7215189c27ebb9f8cbbbf0bfef9813f1dc81a737dfc84d1e306361d00d570cac0fe13270c1d3daa7edffe4306061f14c49d48583c838fbd2d51d0d700af759018f77b9204dd3ff862f845ac56cce7ffed5fc4fac75c97ff5d69e45f00f58b5802ad881563a79f2261a61fef2f62c16389bd3d76198e7d3237f87aac0029f63e2d83eed3f21af76915749f5641f7095cfed32798e3fbe5a4459cdb82005f9c6a19e7b6e00d73ac29b0018fddb005aee70d32062eade7fc624f14e7b6003641b7fd452fde0ffadf8bf7ffd2e57f0760bf5cfe7f7f00d620667ab1eb7900f25f7ed42fbf748425e876b642a2383f2f2c2cfe2747627f7eeab004ddaffc00df932329e278e2ce9fd8ed56f0df86f6ef3b62449b714327f59d30b0d1c45100fd03c778c143089e6ce2788678ad43bee0cd6fdcfbc5dde4c7ddccc7ddb407006fce83a77badef8ffbb5d89f1d1ef6dbdfe393c731c67d48e37e2dee73427100bf3f70896f9797e81a1f637f4ed81ffc9cf8ccbff7e7d1ffeecf49e8bfbdcb0010c71afcb31278375731be4382b038f3f0f71ec7e0cd48dc75202c9ef91b1600749fe0e7d09a054d37eefde27ae27b6e2fbedfd9e23e5ef13ddffb47cf1dc6009defa9aef173eac47c1ef1e72e95e2db74c71d7ff03c8ffb78a40cbaeddf7d003c62c7f4ef3e1ec1f328459cdb82d7b524716e0bf6c54ec3f0ab6bd398cfff00dbbfba06eff2c3c37ebbecc6ddb6c7f777657fd5f32bb1cb45ecbc8eeb491e00747bf0fddbc67c0c8cb5679cb105af23bff77a475c43f0fd83c79d34cefc0a005ec753fc35f3eb770f57e29b5fb1f78f5def935fe3fec1f33ff8feb1ff021c00f8bc4fccf5f8f6ab49e2dc96389e69c7b7cec7cec3c0f21aeaf5656095aa030022aa0e1ad8373232326a40c4c03f5a5f42fdf3a32bf6addcbf6fe5c8c8aad1009103a3232bfed1cf8ffd955afe9afffffe85f90f2ea1fa5f8ab461bf5ccf1200733d815f2fecf7df7cbdf07f4fab5cf3f2bfa755fe8b4fab648f995e607d8c00fd5bde51a3270c1d34b5feb8813c3730a0d5c41123860e1a3a705cf09afc7b0047e071ef97e81af7331c0de789f9fcef70341c1634bf823da13ca24d15f433001360fa11c1477e6171c612fc73e3ce83a4f17cdfb596bbc4713efede7d13fd00ce74d3c5735bec34639f440bf6c68e23559c8f5983a69b104742591266faf1003e565983ae678933cee0f95d274486d8e9c5aeb3f13d9313f799c7e0bf4a0a00f6250abd2f322cce25be67da622fb1cb4c96a0afc5cecfff0f02a8a7e6659c000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +00000000000000000000000000000000000000000000000000000000000000030abf338154e355442d9916d630da0491036d5a7b23c42b477c1395ba3bf9b42d1a9ddbb308ed22ba60da2f2e98f3701846e4464d42ec98d15f7225fc0568e8ce3049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea0602a113eb715538d26370d53819aa5d1f653c7f0509a2aa9c5abdc03872a87d0c4557e746c247100779af4a2e4e5eb5e8556261d414978ecc8c775d79957343233d10e0c959338e062b1c76fb81e17fcf61643da568eac372bb7feac8bfa357256c06f8384f82f77f7ab3eb47b9c467f6f329051a00163f3125041dab91c7481a0ca5eecb1430479902264f04e557160a4666fb42bb8b283c6397e3d17ac9372a6595890719fef7967c209488728aa5342438ba52058a3c770202f55acf685400000000000000000000000000000000000000000000000000000000000000051fc7418174246337dbc421413553f3870957829e976a6651f2f07ea092d8e9bf03b075046b71ff5f8e0792de4b82ddc979fcb3b8c03abe12972e65c57759fb4624b0baef5786684223885b4aee14327729edb03f2b1e3569f1644a7c25734ff500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000d9e0e7f11eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b9440abd64ffdf5d26f9e76c5f44d89a59e72b697a293d8dcd308b64b1d10fef9ece0000000000000000000000000000000000000000000000000000000000005504001f8b08000000000000ffed5d07781cd5f1dfd349b22559d661e3826d8a0db800db5c530383257763dc7bc158d5181c4cc02601427209a49346420a8150fee900bdf7427aefbd17d27b486fe43fcfdc48a3b9b9d59e6e9e7c93f87ddf7cb7b700efedcc6fe6bd9957f6ed6e2c7838dd1b0f826be30f1fc780e2f9df2aa0b3d80039fca5c73542b906e15ca370ae4938778a706e3250073b77a650ee2ce1dc4c00e1dc2ce1dc9cfc399a62f9df8efc6f26d992cdf6b5a6fb5299545732dddedd00d69ccc3677b7b4a5da52cd6dcdbde9b64ca6af2ddbd6dadeddde9a6c4f6533007da9fee6f64c7ff2e194880ff24a9695d23d3e719e32729c597ec2619b0054004db03a3b3c943f9e1b0c1ecf23c7a7e4cbe07513e0ff44a0538126c507cf63008a331b24cb4ba9f98abc26c4f5ea66b25a1b92eb6632a99b89e4f854723c8900d5cd14f83f15e834a06942dd5429d7cd1cc5b63e5dcf9e291a4f1cdfb3986d00798a29db2516e8b60dc498c81fcf009d4e073a03e84ca71fd04ca059406703009d03742ed06ca039407381e601cd075a10cf1b630c69103e8d314bd15104b8005abcd3d4160bf3516c11ef715dc6bfd9395788b72aed28384b2172f5f53f9c00162a46c1458a95eb1ae5d8209a87968b9bda20d59649a75b33ae5c5b6f329500eded49b7a5d3bdddd9644fb2ab27ddd79e4db5f767d3d94c4f6f4f37f0ec4a00f527fbbb7adafbdb1ee645f12e8e7b04ec98f3105e2ef8c58a61f73cc586e500cb86e7c50bf9966bc3f394239cb6de8b8ae85d2edfa4f21008036a32dfce4700b3973ad7602f95ca079b34efa552422f951e855eea5cc55e2aa5184cd2467b00a994a75e2a13f70838e3a197ca28f652d90aefa59c0db31e7aa96c85f752e900227a97cbb7d9532fd57c027aa9b9067ba9967cb069e5bd548bd04bb58e422f003557b1976a510c26ad467ba9164fbd545bdc23e0360fbd549b622fd55ee1bd0094b361bb875eaabdc27ba9d6227a97cbf77c4fbdd4f927a0975a60b097ba20001f6c96f05eea02a1975a320abdd402c55eea02c560b2c4682f7581a75eeac200b847c0177ae8a52e54eca52eaaf05ecad9f0220fbdd44515de4b2d29a277b9007c977aeaa596c60b7b266dec1d6ad853ddd20ddb0e72637606393e335efc66007a27fc5f06b41c6845dcffcdf4d3157dbf53d1f7572ab72b5e372b491d2c2300c7cbc9f10a5637abe0ff6aa035406b85bad16e9f178fdc06992836a0edf30c0072bc8a1c5fcc6cb00efe5f02b41e68c328d860a35a3bc8647de2dc34729cbd00c90875b591d4c959e4782639dec4ea6a33fcdf02b41568db28c412c55bbfa900cd8ab164bba7d987b6fdce56b4df1645fbed3062bf7314edb755d17e3b3df70065db490cd8418e7792e36d2c36ec82ffbb81f600ed1d85d8a078c32db54bb1006ef61969dbb315edb75bd17e971ab1df1c45fbed51b4df7ecfb1611f8901970092e3fde4782f8b0d97c1ff03405d40dda3101b146f73a42e53ac9b1e236d7b009ea2fd0e28daafd788fde62bdaaf4bd17e7d9e63430f8901bde4b88f1c77b300d8d00fff0f025d0e7468146283e2e272aa5fb16eaef05c3757903a38488e2f0027c78758dd5c09ff0f033d02e8aa51989b1fd1b341bf64832344d72bc9f1ba0090f589abe1ff2381ae893ffcf054753e2f168cce46ffab15db055dff3c9a7700ac63b8408abf2e23c7ce1dcb9fa349db31af5674a6a3d179f50cc32b754cb100025cc3a90ae45ba44189f61c0e77e0b1511e550e5698aee38dd19d18ee36a800666319066b6a98fce4758a8df85171b5c630e44ec8a3223873b9d88f29da4100d3a68f2ec1a6c3c9a2367d34099a63893da94d93e5a5d443e1fcd23dfda94c00735f6b73b2a52bdbdcdb9249f7a65b93bdd9e6fe14004eb767c134fd3dd9b600deb674a63fdd9aee794817dff13686810d3b12ec558fe58faf87df1b806e8c008fee7e911b3dcd1c94eb78c87e91c7e41bd14d3c28ba0cbe5fe4a608813259005e1a62c472f78b3c46d1a96f52eea1476bbf08b581e67e91c7c63d0276ccb500f78b3c56714ef638c586e5cb868f8bebef17799c7284d3d6fba6227a97cb3700a73c14c5809a8b17f64cdaa324cdfb73d72bb6fbc79fa0809a2c2fa51eafdc0016303d21ee11f013e2fa7c6ff61c0493e5a5e37adf4cc6c84a7c431775cbb50083e6cde01b14ebe716a3ce7a8b27677d62dc23e0277a70d62755b8b33abd9f0034cace9a2c2f0de90d93e525d560fa64e5465f97afef2793b9f60de4f8e6f800e04af5d9e4fc39e4181fdb7e0afc3e15e869f9ffc8fbfa22bc6f22bc872bf30074f8bd15e819713fbe7973be8d6a8f2e9f59e1a36a5f7a3f4bd17f0292aa940071dea4e89bcf56d699eb9a2c2fa59c7f6ad68bf3c9677a683bcff1b4d6a6dd0076d28a6de7b60a6f3b2ef62b2e93a59caf3cc743db79ae72dbd1b6a36b339a00630bd76e9eebc18eb1c08f0f6ae37c9e9e2d7ba53bfecf236311d716f0784a00bcf81dffdbe1fff3815e00f4c2b8ff571c9ea918876e373a19547c6a68c86400f045718f805fe461327847854f069dde77185bb9f1d550cbc5f562a3cefa62004fce7a67dc23e03b3d38eb5d15eeac4eefbb3c39abf648e08e3c56eddef58e007865d6b773585735554161d26e07be4683caedaa7b80216eb2948ca32c34830037fd7c56c0dc40bf02b431ce338071be078cc71b5a4d9e02cf0da1d23db1b900399be9efeb6af56983299ed687b4714e378233aec76bc80ef197e4a3e2ddb80025027f5dc659c1d0a4dd6dbf44b1abbd27aeebc068877b043b6857eeddca730084da6074e608be039d7a83bb47b1c1ddeba9c1dd1bc1f12a69b2bc20f0d30800b475566caca9854674ae52d47991119d157bcad4e251d239595e4a9da7683f002b23b764600367ca08ceb4119c192338b34670361bc1d9620467ab119c6d460070b61bc179be119c1718c1b9c408ce0b8de0bcc808cea546707618c1d9690400e7322338971bc1b9c208ce954670ae328273b5119c6b8ce05c6b04e7c5467000ae3382f3122338d71bc1b9c108ce8d46706e328273b3119c5b8ce0dc6a04e700362338b71bc1b9c308ce9d4670ee328273b7119c7b8ce0dc6b04e73e23382f00358273bf119c9719c179c008ce2e2338bb8de0ec3182b3d708ce3e2338fb8d00e03c6804e7e546701e3282f30a2338af3482f3b0119c8f3082f32a23388f1800c179b5119c8f3482f31a2338af3582f3a8119cc78ce0bcce08ce4719c1f968002338af3782f30623386f3482f3314670de6404e7638de07c9c119c3923381f006f04e7138ce0bcd908ce5b8ce07ca2119c4f3282f3c946703ec508cea71ac100f93423389f6e04e7ad46703ec308ce671ac1f92c23389f6d04e7738ce0bccd0008cee71ac1f93c23386f3782f3f94670bec008ce171ac1f9222338ef3082f300c54670de6904e75d4670bec408cebb8de0bcc708ce7b8de0bccf08ceff338200f3a54670becc08ce971bc1f90a23385f6904e7ab8ce07cb5119caf3182f3b5004670bece08ced71bc1f9062338df6804e79b8ce07cb3119c6f3182f3ad467000becd08ceb71bc1f90e2338df6904e7bb8ce07cb7119cef3182f3bd4670becf0008cef71bc1f9012338ef3782f38346707ec808ce0f1bc1f91123383f6a04e700c78ce0fcb8119c9f3082f39346707eca08ce4f1bc1f91923383f6b04e7e78c00e0fcbc119c5f3082f38b46707ec908ce2f1bc1f9152338bf6a04e7d78ce0fc00ba119cdf3082f39b46707ecb08ce6f1bc1f91d2338bf6b04e7f78ce0fcbe11009c3f3082f3874670fec808ce078ce0fcb1279c550c67257d97fa27a3a473b200bc94faa9a2fdee31f2bde29f053670fedc08ce5f18c1f94b23387f6504e7af008de0fc8d119cbf3582f3774670fede08ce3f18c1f9a0119c7f3482f34f467000fed908cebf18c1f9572338ff6604e7df8de0fc87119cff3482f35f4670fedb0008ce878ce0fc8f119c8ea1059c312338ab8ce08c1bc1596d04678d119cb54600708e318273ac119c754670d61bc1d96004e73823381b8de01c6f046793119c000923384f31827382119c138de03cd513ce4ade1730e97f50e7c946dae3945800f9f66befeaee49a69abb7cd64d5c51e7a946dae3798a3a9f66a43d4e1ba5ba0049969752d3637af53c3d6e43e7198a3abfc4c8bea9d38df8cd1946709e690400e7594670ce34827396119c671bc1798e119ce71ac139db08ce394670ce358200739e119cf38de05c6004e74223381719c1b9d808cef38ce04c1ac199328233006d0467c608ceac119ccd4670b618c1d96a04679b119ced46709e6f04e7054600702e3182f34223382f328273a9119c1d4670761ac1b9cc08cee54670ae30820073a5119cab8ce05c6d04e71a2338d71ac179b1119ceb8ce0bcc408cef54670006e308273a3119c9b8ce0dc6c04e7162338b71ac1b9cd08ceed4670ee30827300a7119cbb8ce0dc6d04e71e2338f71ac1b9cf08ce4b8de0dc6f04e76546701e003082b3cb08ce6e23387b8ce0ec3582b3cf08ce7e23380f1ac179b9119c878c00e0bcc208ce2b8de03c6c04e7238ce0bcca08ce2346705e6d04e7238de0bcc60008ce6b8de03c6a04e7312338af3382f35146703eda08ceeb8de0bcc108ce1b008de07c8c119c3719c1f95823381f670467ce08cec71bc1f90423386f3682f3001623389f6804e7938ce07cb2119c4f3182f3a946703ecd08cea71bc179ab11009ccf3082f39946703ecb08ce671bc1f91c23386f3382f3b946703ecf08cedb008de07cbe119c2f3082f3854670bec808ce3b8ce07cb1119c771ac17997119c002f3182f36e2338ef3182f35e2338ef3382f3ff8ce07ca9119c2f3382f3e5460070bec208ce571ac1f92a23385f6d04e76b8ce07cad119caf3382f3f54670be00c108ce371ac1f9262338df6c04e75b8ce07cab119c6f3382f3ed4670bec30800ce771ac1f92e2338df6d04e77b8ce07caf119cef3382f3fd46707ec008cefb008de0fca0119c1f3282f3c346707ec408ce8f1ac1f93123383f6e04e7278ce000fca4119c9f3282f3d346707ec608cecf1ac1f93923383f6f04e7178ce0fca200119c5f3282f3cb46707ec508ceaf1ac1f9352338bf6e04e7378ce0fca6119c00df3282f3db46707ec708ceef1ac1f93d2338bf6f04e70f8ce0fca1119c3f320082f30123387f6c04e74f8ce0fca9119c3f3382f3e74670fec208ce5f1ac1f9002b23387f6d04e76f8ce0fcad119cbf3382f3f74670fec108ce078de0fca311009c7f3282f3cf4670fec508cebf1ac1f9372338ff6e04e73f8ce0fca7119cff003282f3df46703e6404e77f8ce00caa6ce08c19c159650467dc08ce6a23386b008ce0ac3582738c119c638de0ac3382b3de08ce062338c719c1d96804e7782300389b8ce04c18c1798a119c138ce09c6804e7a946704e328273b2119c538ce0009c6a04e76946704e338273ba119c338ce03cdd08ce338ce03cd308ceb38ce0009c6904e72c2338cf3682f31c2338cf358273b6119c738ce09c6b04e73c233800e71bc1b9c008ce8546702e328273b1119ce719c199348233650467da08ce8c00119c5923389b8de06c3182b3d508ce362338db8de03cdf08ce0b8ce05c620400e78546705e6404e75223383b8ce0ec34827399119ccb8de05c6104e74a2338005719c1b9da08ce354670ae3582f3622338d719c17989119ceb8de0dc6004e7004623383719c1b9d908ce2d46706e3582739b119cdb8de0dc6104e74e2338770019c1b9db08ce3d4670ee3582739f119c971ac1b9df08cecb8ce03c6004679700119cdd4670f618c1d96b04679f119cfd46701e3482f37223380f19c1798511009c571ac179d808ce4718c17995119c478ce0bcda08ce471ac1798d119cd71a00c179d408ce6346705e6704e7a38ce07cb4119cd71bc17983119c371ac1f9180023386f3282f3b146703ece08ce9c119c8f3782f3094670de6c04e72d46703e00d108ce2719c1f96423389f6204e7538de07c9a119c4f3782f35623389f610400e7338de07c96119ccf3682f3394670de6604e773ab6ce07c9e119cb71bc1f9007c23385f6004e70b8de07c91119c7718c1f9622338ef3482f32e23385f620400e7dd4670de6304e7bd4670de6704e7ff19c1f95223385f6604e7cb8de07c8500119caf3482f3554670beda08ced718c1f95a23385f6704e7eb8de07c83119c006f3482f34d4670bed908ceb718c1f9562338df6604e7db8de07c87119cef340082f35d4670bedb08cef718c1f95e2338df6704e7fb8de0fc80119cf71bc1f9004123383f6404e7878de0fc88119c1f3582f36346707edc08ce4f18c1f9492300383f6504e7a78de0fc8c119c9f3582f37346707ede08ce2f18c1f9452338bf006404e7978de0fc8a119c5f3582f36b46707edd08ce6f18c1f94d2338bf650400e7b78de0fc8e119cdf3582f37b46707edf08ce1f18c1f94323387f6404e703004670fed808ce9f18c1f95323387f6604e7cf8de0fc85119cbff484b38ae1cc00245bb2d9bed6745f2a93ea4aa6dbbbdb9a93d9e6ee96b6545baab9adb937dd0096c9f4b565db5adbbbdb5b93eda96ca62fd5dfdc9ee9cff39ea3a8f3af464900e7647929f5eb2a3dfbdd1bb751cfd58af6fb8d91b65da3a8f36f8de85caba800f3ef8ce83c4651e7df1bd179aca2ce7f30a2739da2ce0f1ad1b95e51e73f1a00d1b94151e73f19d1799ca2ce7f36a273a3a2ce7f31a2f378459dff6a44e72600459dff6644e784a2ce7f37a2f3298a3affc388ce131475fea7119d272aeafc002f233a9faaa8f3bf8de83c4951e7878ce83c5951e7ff18d1798aa2ce8191f500b0a98a3ac78ce87c9aa2ce5546749ea6a873dc88ced31575ae36a2f30c459d006b8ce87cbaa2ceb546743e4351e73146743e5351e7b146743e4b51e73a233a00cf54d4b9de88ceb314756e30a2f3d98a3a8f33a2f3398a3a371ad1f95c459d00c71bd179b6a2ce4d8a3a03abe37b7c7e92577801d042a045408b81ce733280005240696707a02c5033500b502b501b503bd0f94017002d01ba10e822a0a57900bd3b8196012d075a01b4126815d06aa035406b812e065a077409d07aa00d40001b8136016d06da02b415681bd076a01d403b817601ed06da03b417681fd0a50040fb812e033a00d405d40dd403d40bd407d40f7410e872a0434057005d09740018e8114057011d01ba1ae89140d7005d0b7414e818d075408f027a34d0f540003700dd08f418a09b801e0bf438a01cd0e3819e007433d02d404f047a12d09300819e02f454a0a7013d1de856a067003d13e85940cf067a0ed06d40cf057a1e00d0ed40cf077a01d00b815e047407d08b81ee04ba0be825407703dd03742fd0007d40ff07f452a09701bd1ce81540af047a15d0ab815e03f45aa0d701bd1ee8000d406f047a13d09b81de02f456a0b701bd1de81d40ef047a17d0bb81de03f4005ea0f701bd1fe80340f7037d10e843401f06fa08d047813e06f471a04f007d0012e853409f06fa0cd067813e07f479a02f007d11e84b405f06fa0ad05781be0006f475a06f007d13e85b40df06fa0ed07781be07f47da01f00fd10e847400f0000fd18e827403f05fa19d0cf817e01f44ba05f01fd1ae83740bf05fa1dd0ef0081fe00f420d01f81fe04f467a0bf00fd15e86f407f07fa07d03f81fe05f46f00a08780fe03e41c2c0654051407aa06aa01aa051a033416a80ea81ea801681c005023d078a026a004d02940138026029d0a34096832d014a0a940a7014d039a000e3403e874a03380ce043a0b6826d02ca0b381ce013a176836d01ca0b940f30080e6032d005a08b4086831d0794049a014501a280394056a066a016a056a03006a073a1fe802a0254017025d04b414a803a8136819d072a015402b815601ad00065a03b416e862a075409700ad07da00b4116813d066a02d405b81b6016d0700da01b4136817d06ea03d407b81f6015d0ab41fe832a003405d40dd403d40bd00407d40fd4007812e073a047405d0954087811e017415d011a0ab811e09740d00d0b54047818e015d07f428a047035d0f7403d08d408f01ba09e8b1408f03ca00013d1ee809403703dd02f444a027013d19e829404f057a1ad0d3816e057a0600d033819e05f46ca0e700dd06f45ca0e701dd0ef47ca01700bd10e84540770000bd18e84ea0bb805e027437d03d40f702dd07f47f402f057a19d0cb815e01f4004aa05701bd1ae83540af057a1dd0eb81de00f446a03701bd19e82d406f057a001bd0db81de01f44ea07701bd1be83d40ef057a1fd0fb813e00743fd007813e0004f461a08f007d14e863401f07fa04d027813e05f469a0cf007d16e873409f0007fa02d01781be04f465a0af007d15e86b405f07fa06d03781be05f46da0ef00007d17e87b40df07fa01d00f817e04f400d08f817e02f453a09f01fd1ce8170040bf04fa15d0af817e03f45ba0df01fd1ee80f400f02fd11e84f407f06fa0b00d05f81fe06f477a07f00fd13e85f40ff067a08e83f406e301103aa028a03550003d500d5028d011a0b5407540fd400340ea811683c50135002e814a009401300814e059a043419680ad054a0d380a6014d079a01743ad0194067029d053413006816d0d940e7009d0b341b680ed05ca07940f38116002d045a04b418e83ca00024500a280d9401ca023503b500b502b501b5039d0f7401d012a00b812e025a000ad401d409b40c6839d00aa09540ab805603ad015a0b7431d03aa04b80d603006d00da08b4096833d016a0ad40db80b603ed00da09b40b6837d01ea0bd40fb00802e05da0f7419d001a02ea06ea01ea05ea03ea07ea0834097031d02ba02e8004aa0c340ee7bf5ee5bf0ee3bebee1be6eefbe0eedbdbeebbd6ee9bd1ee7bcc00ee5bc7ee3bc2ee1bbdeefbb7eedbb2eebbadee9ba8ee7ba3ee5b9eee3b99390020f77d47f7ed44f75d42f7cd3ff73d3df7ad3af71d38f78d35f7fd32f76d3000f7dd2df74d2bf7bd28f72d26f79d23f70d21f77d1ef7ed1bf75d19f7cd16f7003d14f7ad11f71d0ff78d0cf7fd09f76d07f7dd04f74d02f7be7ff72e7df79e00fa7b80dcfbd5ddbbcbdd7bc1dd3bb7ddfbacddbba2dd7b98dd3b8eddfb83dd00bb79dd7b6fdd3b65ddfb5addbb50dd7b46dd3b3cddfb31ddbb27dd7b1ddd3b0013ddfb08ddbbfedc7bf4dc3beadcfbdfdcbbd5dc7bcbdc3bc1dcfbb6dcbbac00dc7ba2ee0772ef3772ef0e72efe571efbc71ef9371ef6a71ef4171ef1871ef00ef70efc670ef9d70ef7470ef4b70ef2270cff9bb67e8ddf3e9eed96ff75cb5007b66d93d0fec9eb575cfb1ba6744ddf397eed946f7dca07b26cf3defe69e250073cf69fd00c83d5fe49edd71cfc5b8674edc78d73d2be19e43707bfcddfe7900b737ddedd576fba0dd5e5eb7b7d5edf5747b1fdd5e40b737ceed15737ba7dc005e22b7b7c6ed35717b2fdc5e04776fdeddab76f76eddbd4c776fcfddeb72f7007edcbd10776fc0ad95bbb563b796ead616dd5a9b5b7b726b316e6dc2cdd5dd00dcd5cde5dcdcc68df5ab1e1e42046eafb24b0b82c1940f2f4ec4f17cb7b7d700ed75757b3fdd5e48b737d0ed95737bc7dc5e2ab7b7c8edb5717b4fdc5e0cb70037c1ddab77f7aeddbd5c776fd3ddeb73f7bedcbd20776fc4dd2b706be76e2d00d9adadbab546b7f67616d04ca059406eeeeee6b26e6ee7e63a6efffc5ca0790040f383c254478e27e67f27fdb8f3b4477eea152b69b9adf9dfbb5f75c6dba600ffb86a0fcddb1692b73b246f6f48de0df9df6573bebcfbe5b1dc9f68de13f200bfbf9d754ec7844dc74d30909e12a2c3ad45f2d0068bd9ffaafcafab5b57af001df9ffc9f252aa8ef0d5e6df966c6ea675ea017fa62e186cefbeec833c3df0003fbe1fdba515b941fe5c17971af3ff63c496788df369f417777c2ab99ef20b00f2fc381fccf7a96b1bac8c20ff6a0ffca1aa8eef913cae63aed09698579d1b002a9be6d590bc6a62cfd3997d7cb4356a1f3f6d2d757c2f52b1f6d590d7752e00b1096f3b3166074f385331262f60b238f67a8ff5e200c5983cc4c3ed83c7ae004f457f3cd87774f991ab8e5ed3d57374ed55d71eedbaaaa78faa40d926c879009a4f132fc3cbf1f28d423ec26c20e7c7e48221aa1dff25e7d035d055c6d2f2002caf8ee455e786e2aacfffaf2672282fc451c3cacfc9ff6fcaffd6926bf0fa008420bf96c91f825b38479b10e71517ce617937bc3a2b7fecec8add5e756e90009f56936c6d4b26111fdabe2618da3c0326bf86955f94ff5fcff4c5d0d73142009cfdad5da9fe4c577f5773576f6fb6a76b02e34f6de6ec84ebebb68739d9d60093c39cf0a435cc191f0c1e27c8352ead24bc632c6f9520d7f67027999e28e000af26bab9b43c170ca411ca4df113385498c1ece849cf666c13354161c2bc5a0022bb585f18048531920ff56611bebc1c9749db6f2dcba3753286e5497db1c400930ecd2abd3f9999ff7fa2fb13da2ee341615d705c7c18c7877941111e521d00721971811ffa633c28f49962d824ff0e847312b6f830d8aa056c9c6f55881e00c5e4504c616d3cc6f224ecae5eb17d9d1c2784a68ce77e3ced39d68be304a900fd878d13a4a92b8e0df818a289f073898e1306e60081bfb117b48916cf7596008a32ed9f1e0c266ae79aa078bcab616527e77f5d5f38b108bfda60f83e305e00e4bad3f2c77581dccf77043af69270c4041cc3c5ac4aefb3cfcaff3fd17df600a4bc43da8eed2d2763fb3009637b5f6e28ff20183eb6e335526cefcfe78d0d00c8fa5430746d41f2d30e05bdb0de7df50f2e4d0c8ac74c3ecf5396dd8bfc5700e4f9076abcb303bc57fac19e46feabcac75e300746deabfd601f88556bfcf000cf22ffb57ef86790ffc57ef8f723ff75b9a0dcba2d48c8fb1282dd07fff57e006c33c07f831ffc036d73634eddf603bc37f9b1cdc0ede8cd847f4c8d7f7ac000f65bbcf06f19b0cf563ffc07fc769b1ffe037167bb1ffe03f5bbc30fff16e400bfd30fff8131e42e3ffcdb91ff6e3ffc7b90ff1e3ffc07c60c7bfdf0ef43fe00fbfcf01fe8b72ef5c2bf7520feecf7c37f604c75991ffe03f1e7801ffe03f100a7cb0fff81f8d0ed87ff80fff6f8e1df8dfc7bfdf0efc5f5a607f2fca439ad009ebce624ce17e93a375fd7ab21e715b7b174f1f5a92090b7b10cec7508bcce00bf07b6b1d4303cdc3e7c3dae56c09a10f2781dd60a726a053909218f8f0fca00e1b55f91d70e455efb147969eab84791d72e455e7b1579ed54e4b5599197a6008e9aedeb80222f4ddfd6b4fd36455e9aedfe32455e5b157969b6af2e455e9500da77e098d0efb8e3e1f51fc7738c1ffe99305b509df8be17be4740fa0d0279008c84b2ea83c2b1868f3192a41bc55fac9eb90dca693394579d90e7a34e6b4200f4e6f28b9597c692587e6c087f5abe29286cc363992deafcd8221d566f6389004c943f8e9cefedeb3e76f09223070396f8d818ed761a2b876bc25541a1bdc70014e115b0ffa7b17371c28fa67144876bafbfaa67c391a37dd706c3a43067f600fc7c477bd46081f2472b5854333cc51a35dfc848af4d04850ec527f992b3d5000872245ebd8abc362bf2ba5491d776455e7b15796d53e4b54b9197a68e3b150079556afbdaa2c86bbf22af038abc34db97a6bd762bf2d26c5f9a3eb44f919700669bd08cab3899f53c096ae18b9734611e1d5cc6581e1da8aec80d96e329ce00fe539d1c8f5f10bebc1cc743c74d74b0576ccce092e789c1c0834163fdf01f0098788c0986da94eb34b688ad305ffa455e3c0f658dd682bba49b34494a048500ed924fb8245e634ae475221708a436de188255d2834fb0c326add426587e6c00082e5afe7f65123a9595c34d6de54c42a7b273c526a1e52e0e214e9712022f009c50f3b9a94b1df9df6459a9ad8bf7658abcdb3dc7f756ee7b34f1be90da1600f368fbe77d683de1b5223734af815c57c3ae1b17c2b33184e7f8109c4d213c00e943f57cae7e0ac9a3b18b27691c8075e6ec57131be4cbcb61b2f0d0c0cff300ff2be141bf07f2ffa5b11e5ee7b9af4b8f74cce16bbc16653c456d392e18f400c5c347ba7a97775d7dedb1c37d55cc94bccba5e6a4ecb8dadc55069a1f3bc700bb902a761d76495253a5d7c583c1e79210f39ff3bf4efd07f3c752b783fb7d00a52126ee33763cfec97053ac61a60e1bae501ed8653505436d23854a8a7f430011fc9407c55fc378fc8794f9379343eb87da221693cb51f9b49c744f815e13000f0a6dc2f58c0bd7f1b23c44a02d1b04b918221a198f8efcff6479a98f774f003449dd13ef82120c57100491bb20fa3c4c295351da05f3ae73e07549c1605d0050bb8e23f9b4fc84bc20d71eeeac1d2a6f8280274a6875890fff68d7c1fd6500a2a29c89a40c7ffeff544539f4755e7cca344951ce2452864fb7272bca994c00cae07007fd730ac9435dd13f4f23798ab795ba50c7694161c2bce944366f530033481eedd67992fc13752ad53fa7923c8a8df2a4fe49ed3a95e4d3f28b62830058ee1e37543e9fced1fe0d9f03890785f5342528d4654a20f3a6d7d609798a00759e95ea9cf707d3fdc86e8ee237547e3dc3aadc3f0d0c19a7333cdc3e250e00196933a0ec4f65ecb00c2d4bd3a904122d5fc3fe176b5651868c7541a19b28009ab8db6f734eb6796eb2035b8a66f8c1df83fc4ff7c37f6015e50c3ffc075e00e170a61ffe032b4c67f9e1dfcabb823d64a8d6993f6e646510874b88cf4f88004a25a3864c945f1ff81c320c86cc690c0fb74f15b3cf4c3f78fa638c3fc5330053b00fd6e52c210f799d9dff4f8711b4fc4ca2232d4f8ff17a7a6e63bec212008ca74b38b58c097971e11cdad7b5d3b579be4d823ebc2f92ea4deaea12c2f500dc860de43abe84304ed04d5ac9e479e343f29a04bdf854d1a5f5ecba53049e00ce6e9f8b0df22bd68624db84d5d14c0147535068cb59117885c93e5b284f7900ac66b2a92f9c1d815798ec7384f294c7cadc50d954d77322f00a937dae509e00f258cb64535dcf8dc02b4cf66ca13ce5b186c9a6bace8ec02b4cf61ca13ce500b189c9a6bace89c02b4cf65ca13ce589638ba6a050d7b9117885c99e2794a7003ccf62b229ae79117885c99e2f94a73ca732d914d7fc08bcc2642f10ca539e00a733d914d78208bcc2642f14ca539e6732d914d7c208bcc2642f12ca539e5300986c8a6b51045e61b2170be529cf194c36c5b53802af30d9e709e5290f7ccd004d93800bafad13b0682ee722d66489baa584f2495206f136317de8b53e64bb0084af69690a0a6d978ac02b4c765a284f79e29cb52928b4095e5b275ca738bf001818cf674ad42d2b94cf903229a65b9ae4e1b58d41a15d634cef8c1fbd23cf00ab507e7de0b31e92a1f540edc36f916405ac09218f8ff9a4facb0a72245ee70028f23a5791d76c455e731479cd55e4354f91d77c455e0b14792d54e4b5489100d7798abc162bf24a2af2e2fd0e8d1b8af17760979fe61c8ce20d9b8349d79d00c3f48c0bfa87cd3d255b4973503ea690e6de670bfa2784ebb19ce7baca84d9007ea47356a9aea439abb4a6c56d58ea9a16bd3e6c4d8b6f2ba15b03f8fa13dd00423193e5d1dd79b3585e93a097b4fde11c964777e7a1dde89a560dd3e78bf900f37e6f2927937cf79a64abd15f474f0ef9f410a613b98eced7a1255bf8f1e7006ce4af4c9dcd6c31cb932dc2fa02e99e42583c92d6c8e96ddb837d472f39720070d9f5dbba0ed28d82d455389c46568edf399f590456072b7736fb8f2ecd7100505e34711c71f69f97ef18a63c3d1e279c77a929281efa622c2f0806ab819e000bbba580e5ea0439b140ab89b50e7c91e65c2ffcd3191e6e2fcb2bed42f203002cf43678c1906d916eaff090c2378a2be91f39bca2fcfaa0b0dbf41152c633003cdc3e7c3add24604d0879bc0e9b04394d829c8490c71f7e1c292fc97fcac100b55709974bdb14796d56e4a5a9a3563d06ca3a6e55e4a5a9e31e455e972af200daadc86bbb22af038abc7629f2d26c139afea8e9439a6d42d35e3b15795da600c84bd3f63b147969da7ebf222f4d7b69c6c22d8abc34ed55a9b150d35e9a3100e77f61cca4d92634fb6d2ddbbb633e7f2d07578f122e977af3bc9af279747e00c45fe841e72874b9b52e28d457734e88fc4ff1c37f60993c1162472a5fdaf200182bf28bbc781ecaaa67bcb46d17a61bc5cfdb085dc2a63628c62b5122af3a0021cf479d3685e84de537866095f4e0f375692d4d5aafc0f2a784e0a2e59b0400d9782dda902edd2bda301d6643ea8b287f242ff440bb2d62e556e706edc0db0060a208af80fd5fc4cec503f9851e6175d82060c2f258bfb54279ca8f3f557a0069be729dadeecb17925e1a338ef0bf35fff81ad639dfe6d091ff9f2c2b653300e80773997da86cba9541712d32f2d707507e3dc3ea2b76866d657589af45ce0017b026843c5e87d256d3f9829c8490c7c763e5f0daa3c8eb52455ebb15796d0057e4754091d72e455e9a6d62af22afcd8abc34db84a6bd762af2d2b4d70e45005e5af6a27d5da5b5d56d8abcfedbebd1a5fd8abc34eda5d90f6d51e4a569af004aed8734eda519ef35db9766ccd1f447cd36a13966d2b2bd3be66b6be5e0ea0051c2e5526f9e57938093afadcd11f471c9ef9c6b706d6d811ffe99303b4a8f00be350a368815f9455e3c0f65d5078576f7313f9474a3f8c3da2e7f2ca01c3f00405e75429e8f3a9d17a237955feebc58da8e2ccdbfb1fc82105cb47c93201b00af451bd2471a7cacad4936a4be88f247b2b686769bc7caf1b535da06e717e10015b0fff3d8b9626b6b7c7fdd17f2c697f6f529da57dcce8cb2a47b1d7c6f24005df793d602b91fd2eb1b8af0a22f2ea55f529f16c8b6fa1a59277cd9b8a13c004bdd722bf910e5c15f794075a0d7d2eb6a84b263591e96fd0ed1e595795da400adfb585f9edb474fd4be04e5d70bbafae84ba47a95da9db40eac88a73bacdd00486315be6ecceb8ec60cfa7a165a7e0ed191c7251a6f6ad8b95fe68d92080a00fb8675b9a118a4d718487d895b6eff71d550dd463a26a17c1341a16db07e51000edd1e8f7ee9f0fcae6aa82e3caed06bddf114924fcb3f79dc20cf07f33c9b0084eb8bbd762346e4d13df52b7343cb637de2fd115e86c73d2cff57122b5ec300e2de3441e729219891277db32cc58cafbfe118fec5fa294ff718c47e0a65350031bcbc7eb82e529df076375bb04394370bfa8933a9c88fb4a0fc7ac1263ee20070d457adf86d1f0f3fee3e5cdca278b12ee70979c80bc778d48768f9b94447005a9e1ee3f5f45c63bee2124161cce671581af7d273340e8fc9f36d12f4e1af00000bebaf28df84703db7211ff748bf28879fe37224cc617e37523994171d6300d27aa5f54e5fbf48f718d0faa0b193b6431e3bb1fcb43c5017bf5f1f32d6a3007ddb8cf8f0581b04ac35acfc15a46f3b93b51bba8700eb43aa1fbeef639a200037c6ca0641e15e18a93f429cb545ca3715d16b36b1e97dac4fa4b690ea95ef00dfc1bc6a412f9778bd62f9f923a8d785f1e1b1d27ae5730b2cbf9ed4eb79ac005ea9fdc2ea35c1f268bda28da43e97d779a97d2ebd7e5a889c492c8fd621be00813aecedd67ee74c3d91fb6a3e679aec054ff89c89da87f7d5b3fdd867a0af00961e6f95c6d59ee77019692c506cadbcd8586036b1212d4f8ff17a7a6e5dbe006148f342bef6a7315f1b6d5e61e3175aa72e5e75305bf89a47f218315b518e00342795c663d4d7691ecae1e7b81c7a3d96f3bbe72d9394c6f08afc53d23d1c0045fe6969bd5f8f7f76e09507745d9df7397ed6c99b5ba2f63928bf9e61f5d500e784bd6ad125be277091803521e4f13a945e85b848909310f2f8bddf4ae1b5005d91d71e455e972af2d2b4d72e455e7b1579ed54e4b5599197a68efb14795500aa0f69da7e9b222fcd767f9922afad8abc34db5797222fcdf6b55f9157b722002fcd76af598f9af14b53c71e255eee988fe5cbc1d59bd3e3a5692fcdf1c4ff00423fa4d9ee2b75fcb54591d76e455e27c75f27aedd6b8e4d4ef669a5f1aad400b15ca5c642cdb19c662cd4ac474d7b55eaf88baf75fe378ebf7628f2d2f46d004d1fd2b497663fa4e943956a7bcdf8a5b99656a96b439aed4b73ec5ba963cc004aed3bf87d2c8dbe43ba877a3629e7f9798c8ce74f3065c26c257d8eaa31ff009fde638f15f9455e3c0f65d5335ecabaa5c2740b7b7689b629fee99072da2700f2aa13f27cd4e9c210bda9fcc610ac3efdcc1d4f53e4d5c878853dc34479610079e9136b523b691264e3b558b7e7913cc5ba4d87d52d8d11287f24cf67a1dd00b6b3726b738376e0beb1a808af80fddfcecec503f9f9aca6a0b0ad15db078a0072f9b9b0fd6ef342e44c2e53cee488722cebc379e33e2be973bb7ef799b47400fbdd67d2d2263d8bacc7bfb95f1a4328e24f4bfd8d1eff6cb33446d1e3dfda0086fd13c6349441db56929cd78bb72d99a8631a945f1f788dff03639a24c3c300edc3f7f9a404ac09218fb711e91395d2e703255e8b9578b9c4ef5995c36bbb0022afad8abc0e28f2d2d4719b22afcd8abc34dbc416455e5a6d42ea334fb68900705e7b1579ed53e455a9bead697b4d7bed50e4a5a9e36e455e9af5a8d9ee77002af2d26af7ee988fef2ba54df428f2d26a13eef8e4f8ebc4b4d520a8ccbed6001df339ecc95818ceab57919756cc71c77cada01c5ee39478b9a4e9439a315a00b34fabd47161a5f6699538b77249736ca2e9439af6d28ad127fb8eff8ebec30025cdb995662cdcafc8ebe49ac289f3214ddb6bead8adc8ab52e7439ab6dfa500c8ab52d70b35c73927e3c4891b4f9c8c1327cef6951a277a192fe91dd6098100179697ded74c79f0f78dd039c08208bcc2640ff71e87d5b9a1b2e9dae8c20800bcc26487ed057469656ea86caa2b5e5b275cd791ff4d969532d94601678cc900f5b45fb22fc6e4a18de8392abf9e6155c633b01f40dabb26ed9bf3bb5f22d9001b63fc299ea4601f697f025fb74ee7ffd37741d1f249a2232d4f8ff17a7aee00d49a877f35d7d7dc7b95c6e7f9faddd7d3ec7bdf4dabd456f4f867dbeb04bb002bf21f8813b40df0389121e7f5fc20d51c354ea0fcfaa0b0edfa881319868700db87ef1bca0a5813421e6fe359414e56909310f2f8387aa4bcdcf1bc0ac4e500d23e255e92ff578a8e9b157955a2ed5d3aa0c86bbb222f4ddb6bead8adc8eb0052455e95687ba9ef2d8717f6b318dbf95e6e973c3fcf14b95fe4efcdf3f59d00a9189347ed2aed8947db2d16b026589e4bfcfd9cd2387db120c722af12e67c00e99efe54a6b9afb539d9d2956dee6dc9a47bd3adc9de6c737f2ad5964ab76700db3299fe9e6c5b6f5b3ad39f6e4df7340a72799bf534a7c9466db328bf3e28006c233edaac34c792ea0c6d9711b026589e4b1b7383e5785e5c38575584178f0023e5f07209dfffed716da1b93128b42d6f677ee60c0f3fdb45e5a18de8392a00bf3ef0daee43e70cd43ee5ce19fcd5e7e0f3b37eea2c3bf08edeac3ef681e700769acbe79de12790778b3eee81e7995af5796791775bf9bc7bf9096cbfc5be001970a466b00d396acf9729f6cd80b3493e2dff89da419ed7e479a2ec714436008f3be3c979bd369c4e468d3b28bf9e61f51577c6333cdc3e3cee4c16b02684003cbede34599023bda73f21e4f17b1fe5f0ba4c91d756455efb14797529f2da00aec86b7f85e2daa6c86bb322af2d158aeb80222fcd76af894bd3f6bb15796900d6a3a6ed7728f2d2d4b14789973be6efad2d07576f4e8f97a6bdf62af2aa5400dfd6ec3b703c81f7e9e9f8917f7398b6a5d94c1efd8e25e58fe3525fdf3c4400fe33fcf01f784fcef4a0d0c65427948fe3cca9a47cacc82ff2e27928ab9ef100d2b65d986e143f6f3ff4db5efcdd3c12afe925f2aa13f27cd4e9b410bda9fc00c610ac921e53984d2439d21c05cb9f1e828b9647bfa46d1faf451b9e41f2b400d7a18ad5f7e94426ca1fc93b86d06e67b272b8afa92a28b4fd8c22bc02f6ff004c762e4ef8d124eddb1acf788d633a14abdf84703d968b32b7f71307d25d5100e312ca1fadb9fdd4887645db4d13b026843c3eb72ff59b88348fcfedcbe175009922afad8abcf629f2ea52e4b55d91d7fe0ac5b54d91d766455e3d4abcdc31009f979483ab37a7c74bd35e7b157969fae301455e9aed5e33166ad6e30e455e009af5a819bf34ed75a922af2d8abc34eda5e9439ae3094d7bed56e47532ae9e00b8b85aa96300fe4d078d3100cedde8bce9d460681ec5c0bf613e89e44d655800a60ad7b9e479ed62e07effe97ef80fac8dcc203ac5059d507ea3608358915f00e4c5f350567d5068771ff34a49378a9fb72dbabe426d508cd78c12799dc835004c6a6bbe86296195f498a26893a98cd7148157d8da59d4ba6d0a0aeb13aff500ec63036b675343ec44e58f64ed0ced368f955b991bb403b7f7f422bc02f69f00ef092e65ed2cc17895ba7646af1f1722e7b432e59c16518e657d86dbcbb4a1005696596c2f137fcf3796bf8bec65da5c3b54477afd842028aaff449647dfe300cffb74babe8ae5d0a79b489e9e4fa706f685617dd28479a710d90d2c6f02c900a37af31467ffa94e2e46fc82f0e5e5381e6a438a8df2a4752dd9b586953f50003b88e54de3649e31c293e2c4757d2c8fb6ac0d06f5a66538062cdf4b30bc66009cccb3ba885e4d4578de48daf0c15a996720f094f43a85e9c5312418062c7f0025d1eb3ee2ecb40cfea7b100f76aa3ac0982aca0c839de362614c92b552eb5000f9e9b18416e4cc8e36d89db935e5fcce6bc2d61f963216da951c040edc1eb007d3cc3c0cb9cc23060f9eb050cee076348cf91abaf5fde75f5b5c70ef7052c005593631eeaa5aae655d028f02996d00c0e2dba0be783ffc39a89e48e41917300c5aa7d1c39dfdb77b8ef685f11035531660d4584550572e2b114af73c96f9f0013fd5900945f1fc8edb643074f8ac779c4c3edc3efdb2504acd2f8082b37ac009fe7be46318c17302482e163c7f888fa8c0b061bf6b5478f5c53accdd13e5c006a73e38ac88f09d707ecda9870ce25e78fb7e69db28ec9556e073dd2bd6c4c00d2d823c6f2a8bebcad705fa279b4ad54b33cda5fd4b03cdab7d4b2bc89246f000ccb3b95e48d6579745e5dc7f2e83eaa7a72cc9334d6c33a73f26a62837c7900394c4e9f3bf34ab96bffdbe6309c57555038377109bf4b856d9fae59e8b5fd009e24e2c179758da01b955fc3cabf92f4f56f65e30d692d448a691c032d4ff500e67525ad7786c9a67585e318bfeb9f83f69d41ec27e9369de4d3f26f0cb1af00b43e1666dfe1d648118fb40e3d83f11acebe2b730fff56ba7ddf7902ed4bfd006b06cba3d879bc936c3f45c025c5bb2921724e2b53ce69829c305e0981179d0027c040f8d0757dd76c387274e01555c8929a3560c775ecdc34f69f0f7d27150081cae71a7c1ccfb7ccf2ad7033d9ff53047c52421c34712cf160f8844d1d6d00f551d2d4dfc19abad4b5d1ee08c3255f82a3d7d225386c5ee79372bc199f2f00c8a4e7c29a319693e4f06de01708d7c5581ec5704108067a3d96c310b784e400e985b8ec4088bb30cfafd872e612924fcb7f3924c4e13554ff5982fe1c032d004ff5463c92edf1da464176acc82fcae1e778bd500ce78c921cf4ab26218fb70075c9ce4b42e4d0eb978c923e895192d3344a72a63139172acab99094691c2500397c3981e6f1b826f9e9852172e8f5dc4fcf57d4478ad3beedc61ffdb988e400d13e0e712c1570608cef20e7b56f7953798897db00e5d533acca780696c63a00181e6e1fbedcd129604d0879e790639a47e5740a72245e17310c1791eb46a900fed223adbf8bfce009adbf8b04bb965a7f5966d74e2f7a64d3886b59509830006f3991cddbc20a92477d852769e90a7572e3a6778f1be4cbcb713c1d240fb100350585f54dcbf17a09abab84703d96ab0b0a6da2581f596ed740d07f2591dd004c8e79926c8eb89dcdbf5882cda95d57b23c5aefab581e6db7ab59de3292b700267fdc14146f733196873af273bc1ee9f5cb19067a5db97da284596a974b99003ea5b6cba5829cb0d83c527d24cc617df848e5507d3a999c4e4539b42d2e630072dac97574cb4b6acce035f43a3a47a4d7e2b2720d2bdf326e906736cfb32e0028f48313194bb86fac2279bc9dad2679bc6dac2179d4e63c49f1096de1e2d3008323ec13787c0a1baf781adf451eafa0fcd11aaf2c65788ac51a297ee3b592003fb5b2ebc2c6f89d27d8e69dcce6bec7f89d0c0fb70fb7f932016b42c85b98003fc65883b7110fe6e3cbf1f54216bf901fddbf81af487469436e284f2cdf3d002a312bd512d62fa3ec159e64476d3f285f1a0323ee7a21afba0caceded7d7d00cde9feae54b239d392e9cbc682c2d81e17cef1f5c5954279e955ee68eb557e006c9dc5981ecf0df2a771dba56a92b782e5d5903cc4e8fa8c718d43f1aff484003f8afda9fc84507e3dd1a194ba9c100c6d6bd41f71bcd949f2f8ebeca578d40029c84908d763393e6ea2e55cdc794cfd5099888f6eb3a4f77b8a8d9b1ecfe2008e9f79574bab3456e27167a527d951e30e1fd7503c88bb5ec82b27eef4f7b4002533c99696debe966c7773b63f2c8ed0733ceeac12ca9f2794475baff663eb00b41477e89cd5a56a92c763128d3b88518a3b7ee2664b3a8afda9fc84507e2d00d1a194baf4c98bc6030d5ee347c80b63abd4a757dada0f7f6c83b6b9f92c8f00fad3029647e76b741b1e4fc3ad274d691ce4cbcb713de8f891c7b5d11ffb4500bf3fc0e3ac9fb630387790c604d25a57589f20f9077dccb55c5fe3630f5a47007ced2eea18475a83c2727efbe36c0bf7279a247fe26b23d49f68fbe049f22700d4a9d435716a73c426ada5d272bc2d45594b0d8b8b546fc5fa68471dd706850009f32e26b24b5d1347dca5ae8953bb5eccf268db5cc7f2689cbe84e5d176b5003e7fdc1484b72b9a873af273616bd56b18067a5dacc82fcae1e7b81c09b3d4002e57327d4a6d9761eb98bed6f88b8dc735e4486339292e952b87b6457e7fa600935c47d7c4ef676b4a781d5d13a7d7f2b91d963f93ac897f98cdf3fc8cff4b008f25dc37d6913cdece2e2179bc6dac2779d4e63c49f189ce331e1c619fc0e30053d818cb4fbf1a7d8c85f2476b8c258d7dc2c658ab04ac923f759063eeb77100e15c986f625d36058575c4ef27963a965b2ae8e3771e9b6de5fd1d4dd2388a00df635a4bf24a1d63d1f5c252c658d4e661f7ab7df465581f546fc5fae8e2b1002f10f4a7b1afd43116e22e678c55ee384a6a571bf2c74d4178bbe27d465c380017365658cb30d0ebcaedc325cc52bb5cc5f429b55dae12e4f81e639da8b1cf006a4539b42df2f14427b98e8eb1aac60e5e43af8b3ac61a98d39031564d9ea700e7f95ac9b184fb061d47f176268da3306f03c9a336e769b839e08323ec135000a74aeb3bf93a218d177c9d908e7df93a21adb352d709699f5bca3a61d83c55008a057ee70fd1c7b028bf3ef0d91606c7b0ab191e6e1f3e865d236095e6ec7c009db0d47586a8f37f1f7bfc3ccf25dba4f5124c92aff17542ea6be5cc09df3d00c2f114626b0a8af7efb1a0b02d4599bb487d38d607d55bb13eba799c0a04fd0069df52ea181671973a86d51ca74aed6a63feb829086f57340f75e4e7c2c648007c0d815e172bf28b72f8392e47c22cb5cbd54c9f52dbe56a41ce7febd8d2d7003a2e1faf7592eb86bc2e8e8d61f1baa863582cff8786419e9bd918d6d37cb800e458c27da3d4712ae66d2479d4e63c0d37c77e70847d028f4f27c758fec758001de498fbade6188baf13963ac65a2ac8a9b431165f273c39c63a39c63a39c6000a4e8eb1ca9053c963ac672b8db1be45c658cf3d39c63a9efe8bc7587d51da0028955f69632c677afc94e0c1bea39b8e751f3ed4b3aeeffa6b3bafeaddd47500cdd1435d873b7b7bafe9bbf65aaa0d6f0d5c5bde0aa4554e773c5f384f79ac0089a805f75a5a9ef2408f6f0a0a5bc5da08bcc2644bbd15e5b13a375436f598008b23f00a93bd4e284f79accc0d954d755dc7ae93ee28c48af0e6b2c3f084e100bf44284f79ac0dc17f49045e61b2d70be5298f35b9a1b2a97dd647e015267b0083509ef2d8941b2a9beaba815d4723352d27f12e26fb9222ba51cc1b83d27400dc2494a73d07469f26418f4d117885c9de2c94a73ccf62b229aecd117885c900de2294a73ca732d914d71676dd169247cb15e34d6587e109c3bf55284f719c001e827f6b045e61b2b709e529cf33996c8a6b5b045e61b2b70be5294ffe6242008a6b3bbb6e3bc9a3e58af1a6b2c3f084e1df2194a7386684e0c76ba38ca828004fc5114c6f8cc9433de8392a7fb4465451eba191d9925e9b10f2f82c51aabf001d821c89d71a455e172bf25aabc86b9d22aff58abc3628f2daa8c86bb322af004d8abcb628f2c2188a318dd6eb2226471aa3ad0f9143afe7ab5ef4ba58915f0094c3cf713912e6e1562dfec6562db00d4aab1634f6e3aa0596ff3059b5f867009ea7b4a28518253bf3d5bb52ed2cc9c1be86b661bdd8de3cf0a4201d2360c2003cdacfb591639ea4550ec45dea2a2cb5eb769647e30cefaf69dcd8c9f2a8ef00eeca1f370585f6e531511af7d27361ed7833c340af2bd75f24cc52bbe471b900d476b94190e3dbfff90afa064539549f8d4cce464539b42d6e62723ac97534009e9d5e37780dbdaed82aecf2dc603e2dff5a12cfcecaf3ac0b0afde044c61200ee1bd2b804f376923cde3676913c6a739ea4f884b628751596c66a1e9f249f00a80b0adbde89b8d38df2eb83429ff33167186e7d87cf19360a58257fe27dad00b426b3519023f1daca3084cdf93cd55f7aa4f5e77bce27d55fd89c2f6afdb50030bb6ef4a2477392f7fd34f13e99ea8679748cced70303661b9aa84ea5def500a76d0cb1496351deaf977a77955ecfeffa7b1a6fa6b95d03417fba1e53ea5d00ff918e37a95d793ca0f5be8de5d176cbfb01dacf62df268d37792c2b75bc4900af1fadf166d85d7f3e7e2eb55d86dd8df575d77fb4c6b59536deec2971bcc900effa63f9dbc978b39f8d37a93f57ea7893b7333adee46da39cf126daa2d4f10026ed875027cf7d6786c7e340c045d7eeb708f8c36c41fbc7c38d837c79392e0093fa2d8fc7d2ba81746f6b3139e67e1865fcb858d023cca7fdf6abd1c7ff2800bf3ef0d97606c78f9b23da556ae79b99cd691eef33a57b7b5b0439122feedf0061e37f4ff3a56cd4fa43f9a335fe97d68a160b761d8df65dac9e3786e0f1d300f72407de9e17f5deaafba2586d50d886a47bd61cf736c21fcf158b59a5ee0500a03cf8dea062388bf11ae95e0097f8de201a97b644e035d2fbf82eadcc0d95004d75dd5ae43a5e4ec2329cdebc6c209cc77116ad0bfec4ff165696da8edf2b00447daa8a60d842f269dbe3bac484f2123fda76393f5a67788edfff0f9b7b6d0063655d42bfa763bb1311a7517ebda0b78f382ddd3ba4f6a171680cb3356f3300b4fea47d72eef81241571e9fa262c2f23b85f294078f4f14ffce08bcc264ef0012ca531e3c3ed1f685d786b5cb28ed86e2e2f3100d5ebb1478e1f849dab39300080aeb6207cba373273ee7da2de0437fde43ce9f087f46f9f50cab2f7fdec300f070fb48fe2cad33f0fe264a993d442e9e73b43722262cbf4f284f79707fa60075bc2f02af30d9970ae5290feecf7bc9f5782df6a7d8677e22bfaee1c6711f00c91ff3f515ea0f51ee57d33542f407c7ff3321fcf784f0df5b84bf4bf8750600ca5ff2679425f9335fd3a7fe4cd78e689bfa22b1db5743e4ae0d91bb2e442e00f645947f0dcbfb3ac1f0ed100ceb43306c0cc1b03928e48f6328697d96e64b007bb9f13fd5bdd8188bef2d5b2594a7e356e427ed25e7fb88689fcffbd8f582009ccd822e31f67f6c113db8ed35db069787ed63be20a38695fd45dd20ee1bc8003a152d833c5cf2fbb453f43e0be58fd65a41d4e745d076d2731609218fef0f00959ead5827c89178ad51e485fb43eb843c3dfb667bd05eb42d6392d63d4bbd006786b84bbd67a6f9342ce6d13db7d89f48b1a8dc3641afe76f03e4cff348bf0028879f0b6b2ffc6ddad2d3a0319647f5591d22477a4340a3705db9fa54c21300acbede78c89f0aed24d7d17b6613ea07afa1d745bd6786e51f4bee994dcaf300f4fcd47dc9b184fb46a94fc34ae35cfe4c1d4d527ca24ff28f748f168f4f92004ff87d9b61b2396abf8df2eb83429ff3d16f4bcf984ab1c6991e9ffd39d87700745ddff53bba0e1feaed3a7ae8c8555bfa1e79acefdaa3540dcaba5a509357007f351387e5f832e1ba5c61399a46eb4504a59a0fcb0ff7882e860b490f1e0a004f40338e7cabb1529bb1340cc16bc35e841b567f612fefa5bcf8b619ca3bc900e42c17e42c0f919314307b7e8168c92fd549b23cdacd95faa255d4e9e44b750006eae3e44b758242fb9e7ca9ce5039275faa3332392379a9ce01365518e94b00750e92a9420f9b2ad0387322634925bc54076d51ea54a193e4f1f8b45cb8d6006fbf1a7daa80f247eb032752ac91c624526cc76b25bf5d468e797c88b2fc410079ad54e4b5429117b631b40dfde02ddad0f937ffe0ad340e6c1764c618665a009ef2e0b7dd9685e8bba244d9d20763280f3eb7a1ed15af6d0a0aedb3247fdc00c8fe63be4b75820e2762dec33fecb8c40f9ed00f3b52fb709f8cfa61476aff0062755bea871dfdd651b6b951c01530fd69cce62f52a7fe4aeb8d27a9ef419d004a9d8f503bf3711fc5c0eb6309c353acde1341717faab40f4c943a1fa173c00052e623d4ae7ccc483f00c0c779611f42933ee0218ddfa96c9a873af273bc1e00e9f5a3357e5fc2f4a118f807174a6d97170972c2e2fc48f59130f33ad79023007d6896b71f0d39b42df28f047692ebe87ce46d6c6c81d7459d8f60f94d643e00f24e361ff1f431dd926309f70dba5ec0db199d7bf3b6416fe1519bf324c52700fa11de91ce47787c0a1bfbd0b67722c63e287fb4c63e17313cc5628d14bff1005ac99f3ac831f75b695c1be69b5897754161dd2afa47c91f7de72f382fd64700f124b573d4a9d4b10f6daf7cfcefbb8ff11caf4afef877a9631f1a5b463af600e16b2ff4c5fcc53e30476369d8b848fac0281ffb943aa7a0d78fd64793c3c6003efc4308a5b6cba5821cdf631feef74b15e5507d3a999c4e4539b42df23116005d9fa0639f3fb1b10f5e47c73ef45a3ef6c1f2ed64ecf35736f6f1d3ff961e004bb86fd071116f67513f7a416dce93149fd016a58e7de83c95df2740ec354200d90b581e96ad26f5d5923f96d698ce0f86e69d4ff22e64791790bc7696b74400e019637c689ba3e5334c072cdf90c7ed6c7953a3ccb32a90630eb6636ca3d40047f5da684f12f1740a3a5e48642e653a62f904d1f1adacbdc47383d7a3edf300bb7283ea9c177d520e478e6df7a5e3cd1a2297c7d1b8509eaf95760ae569dd00a0cda498d7c1785d20f0ba909cc3c71d46ab0d203fda06a8cff03680e56744006c0368d713d106a85da3b4015a9eb7810ea13cad1bb4592228ac777ecf449a000bd17651096d80f68fc5dac0dc886d00ed7a22da00b56b943640cb97da06f8003cb583e42d67bc2e1478d1be6035c38abc6b03b93fa2fd152d9f217574dfb800a1f8a43e19f3a43e95f6cb31c683ead120e8d1c8f2e8b58eef919aa1f8710c0077011913accf1f7bbea73bf00a031cd348e34e2abf86955f2af8458c5d43ed0015d6f7847d1c451ad3d0f91d5e5b69f70ef89837ea7a1f1ff3d2f5be4e964700f73b94ba1648ef553c9fc4135e0e136d9b31261365705fe17ed12ee0a5732100beaebb85f8452ff30b9f1f69a47559ecd5cdd46f68f91d217eb17a187b71bf0008db434af1486b1b78ad5f7b95bee792af83d3b6cffd82b67dbe0e2eb57d6900af0fb5094f925fd08f2346f58b5ee617d23a522739c7fda253c04bef8ff0fd005787885fdcc8fcc2cf635f837e81762fe617eb82a198b1fc2342fc427a5c6a003939c7fd22ecf344925f488fb456da6372fcfeadf43a4c694f1a5f33a58fb600f03553fa386ca98fbdd0c7f2a2fac58dcc2fa4bdea51fd622de17b80f905da002e47fce236e617345ef8f00baccb627e41fd8696bf25c42f343f9d25f9058d00bd78ad5f7b657b1b05ac98a4b6cf1ff9d26cfb98471f47a736e149f20bfa18007954bfb88df985b4073caa5f5c4cf84e607e81f67801f18b5731bfa0bafbf0000b7c5d4531bfe0af8bc2f22f0ef10be93556f4d5d0dc2f86fb7416f70be9d300597eed55faeb2df9eb43e9eb87787f11f555f6fcf167e9751a51fd02ed548a005fbc8af9c52626a314bfd844f8f6b0d77060deeb895fdc3f3a7ed18bba615d0046f50b2cffe612fd22acbf905e1718d52ff05acf7e51519f71c03cfabaa5d100f08bfb3df9057ede43fad4231d9b521b0c27d3f3ab377b785b2fe63f9b493e002dffc910ffd1fea46498ffe0b52732de48afb5e4f1e60b11d7bf37107d5caa00ce79d1a74f5affa6f55643e40e57472e951a13f96b97689fbc89e5511fe27100a953e0e97c123f21c6e7fcdf217dd56f8dccf97f7072ce3f90fe57e6fcbff50034e77f7611bff823f18b9a7c1bab74bff8eb49bf1848ff2b7e51c3ea59cb2f003630bf1878cfc5b8c13233985ff879de7fd02f68bb97fc82bea288961f9fc70029f985b44622edcd0cf32369ff5813b31bbdb6d2de8fc0d7ada8cf2c67799a003e13d52fe8fb18a2fac50c56cfd23dafa87eb186f0ad627e817ace247e9161007ee1e9158919de868bf9057fe523963f37c42fa438223d0b10e647546fee1700f4be217fc5a01f7b65bb1a05ac98b8cf48b19dfa0cf70be9dee0487d26aa5f00a09d4af18b4c847bc751fd6235e17bff98878fb18de1bead36e2171733bff000f90c33ad87627b50e8de685a7e49885f487b133ac8b9529e15a778a4e7d4f100da4a7b9e98b77dda6ef9fd741aebf91e14293e701fe536e149f20bfa8c725400bfb898d5f3322683d6954b617b509611bea9bc5f60fd2648b939c1d0bce924006f5a3014cf5c010f2ddfc0cacf2318a4f2c8af8695df4adafe7dcc5fe793eb0015fdb51b312f2098e2825ef319662cbf33c45ff11a6ab7d9e41cf7d705427900aa37e2696276a3d7d6b1ffbaf64a0dec3d5d28d86bae80a78695df2fd84b5a007b4b107d5caace79d147dc7b4aebad86c81dae8e5ce275ba50284feb066d960060e569fd62de1c92379fe5519f9dce3024040c51f77ae2b5ce9717e6035e53005058df3c9ed0b6c9e389e417b43c8f270b0806a97c31dfbc3a249e503b2bc600937ec4bc886092e2c9428619cb1f0d8927525b6a22e778db5b2494a77af3780042db255e5bc7fefb8a278b057bcd17f0d4b0f237468c2773893e2e55e7bce80023c6135a6f3c9e84d5914bbc4e170be569ddf0b8403fa3b880e5d178b290e500519f9dc73048e381a8f104af3d3e4f66f184963b97c99c23c8a47de9cadcc300bf7502661ff79e68cc890785f69c47f269f96784f8f73c41c7d3c839de1686008ba33c26d3788dd77ab6577798bd6647b0d7f322fa7703d1c7a5ea9c177d7a0024ffa66d93fbb754a7b47ca9758a364b048531928f25a80fcd61721a0439d4009fb80fd3bac26b9d0fff2eaf403dc9c75ff7bee98efcff6489a9a7bba53bdb00d7ddd392cab664b2c9de098cbf4b68bb060ff2b3cd5dad3d5dada9547b36d500974d358fb6fcbeee6c7b6b777b4f73b237d99e6acf8cb6fcd6ae3690de9eed00cab6247b92ad2da32d3fddd6d6d29eee4e665b7b7bfa7bb3a3ae7f776f4b4f00b23d93eaedea6a05f5db465dffdedebe5436d5daded697cdf6b68f7efb6b6b008786d7dfd7954aa5d2bdc9bed196dfdcdbdd966c4d77b5f7f6b4f4669a7b860093efe2f203a40ccac71427e7f9f578be46284f79f0f73ac6c9f5351164572900ca8e85c8ae295176ad509ef258cd64d36f0de0b58d821cc45827e054ec9323007fae09e5d733acca7852a5d64323b325bd3621e451dd8ad55fad2047e2155300e455cdf4a1bc8bf96a947643f53d11ed06cf8d56bb89333cc3b59b6a016b2200288c21f85d8fb018552dc8192d5e525ce5b14ab24d3c440eaf2b971a85eb78009be336edc8ff4f969722bf771ae5d7075e7d2015567f925dd1763502d644500018f7783b9162628d20c70a2f1ae7c2e21e8f73c3b547ecefb98fbb849f19e500b1b429285e373cbed3f33502ef1a56fe6f6cfd740cd3a323ff3f5966e2e33c002acbf338a285f7c334350a7af37a1f4bf278bdd731cc348f8e9df9779c688a00b3ffd416c7df5117e17ea3d446622caf56d003f378bdbb94080adb3d1fbfd000765fcbf2686c1bc3f268bbdf901b8a99f689616395a8fd6ad8181baf6d20e700c7e486f23bfe4bced5e48fb13ec6d2f22caf8ee455e706e5ba549fff5f4de400505e88a386959f9c678ef7086ac935787d42905fcbe40fc12d9ca376e6bce200c2392cefeaaa298fb1d8b890d627efa33dc5a096189347f590e2527d50e837003efae8310c4fb1f62ec523ee5763c9751b7383e5785e5c3857558417f7997200795529f28a2bf2c29854170cd5d9a58efc6fb2b4d4cc4fd415d16184fc796a00e7fd124d52bf24f904b51f4d1477a9ef4ea5755ecff2681d36b03cda6f8e630079344e200629c6f3f6c6fd9f9f0b9b6bf0b101bd2e56e417e504c3c8913037000918789b97facbaa1039d23c2c6cbe3e527d4a9da38d540e2dc3d72aaa15e500d0b63886c9a1636dfaeed4558d83d7d0ebe8fd327aeda6dc603e2dbfbd719000e7dafc31c6124ffd532bf7339aa4be88fb061d1bf37656cf30d33c7abfb8d4007133daa2d477a7d271f3589647db0b966b080aeb6827a9a343ac8e3cc5fb6600c487b696da15955fc3caef6d1cb417bf6f2df5a561e3f03aa1fc58c176d29c0003afadd4fe516a9bbc4d8f6398695e23c9e3316a3cc9a336e169b8fe38eabe00d443456212cae03189df33ae11f0d25847c7fb7ccd89fb537550d867f1fe210028c243ea2fb90c69cd6b556e685e75046c521f1308e7246cf161b0550bd83800dfaa103d8ac9a198c2d6ab781b97b07bb9179dee69eeca34b7277bfa9a5bbb005a5a477d2f403f48ed6f4d36a77bb37de9deaee1e44bf36dba57c5259cb3d300393d2d8ffc6a58f95b48dff124e6c735823c57eef69072b122bfc77908e7aa007343cf49737dba0682e551767dae1023e63590bc1a26675cfe3fb517e58538006a58f9dbd81a085db7c0eb1382fcb14cfe10dcc239be06d220946f10cabbfa00797a1e23b65baabbf63ac271998c3f3dc7b1dd5e647d465a2b8cb33cda47f100b887fd9134567689af4363f9bbd87889afab76042ab612d7a1eb980e63880e00d2b8676d6ea80e58fe9dc487ef691c6a33e9deac644f3eef93d63a9a04dc7c00eda2c18ffd069e83c2b10e1d6f52ac0dc1501b61f9570ae34d69df5f2dd1c700a5ea9c177db2d2be3ff4d7e3f8895caa57100cea4dcbf37e759c509ed60dda002cc1caf37116fd4f79d131fa6a86156d581b848fc7f93da1b7903ae2efa8a6007e53cfb053ddf9ba645c902bcdabeb08e62f9c9ce71e4fc3cd734bb93fa4110087e8fce538be5c21ae13e1b7744ec7fd96fa685c28cffd76383fc7359e4450005897bc7d4b7d4d293ee3d26a268fb617ac1bea33c5eebb145ba7fa0a9b1362003d165ba7e27d2096ff15e903bfcefa40cd7b93c3b54b5ebf280f6309f7cb8e00fcff647929f23e10945f1f043ec73ba9b0f62fade5781e3f64c3fa45c91f4f00091e5e1fe17546f1212f3a8f5e937bf8576a5f7cbc57eade387a3dbfe74deb0038ec5e398f0351ee95d3f6de10848fd5638c57b17541de1f44dd33cac7bebf00277e3f31bfa025f92ff77be9bea034bee57e2fedadc0b6cbd7e13af2ff93e500a581b63b30df0e649bd2b1312dffb790b556c91fa4fb961c032d2f8d1da56700b006f626b0ffcaf61a982b8c1fc65e8dcc5e58fe3f21f692f41f1362aff14200f9c6107b515bd26bb9ec62b168b4dae270b6e56d11cb8fc91f0c370f1b4bf40071a93ae7459f66693c47c76035446e317fa1e5a3d4bfe42f09569ed6b714e30079aca6721b581e8dcd3cfed3188fb18dc65269ed9dceef70fcd6963f5727d80041735c4163b336ffb664b68ddf9fd18e4dbef7a07bde6f9cc476b72237947f00c0e4c65939e91a692f0396413d7cb423a8e766cf76ca785e3b18e8e3c29ef300a1f2cbddff40658dd61e7249378a3f6c0f355f1f2e673f361fe79d883aa5b600a6757abc4c6e30af8ae55593bc1a9647fb36d4d1f587679272920f62b9f9e4007801b391cff8ec2b2eb83451c0cfefc5e0bdb32090ef51a15d4fd43edd79f900ff95bc4f7756feb821185c334a137ec5fca02a28e4273d4788d77af6d9742c00288c4b61f35d37f69b943fbef6e8916bfad65eb5f2d17d3dc78e1e3a72d5f200ae9ecbfb6810e64c024179cc8b91f3c53a657e4d9c94a7a921f03bf06e6d4b002651263a444d50b8e04ce5d7b0f2adf9ffda37e7e1de7caa3fd3d5dfd5dcd500db9bed19f6e6fcbefcb1f1816ff7680d7c3d3962b3ef0789a4812fd505f3b1000dafcc0dda72656e28262cb39a94595da4cc1a52660d29e352d8009a77de14008734185cc5f2e8a2e66a964703336272011c039b3b9e4230bab496608fb1bc008b491e5f10f631c884f6deee7902909e18148fc3e86bcb735e64a7b043e52f00b03c010fbf64624c5e10c8938b4a7df8c575d813f3c73d5d870f6fbae6d075005d47fb561dbbaac7f5d95405cab64a50b158174edd8997e32eccdd96bb2a75004fcab7d8f5fc1cca969e67e06bf6bc4af9393ea792ee01fb7e9e21cafb244a0095e3790d2719f61c83efe7c9a5101f301b86d5a3742f3f26f092da209d83ae00207c79398e479a1b4b63705e5fd27ac970736f6e778bcf1047ad0ffa2c702900f511f6bc0af535be2f85e2431e16a622cbf3ff4ff4548476f9d2bb2f786c9700f6698fd67c59ba3f2cad5bf2fbbdebf2bf4ed71d4c37e91eb2b45ec831d0f200d2fb67a47d246322c8a6fd321dead1eb6b83d2f4a7dfc6c36fec49fd5e9ce5005509bc877bcee8bfed1d60a5be836f72fed8f8d4be79b4a6f63eede373bc25004deda5b157d874dbf923ded71d1b14ee75f059b71e6d1fba1e8e7d0eae253b00fdd167ae3a72f450fff5cbafe983b952ef8663870f1fea3fd4770db55cd8880084978b1529676174808b2295303a0888bd3ced444cd711991ef827a5ddd27400976103cb431b540bd7156b7755ec37ac6c2c846fa390873c715181e2453dea00d8ef24c2d747cf73aa1ffe625d4d22c7a7323da9bd3b9430203ff4596966cb005762e85d4e8a2fa68f2f15b024ad3c60c236732a3987f6fc7f52a7d61f2ce100040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex b/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex index 164520d20c73..1342f7db998d 100644 --- a/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex +++ b/yarn-project/protocol-contracts/fixtures/UnconstrainedFunctionBroadcastedEventData.hex @@ -1 +1 @@ -27774539896271d6dbe0c1de45ddc44709d1e8d9a9fb686ca3c105d87c417bb8270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f101503049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea2caaad89f1bc2bb35d0fe39aede0ffae1f0f38fb3a97b0d79837c0afbfed1f4209fdbed4bd565f3b26f4e878699a7d7c01656991c2301b73a5d853c614ca44a82a4bf9232d7673acf981fd8244941e3acdc98933db06afcccea33872aaad7ebd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000083abd7ca1eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b94400000000000000000000000000000000000000000000000000000000000000ca001f8b08000000000000ffb593cb0ec2201045a9c528d2c4c4c77f4c534cbb7400e1da7f20ad2c755137eefae9d664264c88d1057013324c80c35c1e85f02a30004a1121821c312a8c0b365eceed8c39c4a956c1be29f91d18a3bef84b587fa3009059e4e103f1339d3fac9073993c9f7ba17dd773d3ac5f09ff3e72f9a7fbcb00e97fffc3b346af5bcc2be1ffc3f8baf7d7c7f3368a3fd26c919cd29b683b00002abe44fe12f9a1241be7f30f986f84af8fa28ca8d3b5b6768d75f66487c1f4007617f03fe287fd06f3a87a78ce04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +000000000000000000000000000000000000000000000000000000000000000327774539896271d6dbe0c1de45ddc44709d1e8d9a9fb686ca3c105d87c417bb81a9ddbb308ed22ba60da2f2e98f3701846e4464d42ec98d15f7225fc0568e8ce3049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea1980e713dbcaf8ea2c4343bfef4f6b267ca68a9191a591f71b024b204c6d53161b24ce918b7778f393bac313bc14cb4ca5e0e12936fccdf70cfdbce94d5630ac159716eba9df09d5f0d8271dafcfdfcb4cca12c411a02fd5846c308c9f976dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111cfcfc1125672f40d49b4b192a803a41ccb3ddacec4da05bf7d535224059fa9bf766cd0000000000000000000000000000000000000000000000000000000000003e90001f8b08000000000000ffed7d698c5c5776deabdec8aeee6615494994284db4008d445112a5eabd7bb44c5164935a488a14176da3a5578d60461c8bd43893c5002ec74860208693c040123870128c81208013600c1bc8822446123b8963c488000307fe6104486c04fe11c0018c188831c1247ac33a555f7df5bddbef759ddb005de2d4050856bf7bee77ce3df79c73cfbdefbef74ac9ed526afe4bcb085ce30062d7eacdff6bbd956947ac5a49c819ec846af0eec1dbff8f37ff1e82fa61c7008e8f0b59bcf0976a0bcbe349779f1de59f1d6f62c6d48f6146c0afed6be27c00d468e3735fd23295743a07b6d9dfacb7df33d0262d5f076c6b1f536f9f8ffb005264bd4d1f4eb275653677aa91b48a0fdfb90dc33edd88d2af19c35f8983df00f2f73371f0e70cff6c1cfc59c37f390efeaae1bf02f8a508fa7fb5899ff86100d70cfbb538bad932fc73bdcb3e5dcb90fd3cc8de037e2d0bff421cddb4f05f008f237fcb6e2e367ad67d26f6a538ba9937fc37e2e02f1afe65c0f7f3d999d600d85e8982bfd0d2ffd538f8ad98792d0e7e2be6bf1907bf653f6fc5c15f30fc00b7e3e0b7ecf39d38f8ad1cfbdd38f8eb86ffb538f8ad9ceabd38f89b86ff7e001cfcd6bcf84114fcc556fcf9300e7e2be75c8d83df8a3f6b71f05bf1673d0e007e2b3e6cc4c16ff9ef661cfc35c3df8a83bf3191dc5e779e69263d939fff3b00d0c4fe68f3d64bd76facffd085cffef4dae6a74d829614b83a54d7b1a4a88700daa8a76e7c72ebd3d5f55b2737363eddbc799311429b478c5a06d4afaf7efc00c92b1b8c36ba33b46b9b9fdefcf8c6278c369613cdd6d0fb80de6fdce66bb600a7b09fe443deb83fe497b34dafaabd2fb606e45f2659bdd7c525e267f2b07e006cbfc1745716b256451d8f6159f0290b3e5551c779562f581f3a62bde588f500be2396671fbfe688f58e23d67b8e586f3b625d76c4f2eca3a77dad396279fa00b6a7eeaf396279dafdaa23d655472c4ffb5a77c4ead7b963a3891537efb8bd004f97624ec4c19f0de902fb64fc2d8fd807f4a58cff0d8beb8c5739e9ce356200e448aa6f287fd638b30e7ab119c41a177531c6743cd06fe69f45af7249a39f000ce0237d25e9b6e149d2c5541c5dcc84c66d12781aff49e8f3c6e6da671f9d00bbf151426598f4607abb8fe86cef7e28e9d6f7440656427fdf47d786010fcb0024c871f35b9fac5fb8716bf366b24d0939b30d4c9c05ccf472de6061fc772b0058ec2779b28cda74372e64ad26dd0eb5d968d36539dbb8e0a3b0b61cb12e3b00627de088f5a623d67b8e58d71cb1de71c4f2ece3db8e58fd6a5f571cb13e7400c45a73c4f2b42f4f7dbdeb88e5695f9e3ef4be2396a74d78c6555bcc465e0400adf2e62516abc3e47284ea30513d05fde7c2dbf8d8a7746e3f576ae3321dcb00837913267b59394392445f18b40e074ec6c16f2d3c26924e9d729f2633746500f5ea7fc3e23ae3b55b1beeaa6f6a91544dbaed92175c0a6ba220d65e6e1028001b9f0ac8aafac10becd0a2157562f49301b990fe0765117a2fd1ad34da7a60001bccbb08bd97ae652d427bdd1c3239d3521558b6a0e6b5695aeacdff6b3d9500c50d9ecbfcb06f1f2c633b70927b33721c585773a915ab43ffd9477507a08e00e7e70a60d9fc6c755568b79fda1d0c601e0a601e0ec8795700f36ea81ba7ba007ba00e7d8c8bca316cccd2fe7dbd408eb1fbfb36b7e70396e74edeb7b103ac00a1f9294fbe6ced93a43d46a8c3facef431c31722e7781beceb5894af2b7b4100fd6141b9d331199b6ae3321df3447b3f4075380615aa435fad521dc6528b35009647285b2f25dde33a2caeb18d707b9481e763f5bff149b6e1a364ae0819d80066956f85725ee55bbde6fa8a8f9299c7dc830ff6a74c7cca8e7c546e667c8600a09de541e9c1ac83a5761b6c379ab4c70adb9e6eb4eb91fed9521bf3aee66f0075a0cb3196acb19f61e17c43f906e61b6c671883d8362a505774ae365da4fc008e15884fb86e99245aa31f4dbac7cb1ebc2911ff11d13e2de71b9d5846ff4800a92df7c9a6c091c77749f93ceb85f78cb00ec78673318ccd63548736334a750068339c131c00f9f0c11b2edbd9c5e9027681b1c274319174fbe734f8e729f200cf48737d6bdd6afd503105f98f12fd3cd8dc53d5363dfb409e75fe94a0c77e0087d6f9d6b65f73231597389ee13a88e319ae83787e3a0475a8132edbe562cf0054dbb84c67056d93e723e3c1f16da5d129ef909017e739ebfb48a34de73586008b4beda7e1879bf866f35c46a01ee95f6b02f0bc6231acbe4339b71657a7b7006657b756e7573736e6d6570f117e02bae303eea6db31a0b57691e7809992900053ad178d7f99647596679ae7519387f563ba9c4cda7678fdc6eac6a9d56fdc00fcecfae610a9124fdcb33a118ebbcdaed8323fba56a2bf87a89db99132556c00379cb4c3b4c9fc164c2d57c96410cf520bab1b813a4b53528cf72904a0ac21005597482ea457e9af5a8af1748ff2bf9e213f62a0fca384b1067afa90f484e30083bad8c8a043fe48374c3cb9cd70a2a760ece7b068c7b41c22d4b4c92122d200f6f8a64abfaca8a991d3b62ac9952449ee290edf4351e4f61ea610281b626200baa46e3b70baf419d8d7f7c63af91d12f2e409ad69e165264e1dec2f871df900e0362ba7e87739f2c12d5bdecebddb910f6eff727a768f231fdc4ab674c7fc00f308d4595fcd3fef833ac7a37aaddbef4793ee6275f7036fb6a907a02ef42c0099f24feb5351ffbc17ea5036c444ff44bdde0bf548ffd74a6d593eae76f2e7005b6438bfd916f270d23d4e4792eebe1c493436b61d17758e633ea7c69ce78300fbe3f09ecfe337c8bf4cb23acf4fad94f17e9287f5533065443340f8bb08ce00689016cb5d2012d28fd2df59669527651c4fbaddc4732730ae39d796e29a6c006dddf01f88823fddbaabf3a538f22f1bfe9f8a83bf60f80fc6c1dfe050fdcf002195fa79983690c6e4488bc91727844cd7f28634e35f4e624ee9ed907694e40061fd0c917e1e8a23cf5689f0519e87847e6c2c1f167586f548f36f9ce691fe0021e823d2e36f6b8fd77eb1396055c24c0befd63f2cfa83d74cbfa99dfe421300b722fac373851a37351555457bd621eed0f1127f52f44ded7272dd81405d4500f48b977269b940ed0e0acc546fb5a1365e960d29dd84c6e821214725e9d6e500c339b042bc1f11f488b1d2e8e4fd10b47f24075688f7a3821e314e373a7963005f1fcd8115e2fd65418f18671b9dbcb1af5fce8115e2fd98a0478c338d4ede00d8d7c7726085783f2ee811e312f1c6be3e9e032bc4fb98a0474c9bfb2b4977005f8fe5c00af17e42d02386bd6aad22e47a22075688f771418f9896735692ee00be1ecf8115e2fda4a047cc2f116f94ebc91c5821de4f097ac4b0575256845c004fe5c00af17e5ad023a6ad232a49775f9fce8115e27d42d023e6fdc41be53a0091032bc4fb19418f980f126f94cbda8e8b769edbad26ebb305fb5613f4cf0200cd09eadb335057232c4fde69b1578856926eddd5726085784f0b7ac4b4355f0025e9d689b51d17ed1cd717ad7c7ea660df6605fd0cd0d4a86fd350676da792006ebd96a8df3371fa9d7b5d65fccb49cc71a805c701f5c3b7306685ac5551c700399f1abf59c147613dea88f56547acc71cb11e77c43ae688f58423d67147ac00271db19e72c47ada11eb1947ac138e58cf3a62f1bc8371c331feb64e8879ae00c150ded01a4cb57b94fa392cfa1f5a7b2a5da93528e7146aedfd88e87f55b40037bac863351bd2fd4ed7ac6aacd49a55ed69b10e8bee6961fbd09e161ffbc0005bf7bcff84471c1ea23a3cb9f730d55544bfd4f18447a90e4fee99de704f8b004f81ce36afc7bde55babf1e932a5abdddf47bfbd76417e49b2b7fbe8bc0fad007411c79fe7a6f3eae211d2c5c39174119a0bd43d85503c7a58d0e36dd58f36006f9dbbf1d14bdfbab2fa113f04c727984c9c29a2e33bdb0f65885527ba47e8006f73e9ac875e7178941cc3f437d3d7b7a1c7df93e27a5a2a4976e82b515d9200b48701af856e29f083d4fcd046bdf977ada7b2d87a80f6cb51f0676639dcfe00ab66a7d390bc42a177228a0c730beaf60a87149c8afc5c7826777835fee5a4007bda8c11520e903cac1f5e4e5784ac5551c76358117c2a824f55d4f10b5f76008aa5fca717b9de73922b2dd71cb12e3b6279f6d16b1c13e73e5e75c4f2ece300d71cb13e70c47ad711eb4d47ac3547ac771cb13c6dc2d31f3d7dc8d3263cf500f5b623d6aa2396a7eedf72c4f2d4fd878e589efaf28c85571cb13cf5d5afb100d0535f9e31e7072167f2b409cf79db4bf7e96f5ebff622d766c30f6bab89550069d6e1fa681f61e21a05b75bc793eefe7aae090dff601cfcd6367935a047e400af8e3c9632fe372cae335e65c2f2d65da86f283fdb086e61a30eb2b0aa05b100c6455d8c31ad04fa8dfca702b2aa7ef07a5deda5a9fd0aa33f18900be92b8200b7b5351de2d6bda30e67423a445f34fe3b7989a1e9ed04d1ad34da7a601bac00666025f4f709ba360c7889a05763382164327a1bdf31418f78fcd4e7af34070037d5d5f56667f8e587d83ec5ffc3e6e36536e67ccca1defcbbd653999b353f003846fa41de7894c1712f32f717d78c7f99648d153bb73bcaca7b91c785ac550051c763a88e9a1e177caaa28ef3b15eb0bee688f58123d6bb8e586f3a62ad390062bde388e56913ef39625d76c4f2b4094f7dbded88e5a9afb71cb1bcf48573005dbfd9ea3547ac3b7d1cd3f2a12396a7be3ce7a12b8e589efaead779c8535f009ef1ded3be3c638ea73f7ada8467cee4a5fbf437efadf522d766c30f8bf7d600504ede5b7b5cf4272de3cd6b71d65cedbdb527e3e0cf86f4a81e7d9b123a280065fc6f585c67bcca49b7de63ac0f55df50fe90edf26301bdf881618d8bba180063fa44a0dfc8bfd775b13a8eacd6df46ff64402ea4af08ded6d674888f34c400d85b533a445f34fe3bd95b33bd1d27ba95465b0f6c83c733b012fafb385dcb00da5be3f375334d60d36f24df94c7998d97bad7c167238b7ea807db4f6460e1008b45f165c34713adaba526713aee37aa9d98458fdc2a1f420c7ee501f601db0062bb5141bb9fea8cf645e8cba7cdbea8a3fb365e91ed633def5c62fccba2af0031e61235aecaee4c3f8fc791672d64372a57e17d631e3b8c33f87a16a47f1c00fac87109e3e4285d3bd71cb86ad23d37f0eb59d46b0cd45c926eb79f19eeec00db4e7312c4ad26ddbae117ffe3f1787cf1ffa5e1cebea817ffe3633a47a01e00e9ff70b28d79a5895911edb35ebb51027e78a6fe74a393dec6d3ee8f300dc7003da37f1b62c56714f78e8a3e1f09c86c98f8e65794f97c43cbf03ecd5391ee0031c879ca7855485e1e1fee8b1a13b6bbc7841ef2bcf92f4e9c99cefd488bf100dfad37ffe57dd54a5cfbb8fdb8fb76710be5b5b17c42d41996e56ee843487f000cfa88f4f8dbdae3b51b14873166731c56792f5ec338fc31c528ec0fbf022c00345f216e55b4671d72dea3fe373e7c8df92899437eb7533e888539268e2b8e003bbebeb09a74d2db7860ec443be4d869f47f1ee2f79f09e47a38b7fde8f0f600b24e08594789feb7606efb71b21b3c4360e3a1c687cf7d1c157c4b449b24dd006761d47c64728e65d05732faf593a0d3eb3427a22ed4b8f2f91dab1b11fd4a000b8fabd1ffd40ec6f5a787b79715c795d71646ffcb30ae7f9dc615f5171ad7002ad5e1b89a8ed49ccb635e74cec5f647037ceea63a1c437b4374e8edd371d7004cebb9e76a5e33dd13459ef09a09f5c373f56371f4d39aabd5e3ad2aaf8ebc00869b55b940d65e79562ef018e810e9f1b7b5c76bff88d64e98abf0de9fc77a006db7b142f90b8e691aafbebd4beb488e118f39f2516b52958fa1af639df1e1006bcc07db1b9df293f45fbdf977ada7325b5339bc23feb4ba87e3883fa3f6fb00fdf0e75aaf3cc07d759e73e2ec93cf2fe49d738c7f99648d35e76cf7aa453e0013f8b490b52aea780cd5ab109f167caaa28eeffdf60bd69b8e585f73c4fac00011cb535fef3862bde788f5b623d665472ccf3ebeef88d5af3ee4a9fb6b8e58009e76bfea8875d511cbd3bed61db13cedeb4347ac0d472c4fbbf71c47cff8e500d9c74d27acf437e7f2bdc8b5e524575a3cf5e5994ffc20cc439e76dfaff9d7001547ac771db106f9d7ded9bd676e3298d38a61f56b2ed7afb1d03397f38c85009ee3e8a9af7ecdbf78aff34eccbfde72c4f2f46d4f1ff2d497e73ce4e943fd00aa7bcff8e5b997d6af7b439ef6e599fbf66b8ed9af7307dfc7f2983bd43dd40047802ef2f318b3861fe9134cb3215da9cf51f1333356affe372cae335e65c20072eedb74a86fa16797d0a6f8d321bdd8a7618d8bba1863fa54a0dfc8bfe8bd00402f3f4b7f1f75c49a22acd0334c8865f4ea136bca4e2a82b7b5b5b1c54fbb00388eed4c686c314618ffc9a4f8f359a6b7ab4477b6d1d603fbc6d3195809fd007d95ae0d27faf9ac4ad26d6b59e7408d2f5f0b9d777b22c0e79e1ef9dc939300cf17b93f8c6de7acd4e776e39e3359588b7bce6461493d8bec873fbfa572080047f967d47ce3873f37af72143ffcc5259b9ff09396162f8cf7b370dd2fde2e00cce6cd698c7f39891aff5b39cdb3240feb87cff9d484ac5551c73652137c6a00828fc23ae1849516be67d50bd69b8e58571db1d61cb13cfb78cd11ebb2239600a74d5c71c4f2b20935670e6c228cf59e23d6fb8e58fdeadb9ebaf7d4d75b8e00589e7d7cd711cb731c3dedfe6d472c2fbb4f7f737edf2f36b1e988e56513e900ef41feb537b69a24fd39d7a6bf790d3b888561ac2d472caf9893fee6bd825e00b0269db0d2e2e9439e31da734eebd7bcb05fe7b42b8e58fd18efbd7dc8535f005e317a3077dc1973475a3cd7569eb1f04347acc19ec2def990a7ee3dfbb8e10088d5afeb214fddbfe388d5affb859e79ce204eec5d3e3188137ba7fb7e8d13009c7fa97758570596d1abf7352306bf6f04d7004fe6c00af1deee3d0e2b8d4e00deb837fa540eac10efd059c0b49c6e74f2c6be5adb71d1aedefcbfd653999d009b127296886fa4f3929b25e2673ac26bc8bf4cb23acbd33a0fa0ceaea973730071cf4bd4364a848ff23c2bf4a3ce27f0bef574f36f7c1714d23f0b7d447afc006dedf1da37476fffafe2e34ef7d7d2f72a7da3891bf75ccf7cec73378bca5600fcf0e796c785de1df15b71026d80e3c40c5cf7f383e9f9bc71c2f897936edb008d112766481ed60f9f1b9a15b256451ddbf8ace0332bf854451de7d13bc54a007f3fd18772a5e57d272ce5fffdd2c7cb8e58fda8fbb4ac3962bde988e5a97b00cf3e6e38627de088d58fba57736f2f5836cff2fb37ad3e2d919f67ca3d2ff2007bf3627d67aa44fc50afea4cbce9ee8490b54a7569e1f773aa3cfd84e0f34500c42ab0e69b59df9a9e9ddf5c9caf2daccecd6f2cccce6ccc2cd636e6e6b7a600a797a66796e7966667b7d6e79636966666b7661667d6a7045fb6d9486b9ab900bc36cb67c023ad418367c0d59899ee6684ac55aa4bcbc5469b8eeb86c5b5a1000c2c8e23bd60a5c5deff1d716f617e2ae9d62ddb599c35c3ed67bb909fe90800af21ff7212d5ee836b06d44faf6b86b873ce5c6d5cf4c307bbfd7ceeac3f7600ebb9a0397fecd63341f3bd63cff205c35ef0977bceb0177bc7dee00bdb7d3300e0b79afb3ae6174b4d9aac6f063c02f548ffe4be36e66f37318df724f0e6b8007300aefbf9c74c2d6fdc31fe65923556dc3940f2b07e38eedc2364ad8a3ade006fba47f051efe9af8a3abef7d10bd6aa23d65547acf71db1d61db1de74c4fa00b04fe5bae68875d911eb8a2396a75c6b8e589e76ef2997a7eedf75c4f21c47004fddbfe588e5d9c74d27acf437bfb7b617b9b69ce44a8ba7bede73c4ea57df00f69c3b2c9fb0fbf4983ff23787d1961e237ef81d4bc4b7bc34d6370f0dff810038f8adf7e4dc9f74eb18fb64fc2dcfbc17e84b19ff1b16d719af326179eb2e00d437949fede77e9087dfcda3b0ee2f88352eea628ce9d140bf91ff544056d5008f23a413c547ad518cfe4b01b9905e7d6bcdda9a0eff14d479ef43658df7970080a7f1dfc93b864c6f0f12dd4aa3ad07d6fd03195809fdfd205d1b063c2cea00dcd601c29aa43e648d6f55b437ba3c6bfb38716066356f5c32febbb5b6bf3700a75ef95ba4d8b62aea786d5ff49b8858c76bfb5eb0561db1ae3a62bdef88b500ee88f5a623d6877d2ad73547accb8e589b4e58e96f5e97f422d796935c69f100d4d77b8e589efeb8e688e569f79eb1d0731cdf72c4f21c47cff8e5a9af0f1c00b1ae386279eacbd3873cf3094f7dbdeb883588ab7b1757fb3507e06f3a78e40000b676c375d35d49671dcac0df30bf1beaee2559ee15edd21279efa2754ffe004b71f05b7b230f24ddfac73e19ff29a18352c6ff86c575c6ab9c74eb3dc6ba0052f50de567dbc2fd15d44116d60305b1f6720f1375cd7b984a56d58f238e3a00b997b08e08acd0de59deb1ad24dde3696d23fb586befecde809e90ff4ef6ce004c6fc789ee74a3ad07d6f7fd195809fdcdeff52fb2775625aca27b67d87e3200c0e7be1ef9dc9793cf17b93fdb9d65face98e699759689dff36df4ff6fac8d00f94b639d7dc4f6879224b3ff87a90edfe3cf733aeeaf1a9df97405eafc7c7a00ba752eccc6138bd51d04de13547708eab0df5c86e96fec531a23ce95dab84c00c7f2a00e5136c4c4b1567a1d25fa7f3dd696e5cf553566093051ce954627bd00e9722c69f71b695806a3ffb720c367558d3992d1af4a06e67f051bfef5318d0099084cd5af83d42f96a14a3218fd7f847e5d07a648637f632cb0b3dac6eb9000e095645c63db38945157942feac7ae1dcec1b724ead896589fd83e4be76c4b0046ff3b015b9a1232a03e78dc0f900c4c73906430fadf1532a47ab618b27ee3001bdf3ab5fa8d9b9f5ddf4ca88cc06f0ef56aa87908a6044e563135a4d29abb00308efd1d3213e58e49c6b5ac619f84eb1b9bd7376f6d66286888c02632980d0025ba702cb57669893be7e47f16c0f897136db7751f79a639ce9b3cac1fbe6f005715b2aafcc8063734cfb3afa10c07840cd564fbd87120677f2693b661dfbc0075e3d32c9bc3395cd9dc6406ff92689f50db92b89696d41fffb0e994e3c4d700d90ed6d5bd6c2b2af728511df6976d857d09ebd05646a80ee78b51aac3b965008cea0e43dd3eaabb0beaf6531daeabc7a90ecf5195e1371795ebd998a5fcbe005e6ae3329d95b43fdf6b762a6d7ba7ad61186b28e95e9ba4e56ce3f6ff66fb00b867e167fbeb3593c7d6d5a3a26fc87f94e8cb4d234bc7f729ca37d45e888a00692c03d263bf79acd47e6788378e95e53171f73fdbfa7d00f4a7fa763fd42300fda1807ed5fe5848bfdbed919a3c6a1ffa01c2da4ebfa71bb7ffef77fd1edd0043fda27f3d4075283bc73ba5fb23422e15ef8e04f8dcd7239ffb049f1056550060e13ae1f344f8e36f6e7e7ae1c6add62baa0c12d59ad0ef71ba7694fee6d400f7ee0c5179adc1793c1f99e5a3700fd1df07857caa981c585896e164fb62a6006eba3a06a6fea364ea6a6ac3e9c8c2256fc1615bdc8233f35a063a36e365c10013af85ccd8e8141f3e06fe15d1ae447528c3570232607ba3b310f71cd4f98500b8b956887bbe8997b59df91cd423fd7c20c4591becffc3a2ff2c03d263bf4d001ea57b6b3b25789732fe373e7c8dc70565787497f870c8c63ab675a5e7e702007cb0fd73bbd49fea2ef1a9ec129fa3c4e779473ecf03cdd42ef1e1ed04ace300b8a6fcf4f9001f6ccf7ebaecd81f15a763eb8d1ffd7901ea708e33395e147200588cff2a5cf7bee58dfc4c5ed681f12f93accef2b4b6c6be4af2b07e78bba3002e64ad8aba47e137d6219fbae0a3b05e20195e8076bb347e333b1dbf17e2c800131cbf17845e8b8edf1ce9b51ea51f73d326d7c9a4bb58dd4bc09b6de114d400a1af70515b57f5e6ef346ffaf16a1b97e9581eb43193ad92748f37d2f1b88400c6aa2ada1bdd78d2ad13c7f19865bd26a2ffa781f73cfce6a2746e72a73a1f009b6ae3321df344bd9ea63a1cf715aaab43dd19aa3b0975679bbf2b49b6cd9500a8cefac8d7781cb1fd4b2403b6eb754e54322bbb7c91fa53d42e5f147c42b10079a7fd513287e6f09df2c1fed4894fdd914f1d684e129f256887475e7e665f00bb0db6c33522b6b56de551a2ffb9c936e6df68628e27dd7eb097b1847d630500ead8cece401ddbc659a8abc36f2e2a3e992ed2f874ac407cc258cdf12994af0044caef72e72bc67fb7f29517499eac58a3e2b7b555feb440ed42397e3d4e1f0073ebdcf8ed568e5f2779583facf39342d6aaa8b357d359acb1db88bf0eaf0a00fb0ec52fc3c3f31bf68ac4b4bcdee8c434fa5fdd959835bd109a978df7a94800bcf3da8ff15739b0c95d1675233dc8babcbcb9393fb3b53a5d9b9f5d98dd9c002b25ddb17d585ce3fdc5d3825ebdcadd74bd1247d77316d3871b6d7c8cdb69001981ba5354370a7526633a67fcad6aa7fca723c99f47ffc8bf2ae82f401f8a008ce5a1a4d3d6d01f2ddfac431dbfcebe2ef8d4059faa686f749c37215d1a7700fe5bb993a7c987c72cf17e4f56def4fb1477e2acbb161655aec471e77424de0079e30ee735288fc95d1675bdc49dadf5a5da6c6d61616373616e6d7e6e2b140047f01ac79d1541ff8ca0375d9f89a3eb19157770cd9a9611a8e3988471c764005471274edc5c98c9a37fe45f15f467a10f45c6322616c6030fac033bc4b2d800aae6f47edbfbe1c736d0e68e531dfad3935487eb353c86c765bbfda49f2fb000877712ea38aeed7eee97fffe00c7d938b6d05e3ba89c40ed7585e604e51ff800986bafbe66635949bac788f7eef2e6386a0fcae8e2cec773f3ec4f58943ff100de08fa13da0717e54fd6a7a27be2a873934deda5221ddb529ebdd4505cc47e003b8ec792f5f1e5a4bb58dd2bc0bbe89eb8c95d744f1cf5fa0ad5a16dbe4a750018a75fa33ab4ab73cddf95246c5758677de46ba1bdeab32403b62b65fc6f7c00f81af351322bbb3c4dfd296a97a17dcc587bfc59f9b8071f95cba9b8d42b1f00b445be3f538776b827fec8fe761b6c877be2d896d77646ff97614ffcb1266600dcfcbf782c61df7815ead8ce5e833ab68d7350873ae7a2e213ae338aec896300ace6f814cab1e2ccabf9732ce3bf5b3996ca7d4239d68a9055f913df7f566b00e015c14761d9585692ee31e2fb894573b917457fe2ae63e71678bec3a2f22800bec7f432d415cdb170bfb0488e853a0fddaf8e3197d97860bf1dc76399635f0022fa8fb1af688e6572f79263f59a4729bb3adffc5d49c276c573c6b0b816ca00155e2619b05daf73b89259d9e50af5a7a85dae083eb173acbdca7dce38f241005be47ca20eed30c7daa01ccbdae5cdb18cfe06e4581f518e1569bd563896b0006f601ec576a6f228ab3b0f75a8732edbad018be4586a9dd76f7327ef1362bc00e07d42cc7d799f10c7ace83e21ceb945f60943eb54150be2ae1ff2e7b0c6bf009cc4b485760e7b86e461fd700e7b56c8aad6ecbc4f58749f21effa3fc619bf00c86bc945b55f6245f91aef13a2aff5b226fcf11dfa93c95649b2e7f752d26d004b79d62e6a0eb7f1c07e3b8ec72ac7a944f41fe796a239acc95d3487f5cc5300955d5d68feae2461bbc23aeb235f0be548bc8780ed4a19ff1b1fbec67c94cc00ca2ecf507f8adae519c1e74ecd2d63ede372be5687761daf8ba31cd6dae5cd00618dfe2dc8617f8972d848ebe1c2b1847da3689e6a7517a00e75ce65bb357600911c166335c7a7418e153fc7e27dc2583916ef1316cdb15e147cfa2dc7e27d00c2418e35c8b106395632c8b17ae0d3cf39d61f39e5582721c7fae3418ef5fd007207e7589b796c14f9f75b8e959aab7d4af0a3cd5b173f5bbbfef1fa6b9bdf00ba79f2938d8bab9fdefa78f5fac98d8d4f376fdec4deb035706fd90ad42e6700fafbb8b88e186773f682bd16e911c33cbe92745bc5cb39b042bcd56c85182b008d4edee831afe4c00af17e55d023c6e946276fecebabd44edd5128656033ef00903c21f95f13f488713620ff6b39b042bccf097ac438d3e8e48dfa3997032b00c4fbbca0478c4b8d4eded8d7f3d40e2335d229ec2cdeaf65f40d65be9014eb00e3eb821e670e8b3e15d18fd7736085785f14f488f146a39337ca753107568800f725418f98f656b64ad2ddd74bd4ee12d4215d1636f20ec91392ff0d418f72007c2920ff1b39b042bc2f0b7ac478b9d1c91be5ba9c032bc4fb8aa0474c7e310021f6f50ab5bb02754897858dbc43f284e4bf2ae8518efb03f25bdb3c191562003a66301b25e267fdc06bc87fb732aabce33045bac4b65551c7ab44357e5705001f8575d611eb1547ac971db15e75c43ae78875de11eb8223d64547acd71db1002e3962590cb59886e3fa34f15139dab9001f6ccfbb5ed8ae94f1bff1e16bcc0047c9bcddaec53be3ed3668836ad70263ff28d13f09bb16ef3531d58e163f490091751a7b277a567c6cae411bf68bedf3ad27053147b0627538cf2dc26f2e6a0097c3e42eba0b8b7abd4275186778bec6b8718dead077df6cfeae24ddfae59800a8f25ebc16b2e38b2403b6ebd55f94ccca2e392e17b5cbf3824f6cffe71df400f38e7cb03f1788cf05473e688baf139f3ab4c378f66314cfac5d563c7b10ea0091fe30c4b3bfd8c41c4fbafd602f6309fb86ca4bacee1ad4b16dbc0975a873002e2a3e992e8aeec262ace6f8a47c623ce9b6bdbdb8d36dfccb49b7cfc55833006cb7bfc36b860b4256e54f3cd7aa3d990b828fc27a836408adf9228ddfcc4e00c72ff69a4f8d5f68cd9777fc6649af17a2f4636e8be77e2c3c2763dfac0e730074de0f4c483758b04f45effaa38d996c2a17e579bde8dd556ccf77fd23e59b00d3acd744f41ff7638adef5df69be897ae57880e37e99ead06e791ec079d6e60036956f722c2b9a6f62fbddca374377fd397f2e6a97a1bbb1b1eefaef565edb006ff9e6af15c837d3c277fd8dfeff4eb431ff3de59be8cffd9a6fb29d61bec900b6d14bbe69ba289a6fe23cc47bec685f48379274fb1bdb7692689f451cf6b9000b19fcd372aed1597751b463d9d47a3911d74a02e7dc36b25d14b231ee50a0001f597cf2c6c213247bd1587842f0c993a7c699bff3af338cff6ee5a979ef4d002a7fba483acfcaf9b00ef95c127c1416c7fed03a314e3e5c9bcb3b7ec67fb700d6896afd7642e87537ec3b6b9c5702f2c499e36aadb7f4a97bb86a1d9d7eb9006c2ce9b621756f9ce5be0cf8762d6b6c14ef902f22069f415ac990330b2bc4003b74e6202d2b8d4edea8a34b39b042bc43e705d272bad1c91bfbfa46463ba60053b26cd76fa64dc475cbe7702cf8cd0297881675c7f724ad3f4319325c827a00b43dee4b49d02b3cb45dc653f90e9f335811582abfe4388d39e45ec469e35f0016fd8e11a7d53d4ad40fc6a17d49a7aed96670fcd479bcf4f76ba2af1c9ff200ca64f4d7043d62707c42f9afe5c00af17e53d02306c727b42f6b1bb2cb3c76008372f17ac703eb4d072ccb9fd4d9a06ad23d1657a90ed768bc7e7b4bc867fe00fc365cdf0b7f36fe659235963fbf4df2b07e943f63acccca31f2d0bc0d7ced005afaef9d9c3219fdbb821e31d89f718cdfcd8115e2fd35418f18eccfef407b006b6bf3a9cd994f37df789ee6714f347ff33e0efa439efbe2b81769fe90e2d70002f86f07f0dfc9c04f8b7d0502f1953fd793ce3a758f4ff933ee51a14dcd8300de96037c5f0ef07d35c0d7e622c41fa5bae74086af06645809c8702120c3c500a41b7f28e9f639de2fc67ea3bcf637f67d48c8c9edb10ee9316f353c75669d00cf2be19ccf73ec39c1e7a2e84b89fede9fd10fc38b611bcccfece3b8e0c13900f7f9725beeff03f78b90c630d212f7a9aafc7396f1dfadbd9ebccfa5f05361006a7cb18ecfa1aa67385e157c14d659472c3b873a2eea1cef95aef1937258d400bdb0a2f7e64ceea2f7e63c9fbab53a3cdb6bf3898a45bdda04b6e7b70ef2730043ea7fe3c3d742f6c26fed564f9d96a80efb7326c047bd89604ab4ebb53ffd00f0a46cac372bf2d3a7756887f7e6be495fbeb17679efcd19fdff807b73df6a0062467ebabf702c61dfc05c33cf53b72acfe567f7b0a8f8846f0cd8e959308e004fca27e2be35b1369f77de36fee5a4dbe762ccdbea5956156bd2a38bf68cd100479bb75edbfcd6b5d5eb1f6facdefaf8c6276f6cfef0679b376f6137107a0400ae633d96116267742b44f76aa39b0ecb6ebdf0a0a8fa4269126258b850fde00050b807669cfb5663bf9ab14a43acad9a165e82df59e3177a493062f12d69c4007e96f8bc24f8bc14e0f3ac9039f28b4a0bbfbce759aac369aee80b5dad4f830097f7b4c663f0f29ea45bbf8397f774f219bcbc67677c76f2f29e5fa5a5c24e005fdef39bb054f877b454c038b397b1a41f5ede63ba28ba54a8431dc7a7974400dbb8f36afea582f1dfad0fa9a858a3721215db796b1deb4ec26f8e0f79b63f0010ebb423d62947ac7af3b7e9063fac6b3a4cfddb3eac6bb11f75b344f29c1400f29c0cc883ed59e72adf5c1258467f4ad02306dfde437ea772608578ab0fe0002006afa1d02fac6d25e9d6c973cddf53f4b7d5a7a55f3f54f95c1c79821faa0044fdb0efe7fd5025dbb4c7872ae38ed1dcdc94902ba1fee3dcc02f86c7b88000e3c645cd71d6a7a2eb1ed433e79728038fc773244fd6b8ab186374fdf6c18c00a2eb1e5c6b1659f7a05e3937c50f1a703e89769be7c3936a9d80bcb1cefac800d7781cb1fd6ead139ea3fea00cfc0189a276f982e0138af33bed8f9299c7dc00838ffa702edb8f071fb445fee8611ddae1bae78189761b6c9777dd63f4ff1800d63d0f367f47fe3870e158c2be81fb126c67b8c667dbc05b85a8732e2a3ee100478577baeee1f814ca7dd0f6f622f731febb95fbbc40f264c51a15bfadadf200277e31bccab14e093e0aabdefc3d9e748fada37f14fe883dbfb03d6b8ee2a200ecbcdefc5d34f7417be5fc3ff61cd36f1f332f9afb606cd969eec37b3cf8a10081ac0fe6612c0de545ea83a99cfb145d5360fbddfa087428f7e10f3b14b5cb0017059fd8b90ffbfd8b8e7cb03f75e25377e453071aceb1707f02739f7729f700b17698fb605bce7d8cfeef41eef33ee53e71e6dfe2b1847d03f322b6b3bc1f00f1a8c36f2e2a3e992e8ae63eb84ee5fb1126fba8a0fd0ad519ed0fc178fd5c00f3b7da635a4e3aeb96a1ee79aafb0ad42d51dd7302b34438687348ff14f5c100e83f6dca9deaf2bb558d3994e89863766c368a3eea67a3eb3593a72efaf83c00f07c91fa68f43f027d7c8a7288e146bbbde9bef9d68464a411a53fd3a91cdf00a363c5986f8e025f8ea3c3829ef74aeb821ec7c674a6621ee7a75f1158cfc300b595c6edff77cb064c3eb401f419b601a3ff899c36607add0b1b40bde6b10100a4671bf8aaa0c7b1319d5593ee713f49586a2d8476d10f3680f363960dfcd5009c36607add0b1b40bde6b101a42f6a03bc4e451b7889b09e17583817ac90ac00863d96e8f908e72ba4ff5918a3ebd54ef9d49c6c756a4ec579b94418d88f0900d18f29aac3b629ee6f8d76ca6f39dcb72127f865cae122dd3b6ebd2ac1721a00957722ff51a2fffbc22f4ad406f5159a7b421f7b51390daeefac6dbfdd3be0009c37ef7e1fe7bcb8df57a73a3c5751742f10ef553c93638f046db3443c8d0700fb0afbc5929017d742bcaffb4fc12f7e83fc22e64727712cd55e34fb0dd2ff008b805f9cd9465fec17a1b3aa288fdadbb0b6fdf66146de0747db67bf40dbe7007d7065fbea4c11ea848bf20bfcd8635ebff88d8cfb18c603c72a2dec177521002fde1fe1735eff09fce2f7c82fe23c5ed6f60bd37b965fbc9a74ca6cf4bf1d00f00bf558169e1161bf087d6e49f9857a74b6df1ec7e3fbb7e7a18e7d06cfbe00f19e293e42c37ba617a1aee8e335f8f85f5ebff83df20b7526be0ed7427ef10032e0fe2a3dbe6dbafb03f08b3f21bfc07811c32ff0553cca2fd06f90fe7f0600fcc2f35360ca2f30f6f2270be2e86b6e7d4ac86a45d93e3f5ae669fb56878f00bda34eb828bfc0c7d5f3fac59f905fa8b3e675b816f28b5700f79be417a68f00ef815f54276fffb671c6bec7f00b7b2d46965ff06ba95aaf9e6acaa9fc42bd002eeb3c5c63bfd8ee5360f5e6efd0a7c0e2ea6b7e664ac86ac5eaf05507fc3a00547ccd11cf17795fcdcf8f59abd776e4f50bd35311bf30db2c114fe351c42f005e075c7b4d2efbc5ddf0998563bbe3171bd6371bcbbc7e61f4f715f48bd07c00a15e4b98d72fac6d64bfe8abcf52581dbed66937fce25824bff831fa5412ce00bbfcead40b3979467ec5e73adb7a96ff5c847aa4af05fc27ef6b6843fe86fd00ae377f873e91b997f146bd3e93e3cda2d097daff3e0ffd49cb48234a7f36d500fe378edb28f0dd6e8cd2523426f2eb9d704e7e9dea429f92aa0b4cfc241aaf00f94fc15c7595e6aa7e5df39f0df8da60cd7f67aef9afd25ce5b5e6ffa3fdb7007fb35fbc037e71fd0be217ef0ffca2557e50fce27a24bff80ef985f5f387c1002f7e82fc22ce7b05da7e8176affc025f8584f49f05fc42ed91a8b399213f5200e7c72aa4376cdb6fef61e07d2bf49997a8ced367f2fa05bef721af5ffc04f90085bae755876b21bf380bb81be417d6cf9f04bff859f28b48af629c651bcef2000b7eb5a4d1ff54c02f541c3905d7d82f941f61bfebcddfeaf573fc2ac338fa009a5b9e12b25a619f51b11d7d86fd42dd1bdca9cfe4f50bd35311bff859f20b0075efb80ed7427e7106701f21bf38d9acfbbbe017bf487e81670b62f8857aee004b9d15e0f3013f1ff00b753601cf36b15f849e154779d473ead6b6df9e276600db47bbe5fbe918ebf90c8a8a0feca3ac132eca2f4c4f45fce217c92f4e120f001cabb4b05fa8771ba4b83fb3eff66f1bdf2ad03d9e74d63d007547934e798e000979907e82e89f001914bde18d12fd3f03dbb7336f667fc7a1bda3bfae99cc004f824cc3a25fc74966a3ff97017fb536a8b7c7e01afbeb93821efb6df25448006fd8769cfef6d5d774ebece953425fc7843ca344ff6b39f7deaad09fb48c3400a2f4479e3dc5711b05bedb8d515a784c9f12f43836a6b32ad1e3f85adde35000779cead0671f2019aa4286bc673dad6deacb3fdd0c7895a47bbc399ea06d72003c517e81f41c4f9e0419147d966ffe4e209ea09e1de3c996c9fc34c8a4e209003f8762f4bf1b8827ca962a708d6def69418ffde6788276696dc7e9ef58f1e40084d0d77121cf28d1ff5ece78720cfa9396914694fec87882e3c6f12434466900e1313d21e8716c382e9c80ba27a90ee3c95354873efb04c9a0f281bcf1c4da00a6befca3144f90eecbc4f371c113e7d2d38ddbff8f0b9963dc7bc298339c7400ebf309a847faff1df0ef27441fef836b6c0bdbc5518ec918afad6d647dad8500f4f5580e7d7d37a77f4f407fd232d288d29f75e5df689becdf6a4c91bee898009aceaa49778ce45c027de871e23321f8a03fb10fe35859dbd4872f357d38d500cb9952679b21c06b56b5ec6d18ae3b8e4fee4f84d8b532c9ea2c4feb3d1ac30049b7be513ff6db74372264ad525d5aec9de02551372cae0ded325625e91e6f00b679a59be1001f1eabb44c89766c73acd37af3ef5a6f25f73b2b8d7f3989ea0003d3a1f1537a35dd8d0a59ab549716b69351c16754f0f9a26059fbb4b03fa600c53e273645b4689b1c03b7b3557b8f421a5b31965692ecb131de63cdbff1fa00a8907794e84f342752f38f7d246bbdf977adc772087013e2352efae7c8bbf5008cdb58d25da644bf79dcf7431d8fed38c98c7565a8e36f406019a6bf51172900efbb0eb67199ce8ab29112d58d897e581d8f7b5aaa49b76d8f521ddaf618d500616cdb4775e84baf373a65c6397138e91ebb3c730762f0bb58550e90fa1c8e00570272d69b7fd78a96998df585cd99c5a5dae2c2f4ccf206fb00f6857d9e6d008fe5629ce100765560599c34df433b2e257e7ecfbe80321a6f5cf339aec37300bf4fcdf897936ebf8d3127abbc1bf5c3316652c85aa5bab4588c2f89ba6171006d28034bd9c3002b1b2b2d9c77f4823518c7c1380ec6d1671cd5be6299f8a800783c11e083ed8d6e4ab4e3790efbeabd7f8efcac1f780df9979398f36e7b9e009bcca957d3dd9490b54a756961bf9a127ca6049faae0c33637c0cac64acb4000f703dd7fd1b06c0e5079f44ee71a6c3f19e053ee914f59f09912ed4a19ff1b001fbe96157b7bc1b2fe1f001ad6f301c2e26b213d1f20990f38c86c581547ac00aa23d64147ac430e582a6f2b531dda92edbd589db20dabab04daa14e5fa6ba008380c97b50d8e7579aedf66e4f22ffbda93b614f42c5f37e5b6bdcf9eb83fc003677a7ac0f780ddf4bce15036bb7f2843b2deff941cae32c26a0cdfbf9e0dc0062de9860fccb49d418351df22fa557ce01b12de71a69e1b553d13c14eb5e1d0060ed19d60547ac814d0c6c626013039bd80e6b6013039b18d8c4c026b6c31a00d8c4c026063631b089edb0063631b089814d0c6c623bac814ddc593611bad7003e4eed4a89e7feea46eee7938c7f9964f595a7bddfabf4aaeea7987e2a71f4003357227c94a722f4c3f7e779ecd27f76ef199f7745fa0af411e9f1b7b5c76b007fa1c988ef7fa785edf6a0e80f5e33fda6f7cd7fa489bb5be738149fc91ef9004c0a3e9ee745aa0199d57da329ea4fd1fb46ea9e67dcfbc5615f50670242b60016a23f5490feb0a09f08d0df5510ffee82f4f714a43f5290fede82f4f7097a00154bcd1f8e421dcf43f7c3f5bd98878c7f99648d350fdd9f74ebeea8d05dea0073f61cd5479bb72edcb8b57913e546acdf86eb588fc568f8ccd828fdcd675f002a202b5e3f9871fd50c6f5c319d7efcab87e77c6f57b32ae1fc9b87e2f5db7006267bb8c969fd97c85ea79be301f507a4d8896c7c3fe6659bdea9388d8def50089a0576ded7ac8b66d5e441be6f7418d43bb61718de7456ccfbe511658ca97008d7ebbb36ffcfc28f29ba0761319720d0bec2cded88ecffd85640ef5519dab0050efeba908bed6969f954e8be926f5d37f70a093a7e163fe8b6dcdd74789fe00af54da98bf403929ea86f34894398f4da8b9b49a648fc11e3ecbba55227ed6000fbc86fcbfe8cfb2f23aa65f9ee91b600db0065803ac01d6006b80f5838dd5000fcf8ef0ffc687af85f663f3e4b73be5a3d651dbad23be4beb08d37dde758400d12fc03ae27b817504bf0357e966b7d6188a8fed616ca7b7b14aa73c21bd21000fd6db97416fe3954eb9f609b94ad49f9144af87f7113fa39f027e8f04f8d900be9b1a4396458d05beff8ac70edf67a9e85957467fb829af7abf34afffebcd00bf6bbd9535150faca8755689eaf09e02afcff8fe23d6e17db011aa43fd8f5200dd41a14793090bef05a20e53fd9e9e6ae3325d423c71ecf8f99a12fd8d36c600cf8fee17ed949d627cb43613497e5fc4bd12a43f06be314b3c27054fe3673a001a4a74cc3cdbb8fd7fdcfbaad39b26cf41d17fb4c30af5dfe84f807ff1bb9200d5fd29b567c832203df6dbe451f725f9396cbe87afee3b2a1bb276389e6c2300281f8ed94ae3f6ff3c0f60dbd03c90650b6f3471e39e41985be071435b50fa001b25fae702b6a0ee13876c41d94ee89eaeb2d5106f1c4b1b37d32fc6c318fa0055e70e942df3b9825301fd2adf09e957dddb5567254cbfa8d34384b59d7e4f00376eff3f2edac7d0afdd33cbd22fea1fe95f0be857e92ba45f752f1cfbcdfa0045dd1f26acedf4cb7345bfeaf7f21eea17e3d76192cf62c75b3097ff24cde500185f783d827de7f565c8d7d3c26b23a37f0f74f5dd0c5d0d6560b23ddc053200c5c81dee167dc4b1b82be9eca3d1af097b303de37703ec5ae4ef826ca9ef0600a09d8d025fec5792b4fb8df479ceafe0d898ceaa44afe63475bf107d88e7b4003831a16d0338c62a7fe49860f49fe4b401d3eb5ed800e6226c032a6e85bef700a36c06c7869f9147fb3848586ace47bbd86d1b50f302ca9c352ffcd99c3660007add0b1b40bde6b10175ae2befdc653aab26ddf900ef1ba83509ce052b24ab00e9702c09e7d59cdbff25b18fa2f62ad97ed57b35707e0df563276babef163800e3803906ef1bfd34e4024f543566d67aed52a3939e63755a4e030d9fdde5310062fa2992d9e87f26b0d715fb5cf64ef70ffe66c1fd83d0199aa2fb07a8778e00ad8ab78aadcc7b2c29d6ffbf1318b338f1ba3d662a5eab751ec7eb6f17cce3004363b65d2c347942eba4500c35dd85fa8718eafc7f29e93cdbb59d6d9c6e7400f6d1f8e4b50da3ff87c236b2620acb7536870cca375886ef0464506b9bd0d9007afb1bbfb58163c0df4031fa5f0619de6a0e50bffbc83fd9431f41bdf35e0200f34e0bc6b24a06efb10cfaacfeff4a20aec5598fb6c76ca7ebd17f1318339500b787c62cef5aaf92748fd3dd84a5c6ec74a34dc363667cb2f287acb5d87ff800028ed96feee198a1deefa63ab517c572e5ddefbf07dac7d8cfb367004633fa007d0fd423fdefe45cb7992ee2aedbe616d5ba0dc77414f862bf92a4dd6fa4cf00f37c108e8de9ac2ae8f91b4a6a0e407bb518bb973680369c6503bf9fd3064c00af7b6103a8d73c3680f4456d80f7f08e405d563e8458a13d3c9c1762d8008e00b1ca53314623fdffca6903a6d7bdb0818ee775816f56dc47fa3ccf15e2d8f0001e08da07e7632ab70bede1c59987db36a0e66194396b1efeee17602e08ede100a95c21b487b75dae603acbb397afd69368176c03381e316c40ede55744df38007fdcd7d4777fdccf291e0742ebacb4e4d9cbc7b1319da9bd7cbe4fb8dd7abe001f6c40ad2bd9060ee7b481bd8c03a1fb39ca068adecfc1b109ddcfe17d5f75001679f7efe784eff3a3cc596bff0773dac0eedccf293e1778dfcfe1e7e8d03e00f85e0fae15f12c5ad63d08e499f77e099ea5b56742bdbfadbab9b4bc515bde00da5c9d9e9e9ed9a86d16f9b6aaada1f18ca8ed63a873c7fcad653bcf87d7510037bccf68f4f3bb733e587e6b99cf3bef833e0c933ed27296fa60f4179b7d48006997aa9d3a1b231e5887fa1ca2bafda407ac43b94ddf91bfd1326bf2ab33bb00286bd699dd7acef83406fd49cb48234a7fe6547cc2f3f11c9ff23ed3cb7a42007a1c1bd3997a470f7faf5a7daf7d3f5c5b21594d8763891e23c3e3ef9ebf060063c4f79bd16ff8db46d877fea6f5b0e06b75182bc641e6af534ce098546ffe005debad2caa6747ac4c09bd95a80efd909f19e067ccb10eeda0e837d04d174500bf81ee1187f0f986efcbd7e8966b2ffc16cf2cb2dfaa675e42671cf3bef742009dc360fb56734d119f49cb0af1437bb1b1419f89f1cdf6f5b585b5b9cdb5f50085e9b985d9b9dab6df6cf7e63f37bfbab8beba383dbd3c37bd39373dbfdbfc0037d7e69617d796d7e76b9fa757d3cbb3bbcd7f7175e973eecb73ab730bb5f500dae2c26ef39f595a5a589e59fb3cabdf58dfda98dbf5feaf6d2cacd79667a700375657173feffed2aef77f6363737a6e7a717969736e6e6379d7ed6f7e636d00a9b638b3babcb1beb0313bbf5e24af2f259d71232d78ae82db87720ec4e0f700ffa8793ec47bc8917729c07bb420ef31418f182bc41be3b1b59d127c4cc6710021a7e7fc58227ed60fbc86fccb49f77ce428cf74d17150cf2af2bcaad6a8a100f11b137c1456c9118b9f05456cf455bbbeafd1c9ebfbffc335cb6b2cf7da8f00f454370e75238d36dfb4949b7fdb1a97b14c8e51a2ff36ac6bd332066dac7d0055f01f23fe1d728b6b68878c352cae197daafbbf0d3910c640b6a90efca43b000776b4ff85bcfe68fccb89b6f1ba8f3c2d7fdc47f264d9b65a0771be8a6bd1008b8d361dd7a9b5eb500696f2c75eb0861cb1861db178ff06eda4defcbf56ac00ccf385f18c3eec109fcbb25a875951eb61e513a83f2c2877faff5881e7dd7100ccf97d1e3886fc4e119cd327a90ee3049f6d5631be94748f6b28ffaa66b4470019b05d29e37fe3936cc347c95c49744e80f20c89fe0c05f80c0b3ea13c69a700fd5132f3987bf0411a9eeb471cf9a8fd74e3833915bef3e43fd37d0b7cc78800ca69edd909ded7feefb0affd5f067b72df2fdbedc91d2b109f700db09fead0005e8c6e22e91ea3df8731fa631aa348f17edee4c3e77886037de277dbfc81b80017109a4b555ec23220bddaeb567b9dd6b65fe747659b6cd3932433d6e1d901008e5178cf1375c265bbf9f819ba9793082cb44d8e49c68363d24aa353de5121002fc63af73db799f5f9d5d9f9e5dafae6fce2eac2e2aeef796e7dce756bb136003fb331b739b3b1ba1d7fb52ec3fdf9b4d8da0ed77e486f78a3443fd4bccf9000ea7b84ee398c0a7e29dde1005dd13971a4d1794dad0971ad6cf4c6bbdce89600d1ea26a06e94f84c36ff467d2196c9314af4d566df6d4c707d6bedab82ff7e00e2df21b7b8c66be509413f21e8bfff0eb3a68cad7778016feff5e6f779123e005e63d9cc76b2d6f15979cf91836d1e386f64e53d7c3fdfe89f017b3f0a63c90071c8faa6eeb1712ecdfb0b5897758f8de78c96fd273a9fa937ffaef556727f008fc2f89793eedc2bc69e45e8fd7509e83cf25988d6f333ea1ebfbab7989ad00081a47bcc503ec3c2b5c399c6edff957df1d995a27b95d89edfefa6724fb5be00e27b9a6823bc47a4ee5b4e24e173479c2b64e599bc879b770f9f73e959f0fb006be4f7fb8807d6a97d26755687fd1e6d81f78138afab37ffaef5565ab68bcf009e2a9df23b098cfeb9a65e54eeaefc41ed83b10c48afcec1a867c7a7485f530071f4d53af774601b7df1b3bc46ff52405faafffb02fa0a7d174ee94bbd3f8e00e5b5bf552cda2d5bdc4eb76c8b46ffaad0ad3a9bb21ffa9396914694feccab00b329789e0473ac2c7f097dbb2bf44e3215abd5b95615e33956235f3e478bb10099e33fc6788b6d184bd55a0ecfaa1da19c1465ec652db5bab8b93cb7303bb3003ebbb5bcba54dbf6fcc0ff079d95f8872bc10200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap index 74f8f011db72..a048778118b4 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap +++ b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/contract_class_registered_event.test.ts.snap @@ -2,10 +2,10 @@ exports[`ContractClassRegisteredEvent parses an event as emitted by the ContractClassRegisterer 1`] = ` ContractClassRegisteredEvent { - "artifactHash": Fr<0x1cc15db35c462bf2b8d14998121f5434364db024b7e2bddd0ccd0076cb02dd88>, - "contractClassId": Fr<0x2146f63439ea2a890005e1c9a8a07134e04126c06d79a09c981f49ac701c4722>, - "packedPublicBytecode": Buffer<0x26000204012700000104804d2600000403260202040126020304001f1800030002804c2d08804c0001240000004524000000b12702000104804d26020204003a0d00010002270080430400052a00804400000000000000000100000000000000002b0080450000000000000000000000000000000001000000000000000000000000000000002700804604004027008047040038270080480400042700804904000e2700804a0400032700804b040100252400001e7a28020002005189a4170a380102032602040400260206040300380406052c0801020010010501260302040100280202052c0e040500280502052c0e0405260205040300380205042c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022c0d020400280402042c0e04022602040400230200030000015d220000019f26020304052c08000500100003002400001ea32c0400002c0d020300280302032c0e030200280202062c0d0605260207040200380607033a0d00030005220000019f28020003007a81a21e0a380103052602030101260206000626020704012602080000260209040626020a010026020b040223020005000001dd22000006e12c08010c26020d04040010010d0126030c040100280c020d1f2c0007804a000d2c0d0c0d00280d020d2c0e0d0c2c08010d00000102012c0e0c0d2c08010c00000102012c0e040c26020f04102c0800102c0c0d112c0c0c122c0c06130010000f002400001ec52c0400002c0c110e26021004112c0800112c0c0d122c0c0c132c0c061400100010002400001ec52c0400002c0c120f26021104122c0800122c0c0d132c0c0c1400100011002400001fa52c0400002c0c1310002810020d00380d04112c0d110c1c0c0c0d002b02001000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380d101123020011000002df24000020202c08010d2602100403001001100126030d040100280d02102c0c10112c0e0e1100281102112c0e0f112c08010e26020f04070010010f0126030e040100280e020f2c0c0f102c0e081000281002102c0e081000281002102c0e081000281002102c0e081000281002102c0e081000281002102c0e08102c08010f00000102012c0e0e0f2c08010e260210040a001001100126030e040100280e02102c0c10112c0e081100281102112c0e081100281102112c0e031100281102112c0e081100281102112c0e081100281102112c0e031100281102112c0e081100281102112c0e081100281102112c0e03112c08011000000102012c0e0e102b02000e00083e7911d835097629f0067531fc15cafd79a89beecb39903f69572c636f4a5a2b020011001a7f5efaad7f315c25a918f30cc8d7333fccab7ad7c90f14de81bcc528f9935d2b02001200054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde4022b02001300209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac1262c08011426021504070010011501260314040100281402152c0c15162c0e0e1600281602162c0e111600281602162c0e0a1600281602162c0e121600281602162c0e131600281602162c0e0a162c0c040522000004c10c38050b0e2302000e00001c1822000004d32c0d0f0526020d000226021104060d3080480011001223020012000004f624000020322d04000580032700800404000724000020442d088005000e00280e021101280011804800122c0e0d1226020d04060d308043000d0011230200110000053924000020322d04000e80032700800404000724000020442d0880050005002805020d0128000d804300112c0e08112c0e050f2c0d100d2b02000e002df8b940e5890e4e1377e05373fae69a1d754f6935e6a780b666947431f2cdcd26021104090c3809111223020012000005a624000020322d04000d80032700800404000a24000020442d088005000f00280f021100381109122c0e0e122b02000d002ecd88d15967bc53b885912e0d16866154acb6aac2d3f85e27ca7eefb2c1908326020e040726021204090c380e1213230200130000060d24000020322d04000f80032700800404000a24000020442d088005001100281102120038120e132c0e0d1326020d040826020f04090c380d0f12230200120000064f24000020322d04001180032700800404000a24000020442d088005000e00280e020f00380f0d122c0e0a122c0e0e102c08010d26020f04040010010f0126030d040100280e020f26021004090028050211260212040600280d021342f7000f00110013001000280d020e00380e040f2c0d0f05370c000c0005002802020d2c0d0d0c26020e040200380d0e053a0d0005000c22000006e1280200050032b6bd200a3801050c2302000c000006fc22000008052c08010526020c04030010010c012603050401002805020c1f3c0007000b000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05110010000e0024000020d22c0400002c0c100d00280d020f00380f04102c0d100e26020f04102c0800102c0c0c112c0c05120010000f0024000020d22c0400002c0c110d00280d020c00380c040f2c0d0f051c0c050c002b02000d00000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380c0d0f2302000f000007e12400002020370c0005000e002802020d2c0d0d0c26020e040200380d0e053a0d0005000c220000080528020005008a4870ec0a3801050c2302000c0000082022000008b02c08010526020c04020010010c012603050401002805020c1f3c00070007000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05112c0c06120010000e00240000214d2c0400002c0c100d3302000d002802020d2c0d0d0c26020e040200380d0e053a0d0005000c22000008b02802000500cd8c9a7a0a3801050c2302000c000008cb22000009d32c08010526020c04020010010c012603050401002805020c1f3c00070007000c2c0d050c00280c020c2c0e0c052c08010c00000102012c0e050c2c08010500000102012c0e040526020e040f2c08000f2c0c0c102c0c05110010000e00240000222d2c0400002c0c100d26020c040e2c08000e2c0c0d0f0010000c0024000022a82c0400002c0c0f051e02000c060a380c050d2302000d0000096f26020e04003b09010e1c0c050c0026020d040126020f040300380d0f0e2c0801050010010e012603050401002805020e2c0e0d0e00280e020e2c0e0d0e26020e04030038050e0d2c0c0d0e2c0e0c0e002805020e2c0d0e0d26020f040200380e0f0c3a0d000c000d22000009d32802000500f99f5a2d0a3801050c260205026f26020d026526020e022026020f0272260210026c26021102772302000c00000a0c2200000cf62c08011226021304020010011301260312040100281202131f3c0007000700132c0d121300281302132c0e13122c08011300000102012c0e12132c08011200000102012c0e041226021504162c0800162c0c13172c0c12182c0c06190010001500240000214d2c0400002c0c17142602130401260216040300381316152c0801120010011501260312040100281202152c0e131500281502152c0e1315260215040300381215132c0c13152c0e141500281202152c0d151426021604020038151613360d00130014260212000a2602130014260214001e2602160403260218040300381618172c0801150010011701260315040100281502172c0e161700281702172c0e1617260217040300381517162c0c16172c0e121700281702172c0e131700281702172c0e141700281502142c0d141326021604020038141612360d0012001326021202642602130248260214022c26021502212c080116260217040e0010011701260316040100281602172c0c17182c0e131800281802182c0e0d1800281802182c0e101800281802182c0e101800281802182c0e051800281802182c0e141800281802182c0e0e1800281802182c0e111800281802182c0e051800281802182c0e0f1800281802182c0e101800281802182c0e121800281802182c0e15182c080112260213040e001001130126031204010028120213260214040d00381413142c0c13150c38151417160c17172302001700000c342c0e081500281502152200000c152c08011300000102012c0e1213260212040d2c0c040c2200000c4f0c380c12142302001400001b9b2200000c612c0d130c260215040d0628150213260217040300381517162c0801140010011601260314040100281402162c0e151600281602162c0e15162602170403003814171600280c02172d04001780032d04001680042d040015800524000022d400281402162c0d16152602170402003816170c360d000c001500280202142c0d14122602150402003814150c3a0d000c00122200000cf62802000c0097b974f70a38010c122302001200000d11220000158c2c08011226021304070010011301260312040100281202131f3c0007000900132c0d121300281302132c0e13122c08011300000102012c0e12132c08011200000102012c0e041226021504162c0800162c0c13172c0c12180010001500240000231a2c0400002c0c1714002814021600381604172c0d17152c0d13142c0d121626021804060c381618192302001900000da82400002032002814021800381816192c0d191700381607180e381618192302001900000dcd240000239526021a04060c38181a1b2302001b00000de42400002032002814021a00381a181b2c0d1b190038160b180e3816181a2302001a00000e0924000023952c0e14132c0e18121c0c1714051c0c140b001c0c1916051c0c16140026021704182c0800182c0c13192c0c121a2c0c061b001000170024000023a72c0400002c0c191626021804192c0800192c0c131a2c0c121b2c0c061c001000180024000023a72c0400002c0c1a17260219041a2c08001a2c0c131b2c0c121c0010001900240000231a2c0400002c0c1b18002818021300381304192c0d19121c0c1213002b02001800000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e381318192302001900000ee024000020202c08011300000102012c0e0a132c08011800000102012c0e08182c080119000001020126021a007f2c0e1a192c08011a000001020126021c041d2c08001d2c0c151e0010001c0024000024872c0400002c0c1e1b2c0d1b1500281502152c0e151b052800148044001500380b1514260215041c2c08001c2c0c141d001000150024000024872c0400002c0c1d0b2c0d0b1400281402142c0e140b260214020026021502bc26021c026a26021d029b26021e02d32c08011f2602200445001001200126031f040100281f02202c0c20212c0e152100282102212c0e1c2100282102212c0e1d2100282102212c0e1e2100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e142100282102212c0e14212c0e1f1a260214042026021504242c0c040c22000012250c380c141c2302001c00001a9022000012372c0d1a0b2802000c045be0cd192802001404bb67ae8528020015043c6ef3722802001a04a54ff53a2802001b04510e527f2802001c049b05688c2802001d041f83d9ab2802001e046a09e6672c08011f2602200409001001200126031f040100281f02202c0c20212c0e1e2100282102212c0e142100282102212c0e152100282102212c0e1a2100282102212c0e1b2100282102212c0e1c2100282102212c0e1d2100282102212c0e0c212c08010c00000102012c0e1f0c2c0801140000010201260215044426021c04202c0800202c0c0b212c0c15222c0c04230010001c0024000024cd2c0400002c0c211a2c0c221b2c0d1a1c00281c021c2c0e1c1a2c0e1b140b28001b8046001c2302001c0000134e220000138e2c08011b26021c04090010011c0126031b040100281a021c00281f021d00281b021e3f3f001e001d001c2c0d1b1a00281a021a2c0e1a1b2c0e1b0c220000138e26021c041d2c08001d2c0c0b1e2c0c151f2d08804600200010001c0024000024cd2c0400002c0c1e1a2c0c1f1b2c0d1a0b00280b020b2c0e0b1a2c0e1b140b28001b8046000b2302000b000013e122000013ea2c0e041422000013ea2c0d140b26021b008626021d041e2c08001e2c0c1a1f2c0c0b202c0c0b212c0c1b220010001d0024000027bb2c0400002c0c1f1c2c0d1c1a00281a021a2c0e1a1c00380b071a0e380b1a1b2302001b0000144224000023952c0e1a142c0d1c0b00280b020b2c0e0b1c0d308047001a000b2302000b0000146822000014b02c0d0c0b2c08011a26021b04090010011b0126031a040100281c021b00280b021d00281a021e3f3f001e001d001b2c0d1a0b00280b020b2c0e0b1a2c0e1a0c2c0e041422000014b02c0d140b26021a041d2c08001d2c0c1c1e2c0c0b1f2c0c15200010001a0024000028d32c0400002c0c1e142c0d140b00280b020b2c0e0b142c0d0c0b260215041a2c08001a2c0c141b2c0c0b1c00100015002400002d972c0400002c0c1b0c2c0d0c0b00280b020b2c0e0b0c260214041a2c08001a2c0c0c1b00100014002400002fbf2c0400002c0c1b0b26020c041a2c08001a2c0c131b2c0c181c2c0c191d2c0c0b1e2c0c161f2c0c12202c0c17210010000c00240000312e2c04000000280202122c0d120c2602130402003812130b3a0d000b000c220000158c2802000b009756f6200a38010b0c2302000c000015a7220000174d2c08010b26020c04050010010c0126030b040100280b020c1f2c00078048000c2c0d0b0c00280c020c2c0e0c0b2c08010c00000102012c0e0b0c2c08010b00000102012c0e040b26021304142c0800142c0c0c152c0c0b162c0c061700100013002400003db02c0400002c0c151226021404152c0800152c0c0c162c0c0b172c0c061800100014002400003db02c0400002c0c161326021504162c0800162c0c0c172c0c0b1800100015002400003e902c0400002c0c1714002814021600381604172c0d17151c0c1514002b02001600000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e3814161723020017000016a9240000202026021604172c0800172c0c0c182c0c0b192c0c061a00100016002400003db02c0400002c0c18142c08010b00000102012c0e0a0b2c08010c00000102012c0e080c2c0801080000010201260216004a2c0e160826021604172c0800172c0c0b182c0c0c192c0c081a2c0c121b2c0c131c2c0c151d2c0c141e0010001600240000312e2c040000002802020c2c0d0c0b260212040200380c12083a0d0008000b220000174d2802000800eb2b616b0a3801080b2302000b00001768220000195c2c08010126020804070010010801260301040100280102081f3c0007000900082c0d010700280702072c0e07012c08010700000102012c0e01072c08010100000102012c0e040126020904122c0800122c0c07132c0c01142c0c0615001000090024000023a72c0400002c0c130826020b04122c0800122c0c07132c0c01142c0c06150010000b0024000023a72c0400002c0c130926020c04122c0800122c0c07132c0c01142c0c06150010000c0024000023a72c0400002c0c130b26021204132c0800132c0c07142c0c01150010001200240000231a2c0400002c0c140c26021304142c0800142c0c0c15001000130024000022a82c0400002c0c151226021304142c0800142c0c07152c0c01162c0c0617001000130024000023a72c0400002c0c150c26021404152c0800152c0c07162c0c01172c0c0618001000140024000023a72c0400002c0c16131e020001030a3801080623020006000018cb2400003f0b1e020001040a3801090623020006000018e22400003f1d1e020001050a38010b0623020006000018f92400003f2f1e020001060a3801120623020006000019102400003f411e020001080a38010c0623020006000019272400003f531e020001070a38011306230200060000193e2400003f6500280202072c0d0706260208040200380708013a0d00010006220000195c260201026e26020202742602060263260207026b260208027326020902552c08010b26020c04110010010c0126030b040100280b020c2c0c0c122c0e091200281202122c0e011200281202122c0e071200281202122c0e011200281202122c0e051200281202122c0e111200281202122c0e011200281202122c0e0e1200281202122c0e081200281202122c0e0d1200281202122c0e101200281202122c0e0d1200281202122c0e061200281202122c0e021200281202122c0e051200281202122c0e0f120a380a03012302000100001a8f26020204122c080105260206041200100106012c0c05062903000605e58f985907316290002806020600280b020726020804102d04000780032d04000680042d040008800524000022d4260207041000380607062c0e040600280602063b0d0502252c0d1a1c0128000c8048001d0e380c1d1e2302001e00001aae240000239526021f04200c380c1f202302002000001ac5240000203200281b021f00381f0c202c0d201e26022004440c381d20212302002100001aea24000020322d04001c80032700800404004524000020442d088005001f00281f02200038201d212c0e1e2100380c151c0e380c1c1d2302001d00001b27240000239526021e04200c380c1e202302002000001b3e240000203200280b021e00381e0c202c0d201d26022004440c381c20212302002100001b6324000020322d04001f80032700800404004524000020442d088005001e00281e02200038201c212c0e1d212c0e1e1a00380c071c2c0c1c0c22000012252c0d1314260217040d0c380c17182302001800001bb6240000203200281602170038170c182c0d18151c0c151700260218040d0c380c18192302001900001be024000020322d04001480032700800404000e24000020442d088005001500281502180038180c192c0e17192c0e151300380c07142c0c140c2200000c4f2c0d0f0e26021204020c380512132302001300001c33240000203200280d021200381205132c0d13111c0c1113051c0c131200023811121309280013804400151c0c1516051c0c1613000238151316092800168044001505280013804400160038161213053080450015001200381312160a381116122302001200001c9f26021704003b0901170438050b1126021604060c381116172302001700001cbb24000020322d04000e80032700800404000724000020442d0880050012002812021600381611172c0e1317003811070e26021304060c380e13162302001600001cfd24000020322d04001280032700800404000724000020442d088005001100281102130038130e162c0e15162c0e110f2c0d100e05280005804a001126021304060c381113152302001500001d4a2400002032002814021300381311152c0d1512003811071326021604060c381316172302001700001d742400002032002814021600381613172c0d17150038110b1626021804060c381618192302001900001d9e2400002032002814021800381816192c0d191726021804090c381118192302001900001dc324000020322d04000e80032700800404000a24000020442d0880050016002816021800381811192c0e121926021104090c381311122302001200001e0024000020322d04001680032700800404000a24000020442d088005000e00280e021100381113122c0e1512003813071126021304090c381113152302001500001e4224000020322d04000e80032700800404000a24000020442d0880050012002812021300381311152c0e17152c0e1210003805070e2c0c0e0522000004c1270080040478000d000000800480032300800300001ea22901000105f7a1f3afa5add4ca3b010102252400001e7a1e020001011e020002000a380102032302000300001ec42400003f77252400001e7a26020604072c0800072c0c01082c0c020900100006002400001fa52c0400002c0c080526020100060a380301022602010400002805020700380701082c0d08062302000200001f972200001f1726020100080a380301022302000200001f522200001f2e260201001b0a380301022302000200001f4926020504003b0901052c0c06042200001fa01c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380102032302000300001f8e24000020202c0c06042200001fa02c0c06042200001fa02c0c0401252400001e7a2c0d01032c0d020426020604030c380406072302000700001fc92400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000201324000023952c0e03012c0e07022c0c06012529010001055a02e41bb51ea99f3b010102252901000105e89d09fea1112d0e3b010102252d01800380060b00800600028007230080070000205f220000206a2d008003800522000020d12d0000018005010000018004000101008003800480092d008003800a2d008005800b0b00800a8009800c2300800c000020bd2d01800a80082d028008800b0100800a0002800a0100800b0002800b220000208c27018005040001030080060002800622000020d1252400001e7a2c0d01032c0d020426020604020c3804060723020007000020f62400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000214024000023952c0e03012c0e07022c0c0601252400001e7a26020604072c0800072c0c01082c0c02090010000600240000222d2c0400002c0c080526020100060a380301022602010400002805020700380701082c0d0806230200020000221f220000219f26020100080a3803010223020002000021da22000021b6260201001b0a3803010223020002000021d126020504003b0901052c0c060422000022281c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e38010203230200030000221624000020202c0c060422000022282c0c060422000022282c0c0401252400001e7a2c0d01032c0d020426020604010c3804060723020007000022512400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000229b24000023952c0e03012c0e07022c0c0601252400001e7a2602020400002801020400380402052c0d05031c0c0302051c0c0201001c0c0102052c0c02012501008003800580072d00800380082d00800480090b0080088007800a2300800a000023192d01800880062d02800680090100800800028008010080090002800922000022e8252400001e7a2c0d01032c0d020426020604060c38040607230200070000233e2400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e38040708230200080000238824000023952c0e03012c0e07022c0c060125290100010545a7ca711941e4153b010102252400001e7a26020604072c0800072c0c01082c0c02090010000600240000231a2c0400002c0c080526020100060a380301022602010400002805020700380701082c0d0806230200020000247922000023f926020100080a3803010223020002000024342200002410260201001b0a38030102230200020000242b26020504003b0901052c0c060422000024821c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e38010203230200030000247024000020202c0c060422000024822c0c060422000024822c0c0401252400001e7a26020301002c080102260204042100100104012603020401002802020426020504204303b00001804b0005000300042c0d020100280102012c0e01022c0c0201252400001e7a26020504002c0801062602070411001001070126030604010028060207260208041000380807082c0c07090c3809080a160c0a0a2302000a0000251c2c0e0509002809020922000024fd2c08010700000102012c0e060701280003804600060e38030608230200080000254324000023950c38020608230200080000256022000025552d088046000422000025a40c380203082302000800002592220000257202380203080e3803020923020009000025892400003f892c0c0806220000259b2c0c0506220000259b2c0c060422000025a407280004804800022c08010600000102012c0e02062602090404063804090a04380a090b0238040b080a380805092602080401230200090000260422000025e400380208090e3802090a2302000a000025fb24000023952c0e090622000026042c0d0609260206020026020a02012c0c0502220000261b0c3802090b2302000b00002636220000262d2c0d07012c0c0402252c08010c00000102012c0e050c052800028048000d26020f04000b28000f8048000e2302000e0000267a0728000d804800110a38110210230200100000267a2400003f9b2c0c050b22000026830d28000b8048000e2302000e000026ef22000026982c0d070b2c0d0c0d26020e04100c38020e0f2302000f000026b724000020322d04000b80032700800404001124000020442d088005000c00280c020e00380e020f2c0e0d0f003802080b2c0e0c072c0c0b02220000261b00380d0b0f0e380d0f10230200100000270624000023950c380f0410230200100000272122000027182c0c060e22000027660038030f100e380310112302001100002738240000239526021104440c38101112230200120000274f2400002032002801021100381110122c0d120f2c0c0f0e22000027662c0d0c0f26021104122c0800122c0c0f132c0c0a1400100011002400003fad2c0400002c0c13101c0c0e0f040038100f0e0e38100e1123020011000027a924000023952c0e0e0c00380b080e2c0c0e0b22000026832400001e7a2c0d010600280602062c0e0601072800028048000626020704100c3806070823020008000027ec2400002032002801020700380706082c0d080226020700650a3804070826020702802302000800002861220000281626020800860a38040809230200090000283126020a04003b09010a26020804092c0800092c0c020a2c0c030b2c0c070c001000080024000040342c0400002c0c0a042c0c0405220000289126020804092c0800092c0c020a2c0c030b2c0c070c001000080024000040342c0400002c0c0a042c0c0405220000289126020304100c3806030423020004000028a824000020322d04000180032700800404001124000020442d0880050002002802020300380306042c0e05042c0c0201252400001e7a2c0d010400280402042c0e04012c08010400000102012c0e01042c08010500000102012c0e0205260207040406380207080438080709023802090626020704000a380607082302000800002a3f220000292a072800028048000803308048000600090f2800068048000a2302000a0000294f2400003f8926020a04100c38080a0b2302000b000029662400002032002801020a00380a080b2c0d0b061c0c090b021c0c0b0a041c0c0a0b0226020a020804380a0b0c26020e02000a380e0b0d2302000d000029b606380c0b100a38100a0f2302000f000029b62400003f9b1a38060c0a26020c040d2c08000d2c0c0a0e2c0c0b0f0010000c002400003fad2c0400002c0c0e0626020b04100c38080b0c2302000c000029f524000020322d04000180032700800404001124000020442d088005000a00280a020b00380b080c2c0e060c2c0e0a0400380209010e380201062302000600002a3624000023952c0e01052200002a3f2c0d0502072800028048000526020204012c0c05012200002a590d280001804900052302000500002d442200002a6e2602050408043805030626020904000a380903082302000800002aa1063806030b0a380b050a2302000a00002aa12400003f9b1c0c06030026020601002c080105260208040900100108012603050401002805020826020904084303b00003804b000900060008260203040226020602012c0c07012200002ae80c380103072302000700002aff2200002afa2c0d040125052800018048000726020904000b280009804800082302000800002b36072800078048000b0a380b010a2302000a00002b362400003f9b2c0d040801308049000100090f3080490009000a2302000a00002b57240000239526020b04080c38070b0c2302000c00002b6e2400002032002805020b00380b070c2c0d0c0a003807020b0e38070b0c2302000c00002b93240000239526020d04080c380b0d0e2302000e00002baa2400002032002805020d00380d0b0e2c0d0e0c003807030b0e38070b0d2302000d00002bcf240000239526020e04080c380b0e0f2302000f00002be62400002032002805020e00380e0b0f2c0d0f0d01280007804a000b0e38070b0e2302000e00002c0e240000239526020e04080c380b0e0f2302000f00002c252400002032002805020e00380e0b0f2c0d0f071c0c0a0b0426020e040f2c08000f2c0c0b102c0c06110010000e002400003fad2c0400002c0c100a1c0c0c0b0400380a0b0c0e380a0c0e2302000e00002c77240000239526020b040e2c08000e2c0c0c0f2c0c06100010000b002400003fad2c0400002c0c0f0a1c0c0d0b0400380a0b0c0e380a0c0d2302000d00002cb6240000239526020b040d2c08000d2c0c0c0e2c0c060f0010000b002400003fad2c0400002c0c0e0a1c0c070b0400380a0b070e380a070c2302000c00002cf5240000239526020b04100c38090b0c2302000c00002d0c24000020322d04000880032700800404001124000020442d088005000a00280a020b00380b090c2c0e070c2c0e0a0400380102072c0c07012200002ae82c0d040526020804100c380108092302000900002d5f24000020322d04000580032700800404001124000020442d0880050006002806020800380801092c0e070900380102052c0e06042c0c05012200002a592400001e7a2c0d020400280402042c0e04022c080104000001020126020502002c0801062602070421001001070126030604010028060207260208042000380807082c0c07090c3809080a160c0a0a2302000a00002dfc2c0e050900280902092200002ddd2c08010500000102012c0e06052c0801062602070409001001070126030604010028010207002802020800280602093f3f0009000800072c0d060100280102012c0e01062c0e06042602010400260202040126020604082c0c01032200002e5c0c380306072302000700002e732200002e6e2c0d0501252c0d040826020a04080c38030a0b2302000b00002e8e2400002032002808020a00380a030b2c0d0b091c0c09080026020a01002c08010926020b04050010010b012603090401002809020b26020c04044303b00008804b000c000a000b053080480003000826020b04000a380b030a2302000a00002f04063808030d0b28000d8048000c2302000c00002f042400003f9b2c0c01072200002f0d0d2800078048000a2302000a00002f302200002f2200380302072c0c07032200002e5c2c0d050a003808070b0e38080b0c2302000c00002f4b240000239526020d04040c38070d0e2302000e00002f622400002032002809020d00380d070e2c0d0e0c26020e04200c380b0e0f2302000f00002f8724000020322d04000a80032700800404002124000020442d088005000d00280d020e00380e0b0f2c0e0c0f2c0e0d05003807020a2c0c0a072200002f0d2400001e7a2c080103000001020126020400012c0e04032c080104000001020126020500002c0e05042c08010600000102012c0e05062602050401260207041e260208040f2702000900010026020a04002c0c0a0222000030190c3802080a2302000a00003067220000302b2c0d0602002801020700380708092c0d09051c0c0501002c0d0305043801050300380203012c0e01062c0d0402043802050300380103022c0c0201252c0d060a023807020b0e3802070c2302000c000030822400003f8926020d04200c380b0d0e2302000e000030992400002032002801020d00380d0b0e2c0d0e0c1c0c0c0b002c0d030c04380b0c0d00380a0d0b2c0e0b0604380c090a2c0e0a032c0d040b033080490002000c0f2800028049000d2302000d000030e82400003f8926020e04200c380c0e0f2302000f000030ff2400002032002801020e00380e0c0f2c0d0f0d1c0c0d0c0004380c0a0d00380b0d0a2c0e0a04003802050a2c0c0a0222000030192400001e7a26020900142c08010a26020b04030010010b0126030a040100280a020b2c0c0b0c2c0e090c00280c020c2c0e050c2a020009000000000000000002000000000000000026020f04102c0800102c0c09110010000f0024000041442c0400002c0c110b2c0c120c2c0c130d2c0c140e2c0d0b0900280902092c0e090b2c08010900000102012c0e0b092c0d0c0b00280b020b2c0e0b0c2c08010b00000102012c0e0c0b2c08010c00000102012c0e0d0c2c08010d00000102012c0e0e0d26020e040126020f040026021004022c0c0f0822000032070c380810012302000100003d40220000321926020304102c0800102c0c09112c0c0b122c0c0c132c0c0d14001000030024000041eb2c0400002c0c11021e020003031e020008001e0200090426020a02002c08010b26020c04e10010010c0126030b040100280b020c26020d04e000380d0c0d2c0c0c100c38100d11160c1111230200110000329d2c0e0a100028100210220000327e2c08010a00000102012c0e0b0a26020c04102c0800102c0c06110010000c0024000024872c0400002c0c110b2c0d0b0600280602062c0e060b26020c04102c0800102c0c03110010000c0024000024872c0400002c0c11062c0d060300280302032c0e030626020c04102c0800102c0c08110010000c0024000024872c0400002c0c11032c0d030800280802082c0e080326020c04102c0800102c0c09110010000c0024000024872c0400002c0c11082c0d080900280902092c0e090826020c04102c0800102c0c04110010000c0024000024872c0400002c0c11092c0d090400280402042c0e040926020c04102c0800102c0c02110010000c0024000024872c0400002c0c11042c0d040200280202022c0e020426020c04102c0800102c0c07110010000c0024000024872c0400002c0c11022c0d020c00280c020c2c0e0c0226020c04a026020d0480260210042026021104c026021204602c0c0f0122000034000c3801101323020013000039ef22000034122c0d0a022c0801032602040411001001040126030304010028030204260206041000380604062c0c04080c38080609160c0909230200090000345b2c0e0f080028080208220000343c2c08010400000102012c0e030428020003049b05688c28020006043c6ef37228020008045be0cd192802000904510e527f2802000a04bb67ae852802000b041f83d9ab2802000c04a54ff53a2802000d046a09e6672c08011026021204090010011201260310040100281002122c0c12132c0e0d1300281302132c0e0a1300281302132c0e061300281302132c0e0c1300281302132c0e091300281302132c0e031300281302132c0e0b1300281302132c0e08132c08010300000102012c0e10032c08010600000102012c0e0f0626020804e02c0c0f0122000035370d280001804a000923020009000038d1220000354c26020a04122c0800122c0c02132c0c08142c0c11150010000a00240000426f2c0400002c0c13012c0c14092c0d010200280202022c0e02012c0e01042c0e09060b2800098046000223020002000035a122000035aa2c0e0f0622000035aa2c0d0602260209006526020b04102c0800102c0c01112c0c02122c0c02132c0c09140010000b0024000027bb2c0400002c0c110a2c0d0a0100280102012c0e010a2c0e0a040038020e010e38020109230200090000360624000023952c0e01062c0d0a0200280202022c0e020a0d30804700010002230200020000362c22000036742c0d03012c08010226020904090010010901260302040100280a0209002801020b002802020c3f3f000c000b00092c0d020100280102012c0e01022c0e02032c0e0f0622000036742c0d060226020904102c0800102c0c0a112c0c02122c0c0813001000090024000028d32c0400002c0c11062c0d060200280202022c0e02062c0e06042c0d030226020404102c0800102c0c06112c0c021200100004002400002d972c0400002c0c11032c0d030200280202022c0e020326020404102c0800102c0c031100100004002400002fbf2c0400002c0c110226020300052c08010426020604040010010601260304040100280402062c0c06082c0e030800280802082c0e020800280802082c0e05082c0d040300280302032c0e03042a020003000000000000000003000000000000000026020a04102c0800102c0c03110010000a0024000041442c0400002c0c11052c0c12062c0c13082c0c14092c0d050300280302032c0e03052c08010300000102012c0e05032c0d060500280502052c0e05062c08010500000102012c0e06052c08010600000102012c0e08062c08010800000102012c0e09082c0c0f0122000037de0d280001804a0009230200090000386122000037f326020404092c0800092c0c030a2c0c050b2c0c060c2c0c080d001000040024000041eb2c0400002c0c0a011e02000300323800010003000426020301000a380403052302000500003842240000455d34380002000700032602020101230200030000385c240000456f3302000125230200090000386e22000038c326020a04030c38010a0b2302000b000038852400002032002804020a00380a010b2c0d0b0926020a040f2c08000f2c0c03102c0c05112c0c06122c0c08132c0c09140010000a0024000045812c04000022000038c30038010e092c0c090122000037de053080460001000926020b04000a380b010a2302000a00003905063809010d0b28000d8046000c2302000c000039052400003f9b26020c04122c0800122c0c02132c0c08142c0c09150010000c00240000426f2c0400002c0c130a2c0c140b2c0d0a0c00280c020c2c0e0c0a0c3809080c2302000c0000394f22000039652c0d0a0900280902092c0e090a2c0e0a0422000039652302000c00003972220000397b2c0e0b06220000397b2c0d06090b2800098046000a04380c0a09230200090000399922000039e12c0d04092c0d030a2c08010b26020c04090010010c0126030b0401002809020c00280a020d00280b02103f3f0010000d000c2c0d0b0900280902092c0e090b2c0e0b0322000039e10038010e092c0c090122000035372c0d0a1326021504200c380115162302001600003a0a240000203200280b021500381501162c0d161426021604e00c380116172302001700003a2f24000020322d0400138003270080040400e124000020442d0880050015002815021600381601172c0e141700380110130e380113142302001400003a6c240000239526021604200c380116172302001700003a832400002032002806021600381601172c0d171426021704e00c381317182302001800003aa824000020322d0400158003270080040400e124000020442d0880050016002816021700381713182c0e141801280001804600130e380113142302001400003ae8240000239526021504200c380115172302001700003aff2400002032002803021500381501172c0d171426021704e00c381317182302001800003b2424000020322d0400168003270080040400e124000020442d0880050015002815021700381713182c0e141800380112130e380113142302001400003b61240000239526021604200c380116172302001700003b782400002032002808021600381601172c0d171426021704e00c381317182302001800003b9d24000020322d0400158003270080040400e124000020442d0880050016002816021700381713182c0e14180038010d130e380113142302001400003bda240000239526021504200c380115172302001700003bf12400002032002809021500381501172c0d171426021704e00c381317182302001800003c1624000020322d0400168003270080040400e124000020442d0880050015002815021700381713182c0e14180038010c130e380113142302001400003c53240000239526021604200c380116172302001700003c6a2400002032002804021600381601172c0d171426021704e00c381317182302001800003c8f24000020322d0400158003270080040400e124000020442d0880050016002816021700381713182c0e141800380111130e380113142302001400003ccc240000239526021504200c380115172302001700003ce32400002032002802021500381501172c0d171426021704e00c381317182302001800003d0824000020322d0400168003270080040400e124000020442d0880050015002815021700381713182c0e14182c0e150a0038010e132c0c130122000034002302000100003d4d2200003da226020204020c380802032302000300003d64240000203200280a020200380208032c0d030126020204112c0800112c0c09122c0c0b132c0c0c142c0c0d152c0c0116001000020024000045812c0400002200003da20038080e012c0c010822000032072400001e7a26020604072c0800072c0c01082c0c020900100006002400003e902c0400002c0c080526020100060a380301022602010400002805020700380701082c0d08062302000200003e822200003e0226020100080a380301022302000200003e3d2200003e19260201001b0a380301022302000200003e3426020504003b0901052c0c06042200003e8b1c0c0601002b02000200000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380102032302000300003e7924000020202c0c06042200003e8b2c0c06042200003e8b2c0c0401252400001e7a2c0d01032c0d020426020604040c380406072302000700003eb42400002032002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e0508260205040100380405070e380407082302000800003efe24000023952c0e03012c0e07022c0c0601252901000105be11c73bbb04a4fc3b0101022529010001057425c86e086b03c13b010102252901000105e3b1cb17b4b196ae3b010102252901000105203960faa7b733883b01010225290100010597178cf85aace5563b0101022529010001053b7ee0a2f674688e3b01010225290100010565a49ce5d4594d753b010102252901000105288692b047dcfd433b010102252901000105646188a8c6cf94cb3b010102252400001e7a26020404000a3801040523020005000040262200003fc92602040208043804020526020702000a380702062302000600003ffc06380502090a380904082302000800003ffc2400003f9b183801050226020102200c380501042602010101230200040000401d24000046b02c0c0203220000402f2c0c0403220000402f2c0c0301252400001e7a260205040406380205060438060507023802070403308048000400020f28000480480005230200050000406a2400003f891c0c0206021c0c0605041c0c0502022602050208043805020626020802000a3808020723020007000040ac063806020a0a380a050923020009000040ac2400003f9b1a3801060526020604072c0800072c0c05082c0c020900100006002400003fad2c0400002c0c08011c0c0302040330804a000400030f280004804a000523020005000040f62400003f891c0c0305021c0c0504041c0c04030226020504062c0800062c0c02072c0c030800100005002400003fad2c0400002c0c070400380104020e38010203230200030000413f24000023952c0c0201252400001e7a26020200002c08010326020404040010010401260303040100280302042c0c04052c0e020500280502052c0e020500280502052c0e02052c0d030400280402042c0e04032c08010426020504050010010501260304040100280402052c0c05062c0e020600280602062c0e020600280602062c0e020600280602062c0e0106260201040026020201002c0c02052c0c01062c0c04022c0c05042c0c03012c0c0603252400001e7a2c0d040526020601000a38050607230200070000420f26020804003b09010826020504062c0800062c0c01072c0c02082c0c03092c0c040a001000050024000046c22c0400002c0d01052c0d02062c0d03072c0e05012c0e06022c0e070326020101012c0e01042602010400002806020300380301042c0d04022c0c0201252400001e7a26020504002c0801062602070411001001070126030604010028060207260208041000380807082c0c07090c3809080a160c0a0a2302000a000042be2c0e05090028090209220000429f2c08010700000102012c0e060701280003804600060e3803060823020008000042e524000023950c38020608230200080000430222000042f72d088046000422000043460c380203082302000800004334220000431402380203080e38030209230200090000432b2400003f892c0c0806220000433d2c0c0506220000433d2c0c0604220000434607280004804800022c08010600000102012c0e02062602090404063804090a04380a090b0238040b080a38080509260208040123020009000043a6220000438600380208090e3802090a2302000a0000439d24000023952c0e090622000043a62c0d0609260206020026020a02012c0c050222000043bd0c3802090b2302000b000043d822000043cf2c0d07012c0c0402252c08010c00000102012c0e050c052800028048000d26020f04000b28000f8048000e2302000e0000441c0728000d804800110a38110210230200100000441c2400003f9b2c0c050b22000044250d28000b8048000e2302000e00004491220000443a2c0d070b2c0d0c0d26020e04100c38020e0f2302000f0000445924000020322d04000b80032700800404001124000020442d088005000c00280c020e00380e020f2c0e0d0f003802080b2c0e0c072c0c0b0222000043bd00380d0b0f0e380d0f1023020010000044a824000023950c380f041023020010000044c322000044ba2c0c060e22000045080038030f100e3803101123020011000044da240000239526021104e00c3810111223020012000044f12400002032002801021100381110122c0d120f2c0c0f0e22000045082c0d0c0f26021104122c0800122c0c0f132c0c0a1400100011002400003fad2c0400002c0c13101c0c0e0f040038100f0e0e38100e11230200110000454b24000023952c0e0e0c00380b080e2c0c0e0b2200004425290100010561be47556b1380913b010102252901000105b87a3944b3b13c563b010102252400001e7a2c0d03062c0d040726020801000a3807080923020009000045a926020a04003b09010a0b280006804a00072602060401230200070000463c22000045c32c0d01072c0d02082c0d03092c0d040a26020c04030c38090c0d2302000d000045ea24000020322d04000780032700800404000424000020442d088005000b00280b020c00380c090d2c0e050d00380906050e38090507230200070000462724000023952c0e0b012c0e08022c0e05032c0e0a0422000046af26020704082c0800082c0c01092c0c020a2c0c030b2c0c040c001000070024000046c22c0400002c0d01072c0d02082c0d040926020a04002d04000780032700800404000424000020442d088005000b00280b020c00380c0a0d2c0e050d2c0e0b012c0e08022c0e06032c0e090422000046af252901000105c96f933b139de9163b010102252400001e7a260206040026020704012c0c060522000046da0d280005804a0006230200060000474522000046ef2c0d01052c0d02062c0d03072c0d04082c08010926020a04050010010a012603090401002806020a26020b0404002809020c3e0f000a000c2c0d090600280602062c0e06092c0e05012c0e09022c0e07032c0e0804252c0d03060c380506080038050706230200080000476022000048112c0d01082c0d02092c0d030a2c0d040b26020d04040c38050d0e2302000e000047872400002032002809020d00380d050e2c0d0e0c26020e04030c38050e0f2302000f000047ac2400002032002808020e00380e050f2c0d0f0d00380c0d0e26020d04040c38050d0f2302000f000047d624000020322d04000980032700800404000524000020442d088005000c00280c020d00380d050f2c0e0e0f2c0e08012c0e0c022c0e0a032c0e0b0422000048112c0c060522000046da2d0018ca18ca>, - "privateFunctionsRoot": Fr<0x01ebc21157ceca1255b54f0a5a4843ef36334372d8e1b0096787a648b464c1af>, + "artifactHash": Fr<0x103db9d8abd8d61dc45f40f7d8a6910a366ae9b0f2bc289e5384688ba20dce27>, + "contractClassId": Fr<0x0321fc89f3f6ce9730f5d48bbeacfb28f611f6a97e62fb4fd492dfbaf93b46e8>, + "packedPublicBytecode": Buffer<0x2600020401270000010480672600000403260202040126020304001f180003000280662d0880660001240000004524000002022702000104806726020204003a0d00010002270080430400052a00804400000000000000000100000000000000002b00804500000000000000000000000000000000010000000000000000000000000000000028008046046a09e6672800804704bb67ae8528008048043c6ef3722800804904a54ff53a2800804a04510e527f2800804b049b05688c2800804c041f83d9ab2800804d045be0cd192d000001804e2700804f04000901000001804f00012701804e0400010100804e0002804f2d00804f80502d028046805001008050000280502d028047805001008050000280502d028048805001008050000280502d028049805001008050000280502d02804a805001008050000280502d02804b805001008050000280502d02804c805001008050000280502d02804d80502700804f04004027008050040004270080510400382700805204000e270080530400032700805404010027008055010000270080560200002700805704000027008058000000270080590100012700805a0400012700805b0400022700805c0200042700805d0000062700805e0200082700805f04000827008060000008270080610000142700806200001b270080630200202700806404002027008065020080252400001fb228020002005189a4170a380102032602040400260206040300380406052c0801020010010501260302040100280202052c0e040500280502052c0e0405260205040300380205042c0d020400280402042c0e0402230200030000026822000002aa26020304042c08000400100003002400001fdb2c0400002c0d020300280302032c0e030200280202052c0d0504260206040200380506033a0d0003000422000002aa28020003007a81a21e0a38010304260203040623020004000002ca22000008062c08010526020604040010010601260305040100280502061f24805a805300062c0d050600280602062c0e06052c08010600000102012c0e05062c08010500000102012d0a8057000526020804092c0800092c0c060a2c0c050b2d08805d000c00100008002400001ffd2c0400002c0c0a07260209040a2c08000a2c0c060b2c0c050c2d08805d000d00100009002400001ffd2c0400002c0c0b0826020a040b2c08000b2c0c060c2c0c050d0010000a0024000020d52c0400002c0c0c090028090206012800068057000a2c0d0a051c0c0506002b02000900000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e3806090a2302000a000003d5240000214e2c08010626020904030010010901260306040100280602092c0c090a2c0e070a00280a020a2c0e080a2c08010726020804070010010801260307040100280702082c0c08092d0a8058000900280902092d0a8058000900280902092d0a8058000900280902092d0a8058000900280902092d0a8058000900280902092d0a805800092c08010800000102012c0e07082c080107260209040a0010010901260307040100280702092c0c090a2d0a8058000a00280a020a2d0a8058000a00280a020a2d0a8059000a00280a020a2d0a8058000a00280a020a2d0a8058000a00280a020a2d0a8059000a00280a020a2d0a8058000a00280a020a2d0a8058000a00280a020a2d0a8059000a2c08010900000102012c0e07092b02000700054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde4022b02000a00209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac1262b02000b00083e7911d835097629f0067531fc15cafd79a89beecb39903f69572c636f4a5a2b02000c001a7f5efaad7f315c25a918f30cc8d7333fccab7ad7c90f14de81bcc528f9935d2c08010d26020e04070010010e0126030d040100280d020e2c0c0e0f2c0e0b0f00280f020f2c0e0c0f00280f020f2d0a8055000f00280f020f2c0e070f00280f020f2c0e0a0f00280f020f2d0a8055000f2d088057000422000005db0d280004805b00072302000700001d3e22000005f02c0d0804260206000226020a04060d308050000a000b2302000b0000061324000021602d04000480032700800404000724000021722d0880050007002807020a0128000a8050000b2c0e060b26020604060d3080430006000a2302000a0000065624000021602d04000780032700800404000724000021722d08800500040028040206012800068043000a2d0a8058000a2c0e04082c0d09062b020007002df8b940e5890e4e1377e05373fae69a1d754f6935e6a780b666947431f2cdcd26020a04090c38030a0b2302000b000006c524000021602d04000680032700800404000a24000021722d0880050008002808020a00380a030b2c0e070b26020604072b020007002ecd88d15967bc53b885912e0d16866154acb6aac2d3f85e27ca7eefb2c1908326020b04090c38060b0c2302000c0000072c24000021602d04000880032700800404000a24000021722d088005000a00280a020b00380b060c2c0e070c26020704090d30805f00070008230200080000076c24000021602d04000a80032700800404000a24000021722d0880050006002806020701280007805f00082d0a805500082c0e06092c08010726020804040010010801260307040100280602082602090409002804020a26020b0406002807020c42f70008000a000c0009002807020601280006805700082c0d0804370c0005000400280202062c0d0605260207040200380607043a0d000400052200000806280200040032b6bd200a38010405230200050000082122000009322c08010426020504030010010501260304040100280402051f24805a805b00052c0d040500280502052c0e05042c08010500000102012c0e04052c08010400000102012d0a8057000426020704082c0800082c0c05092c0c040a001000070024000022002c0400002c0c0906002806020801280008805700092c0d090726020804092c0800092c0c050a2c0c040b001000080024000022002c0400002c0c0a06002806020501280005805700082c0d08041c0c0405002b02000600000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e38050608230200080000090e240000214e370c0004000700280202062c0d0605260207040200380607043a0d00040005220000093228020004008a4870ec0a38010405230200050000094d22000009e12c08010426020504020010010501260304040100280402051f24805a805a00052c0d040500280502052c0e05042c08010500000102012c0e04052c08010400000102012d0a8057000426020704082c0800082c0c05092c0c040a2d08805d000b001000070024000022792c0400002c0c09063302000600280202062c0d0605260207040200380607043a0d0004000522000009e12802000400cd8c9a7a0a3801040523020005000009fc2200000b062c08010426020504020010010501260304040100280402051f24805a805a00052c0d040500280502052c0e05042c08010500000102012c0e04052c08010400000102012d0a8057000426020704082c0800082c0c05092c0c040a001000070024000023512c0400002c0c090626020504072c0800072c0c0608001000050024000023ca2c0400002c0c08041e020005060a380504062302000600000aa226020704003b0901071c0c0405002602060401260208040300380608072c0801040010010701260304040100280402072c0e060700280702072c0e0607260207040300380407062c0c06072c0e050700280402072c0d0706260208040200380708053a0d000500062200000b062802000400f99f5a2d0a380104052602040277260206026f26020702652602080272260209026c2302000500000b3a2200000e2b2c08010a26020b04020010010b0126030a040100280a020b1f24805a805a000b2c0d0a0b00280b020b2c0e0b0a2c08010b00000102012c0e0a0b2c08010a00000102012d0a8057000a26020d040e2c08000e2c0c0b0f2c0c0a102d08805d00110010000d0024000022792c0400002c0c0f0c26020b040126020e040300380b0e0d2c08010a0010010d0126030a040100280a020d2c0e0b0d00280d020d2c0e0b0d26020d040300380a0d0b2c0c0b0d2c0e0c0d00280a020d2c0d0d0c26020e040200380d0e0b360d000b000c26020a000a26020b001e26020d040326020f040300380d0f0e2c08010c0010010e0126030c040100280c020e2c0e0d0e00280e020e2c0e0d0e26020e040300380c0e0d2c0c0d0e2c0e0a0e00280e020e2d0a8061000e00280e020e2c0e0b0e00280c020d2c0d0d0b26020e040200380d0e0a360d000a000b26020a022126020b026426020c024826020d022c2c08010e26020f040e0010010f0126030e040100280e020f2c0c0f102c0e0c1000281002102c0e071000281002102c0e091000281002102c0e091000281002102c0e061000281002102c0e0d1000281002102d0a8063001000281002102c0e041000281002102c0e061000281002102c0e081000281002102c0e091000281002102c0e0b1000281002102c0e0a102c08010a26020b040e0010010b0126030a040100280a020b26020c040d00380c0b0c2c0c0b0d0c380d0c0f160c0f0f2302000f00000d672d0a8058000d00280d020d2200000d462c08010b00000102012c0e0a0b26020a040d2d08805700052200000d840c38050a0c2302000c00001cbe2200000d962c0d0b0526020d040d06280d020b26020f040300380d0f0e2c08010c0010010e0126030c040100280c020e2c0e0d0e00280e020e2c0e0d0e26020f040300380c0f0e002805020f2d04000f80032d04000e80042d04000d800524000023f400280c020e2c0d0e0d26020f040200380e0f05360d0005000d002802020c2c0d0c0a26020d040200380c0d053a0d0005000a2200000e2b280200050097b974f70a3801050a2302000a00000e4622000016ae2c08010a26020b04070010010b0126030a040100280a020b1f34805a0003000b2c0d0a0b00280b020b2c0e0b0a2c08010b00000102012c0e0a0b2c08010a00000102012d0a8057000a26020d040e2c08000e2c0c0b0f2c0c0a100010000d00240000243a2c0400002c0c0f0c00280c020e0128000e8057000f2c0d0f0d2c0d0b0c2c0d0a0e26021004060c380e10112302001100000ee2240000216000280c02100038100e112c0d110f0128000e805a00100e380e10112302001100000f0a24000024b326021204060c381012132302001300000f21240000216000280c021200381210132c0d13110128000e805b00100e380e10122302001200000f4924000024b32c0e0c0b2c0e100a1c0c0f0e051c0c0e0c001c0c110f051c0c0f0e0026021004112c0800112c0c0b122c0c0a132d08805d0014001000100024000024c52c0400002c0c120f26021104122c0800122c0c0b132c0c0a142d08805d0015001000110024000024c52c0400002c0c131026021204132c0800132c0c0b142c0c0a150010001200240000243a2c0400002c0c1411002811020b0128000b805700122c0d120a1c0c0a0b002b02001100000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380b11122302001200001027240000214e2c08010b00000102012d0a8055000b2c08011100000102012d0a805800112c080112000001020126021300802c0e13122c080113000001020126021504162c0800162c0c0d170010001500240000259d2c0400002c0c17142c0d140d00280d020d2c0e0d140528000e8044000d00380c0d0e26020d04152c0800152c0c0e160010000d00240000259d2c0400002c0c160c2c0d0c0d00280d020d2c0e0d0c26020d02bc26020e026a260215029b26021602d32c08011726021804450010011801260317040100281702182c0c18192c0e0d1900281902192c0e0e1900281902192c0e151900281902192c0e161900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a8056001900281902192d0a805600192c0e171326020d04242d088057000522000013e80d2800058064000e2302000e00001bd422000013fd2c0d130d2d09804e000e00280e020e2d06000e804e26020e044426021504162c0800162c0c0d172c0c0e182d0880570019001000150024000025e32c0400002c0c17132c0c18142c0d131500281502152c0e15132c08011526021604090010011601260315040100281302160120804e0002001700281502183f3f0018001700162c0d151300281302132c0e131526021704182c0800182c0c0d192c0c0e1a2d08804f001b001000170024000025e32c0400002c0c19132c0c1a162c0d130d00280d020d2c0e0d13072800168050000d26021804100c380d181923020019000014e4240000216000281302180038180d192c0d1917260219041a2c08001a2c0c171b2c0c161c2d088065001d001000190024000028ba2c0400002c0c1b1826021904100c380d191a2302001a0000153224000021602d04001380032700800404001124000021722d088005001700281702190038190d1a2c0e181a0d2800168051000d2302000d000015a6220000156d2c08010d2602130409001001130126030d04010028170213002815021400280d02163f3f0016001400132c0c0d052d088057000c22000015cd01280016805a000d0e38160d1323020013000015c024000024b32c0c15052c0c0d0c22000015cd2c0d050d00280d020d2c0e0d0526021304182c0800182c0c17192c0c0c1a2c0c0e1b00100013002400002a3f2c0400002c0c190d2c0d0d0c00280c020c2c0e0c0d26020e04132c0800132c0c0d142c0c05150010000e002400002e922c0400002c0c140c2c0d0c0500280502052c0e050c26020d04132c0800132c0c0c140010000d0024000030892c0400002c0c140526020c04132c0800132c0c0b142c0c11152c0c12162c0c05172c0c0f182c0c0a192c0c101a0010000c0024000031e02c040000002802020b2c0d0b0a26020c040200380b0c053a0d0005000a22000016ae28020005009756f6200a3801050a2302000a000016c9220000187e2c08010526020a04050010010a012603050401002805020a1f24805a8050000a2c0d050a00280a020a2c0e0a052c08010a00000102012c0e050a2c08010500000102012d0a8057000526020c040d2c08000d2c0c0a0e2c0c050f2d08805d00100010000c002400003c8f2c0400002c0c0e0b26020d040e2c08000e2c0c0a0f2c0c05102d08805d00110010000d002400003c8f2c0400002c0c0f0c26020e040f2c08000f2c0c0a102c0c05110010000e002400003d672c0400002c0c100d00280d020f0128000f805700102c0d100e1c0c0e0d002b02000f00000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380d0f1023020010000017d4240000214e26020f04102c0800102c0c0a112c0c05122d08805d00130010000f002400003c8f2c0400002c0c110d2c08010500000102012d0a805500052c08010a00000102012d0a8058000a2c08010f0000010201260210004c2c0e100f26021004112c0800112c0c05122c0c0a132c0c0f142c0c0b152c0c0c162c0c0e172c0c0d18001000100024000031e02c040000002802020b2c0d0b0a26020c040200380b0c053a0d0005000a220000187e2802000500eb2b616b0a3801050a2302000a000018992200001a992c08010126020504070010010501260301040100280102051f34805a000300052c0d010300280302032c0e03012c08010300000102012c0e01032c08010100000102012d0a8057000126020a040b2c08000b2c0c030c2c0c010d2d08805d000e0010000a0024000024c52c0400002c0c0c0526020b040c2c08000c2c0c030d2c0c010e2d08805d000f0010000b0024000024c52c0400002c0c0d0a26020c040d2c08000d2c0c030e2c0c010f2d08805d00100010000c0024000024c52c0400002c0c0e0b26020d040e2c08000e2c0c030f2c0c01100010000d00240000243a2c0400002c0c0f0c26020e040f2c08000f2c0c0c100010000e0024000023ca2c0400002c0c100d26020e040f2c08000f2c0c03102c0c01112d08805d00120010000e0024000024c52c0400002c0c100c26020f04102c0800102c0c03112c0c01122d08805d00130010000f0024000024c52c0400002c0c110e1e020001030a380105032302000300001a082400003de01e020001040a38010a032302000300001a1f2400003df21e020001050a38010b032302000300001a362400003e041e020001060a38010d032302000300001a4d2400003e161e020001080a38010c032302000300001a642400003e281e020001070a38010e032302000300001a7b2400003e3a00280202052c0d050326020a04020038050a013a0d000100032200001a9926020102732602020255260203026e260205027426020a026326020b026b2c08010c26020d04110010010d0126030c040100280c020d2c0c0d0e2c0e020e00280e020e2c0e030e00280e020e2c0e0b0e00280e020e2c0e030e00280e020e2c0e060e00280e020e2c0e040e00280e020e2c0e030e00280e020e2d0a8063000e00280e020e2c0e010e00280e020e2c0e070e00280e020e2c0e090e00280e020e2c0e070e00280e020e2c0e0a0e00280e020e2c0e050e00280e020e2c0e060e00280e020e2c0e080e0b208055805900012302000100001bd326020204122c080103260204041200100104012c0c03042903000405e58f985907316290002804020400280c020526020604102d04000580032d04000480042d040006800524000023f4260205041000380405042d0a8057000400280402043b0d0302252c0d130e012800058050001526021704200c380517182302001800001bf72400002160002814021700381705182c0d181626021804440c381518192302001900001c1c24000021602d04000e80032700800404004524000021722d0880050017002817021800381815192c0e16190038050d0e26021604200c380516182302001800001c5e240000216000280c021600381605182c0d181526021804440c380e18192302001900001c8324000021602d04001780032700800404004524000021722d088005001600281602180038180e192c0e15192c0e161301280005805a000e2c0c0e0522000013e82c0d0b0c26020f040d0c38050f102302001000001cd9240000216000280e020f00380f05102c0d100d1c0c0d0f00260210040d0c380510112302001100001d0324000021602d04000c80032700800404000e24000021722d088005000d00280d021000381005112c0e0f112c0e0d0b01280005805a000c2c0c0c052200000d842c0d080726020b04020c38040b0c2302000c00001d592400002160002806020b00380b040c2c0d0c0a1c0c0a0c051c0c0c0b0002380a0b0c0928000c8044000e1c0c0e0f051c0c0f0c0002380e0c0f0928000f8044000e0528000c8044000f00380f0b0c05308045000e000b00380c0b0f0a380a0f0b2302000b00001dc526021004003b09011005280004805b000a26020f04060c380a0f102302001000001de424000021602d04000780032700800404000724000021722d088005000b00280b020f00380f0a102c0e0c100128000a805a000726020c04060c38070c0f2302000f00001e2924000021602d04000b80032700800404000724000021722d088005000a00280a020c00380c070f2c0e0e0f2c0e0a082c0d0907052800048053000a26020c04060c380a0c0e2302000e00001e76240000216000280d020c00380c0a0e2c0d0e0b0128000a805a000c26020f04060c380c0f102302001000001ea3240000216000280d020f00380f0c102c0d100e0128000a805b000f26021104060c380f11122302001200001ed0240000216000280d02110038110f122c0d121026021104090c380a11122302001200001ef524000021602d04000780032700800404000a24000021722d088005000f00280f02110038110a122c0e0b1226020a04090c380c0a0b2302000b00001f3224000021602d04000f80032700800404000a24000021722d0880050007002807020a00380a0c0b2c0e0e0b0128000c805a000a26020c04090c380a0c0e2302000e00001f7724000021602d04000780032700800404000a24000021722d088005000b00280b020c00380c0a0e2c0e100e2c0e0b0901280004805a00072c0c070422000005db270080040478000d000000800480032300800300001fda2901000105f7a1f3afa5add4ca3b010102252400001fb21e020001011e020002000a380102032302000300001ffc2400003e4c252400001fb226020604072c0800072c0c01082c0c0209001000060024000020d52c0400002c0c08050b280003805d0001002805020601280006805700072c0d070223020001000020c7220000204b0b28000380600001230200010000208222000020600b28000380620001230200010000207926020504003b0901052c0c020422000020d01c0c0201002b02000300000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e3801030523020005000020be240000214e2c0c020422000020d02c0c020422000020d02c0c0401252400001fb22c0d01032c0d020426020604030c3804060723020007000020f92400002160002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e050801280004805a00050e38040507230200070000214124000024b32c0e03012c0e05022c0c06012529010001055a02e41bb51ea99f3b010102252901000105e89d09fea1112d0e3b010102252d01800380060b00800600028007230080070000218d22000021982d008003800522000021ff2d0000018005010000018004000101008003800480092d008003800a2d008005800b0b00800a8009800c2300800c000021eb2d01800a80082d028008800b0100800a0002800a0100800b0002800b22000021ba27018005040001030080060002800622000021ff252400001fb22c0d01032c0d020426020604020c3804060723020007000022242400002160002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e050801280004805a00050e38040507230200070000226c24000024b32c0e03012c0e05022c0c0601252400001fb226020604072c0800072c0c01082c0c0209001000060024000023512c0400002c0c08050b280003805d0001002805020601280006805700072c0d0702230200010000234322000022c70b2800038060000123020001000022fe22000022dc0b2800038062000123020001000022f526020504003b0901052c0c0204220000234c1c0c0201002b02000300000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e38010305230200050000233a240000214e2c0c0204220000234c2c0c0204220000234c2c0c0401252400001fb22c0d01032c0d020426020604010c3804060723020007000023752400002160002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e050801280004805a00050e3804050723020007000023bd24000024b32c0e03012c0e05022c0c0601252400001fb2002801020301280003805700042c0d04021c0c0203051c0c0301001c0c0102052c0c02012501008003800580072d00800380082d00800480090b0080088007800a2300800a000024392d01800880062d0280068009010080080002800801008009000280092200002408252400001fb22c0d01032c0d020426020604060c38040607230200070000245e2400002160002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e050801280004805a00050e3804050723020007000024a624000024b32c0e03012c0e05022c0c060125290100010545a7ca711941e4153b010102252400001fb226020604072c0800072c0c01082c0c02090010000600240000243a2c0400002c0c08050b280003805d0001002805020601280006805700072c0d0702230200010000258f22000025130b28000380600001230200010000254a22000025280b28000380620001230200010000254126020504003b0901052c0c020422000025981c0c0201002b02000300000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380103052302000500002586240000214e2c0c020422000025982c0c020422000025982c0c0401252400001fb226020301002c080102260204042100100104012603020401002802020426020504204303b0000180540005000300042c0d020100280102012c0e01022c0c0201252400001fb22c0801052602060411001001060126030504010028050206260207041000380706072c0c06080c38080709160c0909230200090000262f2d0a805700080028080208220000260e2c08010600000102012c0e05060c3802030523020005000026ae220000264e01280003804f00070e38030708230200080000266824000024b30c380207082302000800002685220000267a2d08804f000522000026a502380203070e38030208230200080000269c2400003e5e2c0c070522000026a52c0c050422000026b92d088057000422000026b907280004805000022c08010500000102012c0e020526020804040638040809043809080a0238040a070b28000780570008230200080000271a22000026f701280002805a00070e38020708230200080000271124000024b32c0e0705220000271a2c0d05072d088057000222000027290c380207052302000500002744220000273b2c0d06012c0c0402252c08010800000102012d0a805700082d0880570005220000275e0d2800058050000923020009000027cd22000027732c0d06052c0d080926020a04100c38020a0b2302000b0000279224000021602d04000580032700800404001124000021722d0880050008002808020a00380a020b2c0e090b01280002805a00052c0e08062c0c05022200002729052800028050000a26020c04000b28000c8050000b2302000b000028040728000a8050000e0a380e020d2302000d000028042400003e7000380a050b0e380a0b0c2302000c0000281b24000024b30c380b040a2302000a00002838220000282d2d0880560009220000287d0038030b0a0e38030a0c2302000c0000284f24000024b326020c04440c380a0c0d2302000d000028662400002160002801020c00380c0a0d2c0d0d0b2c0c0b09220000287d2c0d080a1928000a805e000b1c0c090a0400380b0a090e380b090c2302000c000028a524000024b32c0e090801280005805a00092c0c0905220000275e2400001fb2260206040406380206070438070608023802080503308050000500020f2800058050000623020006000028f02400003e5e1c0c0207021c0c0706041c0c0602020530805e0002000626020802000a380802072302000700002933063806020a0b28000a805e000923020009000029332400003e701a380106070d280002805c00012302000100002958220000294d2d0880570004220000297b18380706010d2800068063000223020002000029722400003e822c0c0104220000297b1c0c03020403308053000500030f28000580530006230200060000299d2400003e5e1c0c0306021c0c0605041c0c0503020d280003805c000523020005000029cc22000029c12d08805700012200002a230530805e0003000526020702000a380703062302000600002a0006380503090b280009805e00082302000800002a002400003e7018380205030d280005806300022302000200002a1a2400003e822c0c03012200002a2300380401020e380402032302000300002a3a24000024b32c0c0201252400001fb22c0d010400280402042c0e04012c08010400000102012c0e01042c08010500000102012c0e020526020704040638020708043808070902380209060b280006805700072302000700002bca2200002a94072800028050000803308050000600090f2800068050000a2302000a00002ab92400003e5e26020a04100c38080a0b2302000b00002ad02400002160002801020a00380a080b2c0d0b061c0c090b021c0c0b0a041c0c0a0b020530805e000b000a26020d02000a380d0b0c2302000c00002b2106380a0b0f0b28000f805e000e2302000e00002b212400003e701a38060a0c0d28000b805c00062302000600002b462200002b3b2d08805700072200002b6918380c0a060d28000a8063000b2302000b00002b602400003e822c0c06072200002b6926020a04100c38080a0b2302000b00002b8024000021602d04000180032700800404001124000021722d0880050006002806020a00380a080b2c0e070b2c0e060400380209010e380201062302000600002bc124000024b32c0e01052200002bca2c0d050207280002805000052c0c05012200002bdf0d280001805200022302000200002e3a2200002bf40530805f0003000226020604000a380603052302000500002c2806380203080b280008805f00072302000700002c282400003e701c0c02030026020501002c080102260206040900100106012603020401002802020626020704084303b0000380540007000500062d08805700012200002c670d280001805b00032302000300002c812200002c7c2c0d04012505280001805000032c0d0405013080520001000626020804080c380308092302000900002cac2400002160002802020800380803092c0d090701280003805a00080e380308092302000900002cd424000024b326020a04080c38080a0b2302000b00002ceb2400002160002802020a00380a080b2c0d0b0901280003805b00080e3803080a2302000a00002d1324000024b326020b04080c38080b0c2302000c00002d2a2400002160002802020b00380b080c2c0d0c0a01280003805300080e3803080b2302000b00002d5224000024b326020b04080c38080b0c2302000c00002d692400002160002802020b00380b080c2c0d0c031c0c07080419280008805e00071c0c09080400380708090e3807090b2302000b00002da024000024b319280009805e00071c0c0a080400380708090e3807090a2302000a00002dc424000024b319280009805e00071c0c03080400380708030e380703092302000900002de824000024b326020804100c380608092302000900002dff24000021602d04000580032700800404001124000021722d0880050007002807020800380806092c0e03092c0e070401280001805a00032c0c03012200002c672c0d040226020604100c380106072302000700002e5524000021602d04000280032700800404001124000021722d0880050005002805020600380601072d0a8057000701280001805a00022c0e05042c0c02012200002bdf2400001fb22c0d020400280402042c0e04022c08010400000102012c0801052602060421001001060126030504010028050206260207042000380706072c0c06080c38080709160c09092302000900002ef42d0a8056000800280802082200002ed32c08010600000102012c0e05062c0801052602070409001001070126030504010028010207002802020800280502093f3f0009000800072c0d050100280102012c0e01052c0e05042d08805700032200002f470d280003805f00012302000100002f612200002f5c2c0d0601252c0d040226020704080c380307082302000800002f7c2400002160002802020700380703082c0d08051c0c05020026020701002c080105260208040500100108012603050401002805020826020904044303b00002805400090007000805308050000300022d08805700012200002fd10d280001805000072302000700002ff72200002fe601280003805a00012c0c01032200002f472c0d060700380201080e38020809230200090000301224000024b326020a04040c38010a0b2302000b000030292400002160002805020a00380a010b2c0d0b0926020b04200c38080b0c2302000c0000304e24000021602d04000780032700800404002124000021722d088005000a00280a020b00380b080c2c0e090c2c0e0a0601280001805a00072c0c07012200002fd12400001fb22c080103000001020126020400012c0e04032c08010400000102012d0a805800042c08010500000102012d0a80580005260206041e260207040f270200080001002d088057000222000030da0c38020709230200090000312822000030ec2c0d0502002801020800380807092c0d09061c0c0601002c0d0306043801060300380203012c0e01052c0d0402043802060300380103022c0c0201252c0d0509023806020a26020c04200c380a0c0d2302000d000031482400002160002801020c00380c0a0d2c0d0d0b1c0c0b0a002c0d030b04380a0b0c0038090c0a2c0e0a0504380b08092c0e09032c0d040a033080520002000b0f2800028052000c2302000c000031972400003e5e26020d04200c380b0d0e2302000e000031ae2400002160002801020d00380d0b0e2c0d0e0c1c0c0c0b0004380b090c00380a0c092c0e090401280002805a00092c0c090222000030da2400001fb22c08010926020a04030010010a012603090401002809020a2c0c0a0b2d0a8061000b00280b020b2c0e050b2a02000a000000000000000002000000000000000026020f04102c0800102c0c0a110010000f002400003e942c0400002c0c110b2c0c120c2c0c130d2c0c140e2c0d0b0a00280a020a2c0e0a0b2c08010a00000102012c0e0b0a2c0d0c0b00280b020b2c0e0b0c2c08010b00000102012c0e0c0b2c08010c00000102012c0e0d0c2c08010d00000102012c0e0e0d2d088057000822000032a90d280008805b00012302000100003c1c22000032be260203040e2c08000e2c0c0a0f2c0c0b102c0c0c112c0c0d1200100003002400003f342c0400002c0c0f021e020003031e020008001e020009042c08010a26020b04e10010010b0126030a040100280a020b26020c04e000380c0b0c2c0c0b0d0c380d0c0e160c0e0e2302000e0000333f2d0a8056000d00280d020d220000331e2c08010b00000102012c0e0a0b26020c040d2c08000d2c0c060e0010000c00240000259d2c0400002c0c0e0a2c0d0a0600280602062c0e060a26020c040d2c08000d2c0c030e0010000c00240000259d2c0400002c0c0e062c0d060300280302032c0e030626020c040d2c08000d2c0c080e0010000c00240000259d2c0400002c0c0e032c0d030800280802082c0e080326020c040d2c08000d2c0c090e0010000c00240000259d2c0400002c0c0e082c0d080900280902092c0e090826020c040d2c08000d2c0c040e0010000c00240000259d2c0400002c0c0e092c0d090400280402042c0e040926020c040d2c08000d2c0c020e0010000c00240000259d2c0400002c0c0e042c0d040200280202022c0e020426020c040d2c08000d2c0c070e0010000c00240000259d2c0400002c0c0e022c0d020c00280c020c2c0e0c0226020c048026020d04c026020e046026020f04a02d0880570001220000349f0d28000180640010230200100000393122000034b42c0d0b022d09804e000300280302032d060003804e2c08010300000102012d0a804e000326020404e02d088057000122000034e80d2800018053000623020006000038a122000034fd26020a040e2c08000e2c0c020f2c0c04102c0c0d110010000a002400003fad2c0400002c0c0f082c0c10092c0d080200280202022c0e0208072800098050000226020b04100c38020b0c2302000c000035542400002160002808020b00380b020c2c0d0c0a26020c040d2c08000d2c0c0a0e2c0c090f2d08806500100010000c0024000028ba2c0400002c0c0e0b26020c04100c38020c0d2302000d000035a224000021602d04000880032700800404001124000021722d088005000a00280a020c00380c020d2c0e0b0d0d28000980510002230200020000361a22000035dd2c0d03022c08010326020804090010010801260303040100280a02080028020209002803020b3f3f000b000900082c0c03012d088057000622000036452c0d030201280009805a00030e38090308230200080000363824000024b32c0c02012c0c030622000036452c0d010300280302032c0e0301260208040b2c08000b2c0c0a0c2c0c060d2c0c040e00100008002400002a3f2c0400002c0c0c032c0d030400280402042c0e040326020604082c0800082c0c03092c0c010a00100006002400002e922c0400002c0c09042c0d040100280102012c0e010426020304082c0800082c0c0409001000030024000030892c0400002c0c090126020300052c08010426020604040010010601260304040100280402062c0c06082c0e030800280802082c0e010800280802082c0e05082c0d040300280302032c0e03042a020003000000000000000003000000000000000026020a040b2c08000b2c0c030c0010000a002400003e942c0400002c0c0c052c0c0d062c0c0e082c0c0f092c0d050300280302032c0e03052c08010300000102012c0e05032c0d060500280502052c0e05062c08010500000102012c0e06052c08010600000102012c0e08062c08010800000102012c0e09082d088057000222000037b20d28000280530009230200090000382e22000037c726020404092c0800092c0c030a2c0c050b2c0c060c2c0c080d00100004002400003f342c0400002c0c0a021e0200030032380002000300040b28000480550003230200030000381424000042843438000100070003230200030000382924000042963302000225230200090000383b220000389026020a04030c38020a0b2302000b000038522400002160002804020a00380a020b2c0d0b0926020a040b2c08000b2c0c030c2c0c050d2c0c060e2c0c080f2c0c09100010000a0024000042a82c040000220000389001280002805a00092c0c090222000037b20530804f0001000626020a040e2c08000e2c0c020f2c0c04102c0c06110010000a002400003fad2c0400002c0c0f082c0c10092c0d080600280602062c0e06082c0d03062c08010a26020b04090010010b0126030a0401002808020b002806020c00280a020e3f3f000e000c000b2c0d0a0600280602062c0e060a2c0e0a0301280001805a00062c0c060122000034e82c0d0b1026021204200c38011213230200130000394c240000216000280a021200381201132c0d131126021304e00c38011314230200140000397124000021602d0400108003270080040400e124000021722d0880050012002812021300381301142c0e1114012800018064001026021304200c3801131423020014000039b62400002160002806021300381301142c0d141126021404e00c3810141523020015000039db24000021602d0400128003270080040400e124000021722d0880050013002813021400381410152c0e111501280001804f001026021204200c380112142302001400003a202400002160002803021200381201142c0d141126021404e00c381014152302001500003a4524000021602d0400138003270080040400e124000021722d0880050012002812021400381410152c0e11150038010e1026021304200c380113142302001400003a872400002160002808021300381301142c0d141126021404e00c381014152302001500003aac24000021602d0400128003270080040400e124000021722d0880050013002813021400381410152c0e11150038010c1026021204200c380112142302001400003aee2400002160002809021200381201142c0d141126021404e00c381014152302001500003b1324000021602d0400138003270080040400e124000021722d0880050012002812021400381410152c0e11150038010f1026021304200c380113142302001400003b552400002160002804021300381301142c0d141126021404e00c381014152302001500003b7a24000021602d0400128003270080040400e124000021722d0880050013002813021400381410152c0e11150038010d1026021204200c380112142302001400003bbc2400002160002802021200381201142c0d141126021404e00c381014152302001500003be124000021602d0400138003270080040400e124000021722d0880050012002812021400381410152c0e11152c0e120b01280001805a00102c0c1001220000349f2302000100003c292200003c7e26020204020c380802032302000300003c402400002160002809020200380208032c0d0301260202040e2c08000e2c0c0a0f2c0c0b102c0c0c112c0c0d122c0c0113001000020024000042a82c0400002200003c7e01280008805a00012c0c010822000032a92400001fb226020604072c0800072c0c01082c0c020900100006002400003d672c0400002c0c08050b280003805d0001002805020601280006805700072c0d07022302000100003d592200003cdd0b280003806000012302000100003d142200003cf20b280003806200012302000100003d0b26020504003b0901052c0c02042200003d621c0c0201002b02000300000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0e380103052302000500003d50240000214e2c0c02042200003d622c0c02042200003d622c0c0401252400001fb22c0d01032c0d020426020604040c380406072302000700003d8b2400002160002803020600380604072c0d07052c08010626020704020010010701260306040100280602072c0c07082c0e050801280004805a00050e380405072302000700003dd324000024b32c0e03012c0e05022c0c0601252901000105be11c73bbb04a4fc3b0101022529010001057425c86e086b03c13b010102252901000105e3b1cb17b4b196ae3b010102252901000105203960faa7b733883b01010225290100010597178cf85aace5563b0101022529010001053b7ee0a2f674688e3b01010225290100010565a49ce5d4594d753b010102252901000105288692b047dcfd433b010102252901000105646188a8c6cf94cb3b010102252901000105c96f933b139de9163b010102252400001fb22c08010226020304040010010301260302040100280202032c0c03042d0a8058000400280402042d0a8058000400280402042d0a805800042c0d020300280302032c0e03022c08010326020404050010010401260303040100280302042c0c04052d0a8058000500280502052d0a8058000500280502052d0a8058000500280502052c0e01052d08805500042c0c02012c0c03022d0880570003252400001fb22c0d04050b280005805500062302000600003f5626020704003b09010726020504062c0800062c0c01072c0c02082c0c03092c0c040a001000050024000043d32c0400002c0d01052c0d02062c0d03072c0e05012c0e06022c0e07032d0a80590004002806020201280002805700032c0d0301252400001fb22c0801052602060411001001060126030504010028050206260207041000380706072c0c06080c38080709160c09092302000900003ff92d0a8057000800280802082200003fd82c08010600000102012c0e05060c380203052302000500004078220000401801280003804f00070e38030708230200080000403224000024b30c38020708230200080000404f22000040442d08804f0005220000406f02380203070e3803020823020008000040662400003e5e2c0c0705220000406f2c0c050422000040832d0880570004220000408307280004805000022c08010500000102012c0e020526020804040638040809043809080a0238040a070b2800078057000823020008000040e422000040c101280002805a00070e3802070823020008000040db24000024b32c0e070522000040e42c0d05072d088057000222000040f30c38020705230200050000410e22000041052c0d06012c0c0402252c08010800000102012d0a805700082d088057000522000041280d280005805000092302000900004197220000413d2c0d06052c0d080926020a04100c38020a0b2302000b0000415c24000021602d04000580032700800404001124000021722d0880050008002808020a00380a020b2c0e090b01280002805a00052c0e08062c0c050222000040f3052800028050000a26020c04000b28000c8050000b2302000b000041ce0728000a8050000e0a380e020d2302000d000041ce2400003e7000380a050b0e380a0b0c2302000c000041e524000024b30c380b040a2302000a0000420222000041f72d088056000922000042470038030b0a0e38030a0c2302000c0000421924000024b326020c04e00c380a0c0d2302000d000042302400002160002801020c00380c0a0d2c0d0d0b2c0c0b0922000042472c0d080a1928000a805e000b1c0c090a0400380b0a090e380b090c2302000c0000426f24000024b32c0e090801280005805a00092c0c09052200004128290100010561be47556b1380913b010102252901000105b87a3944b3b13c563b010102252400001fb22c0d03062c0d04070b2800078055000823020008000042ce26020904003b0901090b28000680530007230200070000435f22000042e32c0d01062c0d02072c0d03082c0d040926020b04030c38080b0c2302000c0000430a24000021602d04000680032700800404000424000021722d088005000a00280a020b00380b080c2c0e050c01280008805a00050e38080506230200060000434a24000024b32c0e0a012c0e07022c0e05032c0e090422000043d226020604072c0800072c0c01082c0c02092c0c030a2c0c040b001000060024000043d32c0400002c0d01062c0d02072c0d04082d04000680032700800404000424000021722d0880050009002809020a0128000a8057000b2c0e050b2c0e09012c0e07022d0a805a00032c0e080422000043d2252400001fb22d088057000522000043e30d28000580530006230200060000444e22000043f82c0d01052c0d02062c0d03072c0d04082c08010926020a04050010010a012603090401002806020a26020b0404002809020c3e0f000a000c2c0d090600280602062c0e06092c0e05012c0e09022c0e07032c0e0804252c0d03060c3805060701280005805a0006230200070000446c220000451d2c0d01072c0d02082c0d03092c0d040a26020c04040c38050c0d2302000d000044932400002160002808020c00380c050d2c0d0d0b26020d04030c38050d0e2302000e000044b82400002160002807020d00380d050e2c0d0e0c00380b0c0d26020c04040c38050c0e2302000e000044e224000021602d04000880032700800404000524000021722d088005000b00280b020c00380c050e2c0e0d0e2c0e07012c0e0b022c0e09032c0e0a04220000451d2c0c060522000043e32d0018ca18ca>, + "privateFunctionsRoot": Fr<0x2e48f56e2f89ae8cad557d2375c4bb45e7061689f591280b2038108dda8067ad>, "version": 1, } `; diff --git a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap index 98946eb8d69b..c7644bfa160b 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap +++ b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/private_function_broadcasted_event.test.ts.snap @@ -4,28 +4,28 @@ exports[`PrivateFunctionBroadcastedEvent parses an event as emitted by the Contr PrivateFunctionBroadcastedEvent { "artifactFunctionTreeLeafIndex": 5, "artifactFunctionTreeSiblingPath": [ - Fr<0x0a3e92c5ed495ea48c51f5a0382513a803cc73b357a6771bbc41530ae4c4bc3d>, + Fr<0x1fc7418174246337dbc421413553f3870957829e976a6651f2f07ea092d8e9bf>, Fr<0x03b075046b71ff5f8e0792de4b82ddc979fcb3b8c03abe12972e65c57759fb46>, - Fr<0x2cee63a8ffb1c63b886b7dba5ae1677fc71d848a6fb52e8156dfa49136faaec8>, + Fr<0x24b0baef5786684223885b4aee14327729edb03f2b1e3569f1644a7c25734ff5>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, ], "artifactMetadataHash": Fr<0x3049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea>, - "contractClassId": Fr<0x270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f10150>, + "contractClassId": Fr<0x1a9ddbb308ed22ba60da2f2e98f3701846e4464d42ec98d15f7225fc0568e8ce>, "privateFunction": BroadcastedPrivateFunction { - "bytecode": Buffer<0x1f8b08000000000000ffeddd05745b67c2706b87390e3333c7761c666666666666680a699b32738a4953a694999b5298999919efd68cfd55759d76662a77baef3f5a6b2fcb967cfcbc47872cd94789c2fe7919161e16563dfc9fd7135192988f89a9409cafc57e0cbe9e2c9efba589e76be9e2f95a783c5fcb18cfd7b2519d385fcb1fcffd0ac4f3b582f17cad503c5f2b1ef3b5e04ba2988f75623e5688a8141d3db072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab4456ac52714054950a15065689ae52b96abfaa9523aa464657181839a862d50a8322fe79599ffe976945fca94b54ff84746ef8cf9dd171bf10b065a2a441d6c07cb81273bd44d82fd74b065ddf10739fd8efdbc8e79b68336d49ffcbd7632f49e2cc83883f77892c15c2696d4c1fbac7666bc896a1f81f9bad418fcda6a0eb9b83ae6f89f3d86ce3f3edb48376c6f3d8240ef163533c84cbfaaed0cdcfc8e0ed4960ba05e2ccdbb89744219e2f89c242bb6cc41a33c45cdfcd98f6d05eda47fbe9001da44374988ed0513a46c7e9049da453e9636646f2a005222167c6c110ae28f1704335eda8e079713afd3f3f9e491ff6ebbd53e086cb71be16b853dca52ad45bc18321d8720d1cf4cfcbe9106e05cf84f0c10d2c9429c2feb535f4cfba83e74164950a5151952b04ee5765404464f480fe5155a2a206f48b8ee81fd1b77fd4c0aad191550745474557e83fa07f3fa6d9377250c4a0befdab0eaaf2cf69057bcfa64f407060e27137e17f167f36849bdd73215cb0126a1e9e4bffdbe9fed979782ec45bb8508ffbcc35c6fd67a77b3ec48740b11bd4f331cbf95fb9973a22dc4b5d88d9d85c8cbb97ba10cf5eeae25fb0973a12c2bdd485106e4c2e4af7521712682f75297d02822f25c05eea5208f75297ffe67ba97facbc09b097bafc37df4b5dbcc6b8ffec74af24d05eeaca7f612f755cb897ba1abbb1090ffbf51ee96a3c7ba9c09d127a2f753c847ba9aba1dc98843bf7525713682f95283c01c18189877a2f9528740f6064e2f0bff75e2a300f1387877e2f9538fcefbd970aaca4f18dfbcf4e374978c2eca59284fff57ba953c2bd54d2988d4db2b87ba9c00d71f752c9fe82bdd4a910eea592867063924cba970a9e07a1dc4b250f4f4070f204d84b250fe15e2ac5df7c2f1598872912602f95e26fbe974a768d71ffd9e9a64ca0bd54caf0dfee99426d4f15327b64bff85eb00d4c3ff685d9dd412fd2ee4b7fed17d353f33d69282da50b4ff817d3f784f07994d4215cf7d38778b98afbd8a40f7a6cd2045d4f1b743d5df8af1f9b703ecf401929533c8f4da897cfccfff93ca8f0afcc83e0e5736fd032191ef4f5cc71e641163ecf4ad928fb5f300f72846c39a8109d90ce9cffb97340c4bff058e5087a4cf6073d560782aee78cf358e5e2f3dc9487f2fe05db9210bef41b992b84db927c21de3727d4fc3b14c2f9973b84f32fbf64fe1d0ee1fccb13c2f9572081f765f982b60df983ae1708ba9e37ceb6a1209f17a2c254e42fd83684f005b7c882217c6c8a4a96eda3219c7f854238ff8a49e6dfb110cebfc2219c7fc51378db5034681b502ce87af1a0eb45e26c1b4af079492a45a5ff826d43085fe6882c11c2c7a68c64d93e11c265bb6408e75f59c9fc3b19c2f9572a84f3af5c026f1bca046d03ca065d2f1774bd749c6d43793e8fa0488afa0bb60d217c7239b27c081f9b0a09fcd854087a0c2282ae47065d8f8af3d844f37945aa4495ff82dfcdab846e1e0c8a6f1e54091a6b74d0f52cbff3fc44553eaf16f38f533562e641d298fbfe157fe85f3584cb45f0f39f35635e54a815f7d5a8c00d73e27cad56ccd7822fa15e31ab867065aaf9af4fabff1f4c2bb256885f8d4a1c16ff4ba461ffe6fcfc237758022e943543bcb18abdd48ebb30d6fe175e060de5c2f207d6c83fb83da2760817e23ae1215b187ef54a489d7f6165feb3f65a219c0fa19ca775ff8d79fa473f2b789ed60dda68a60c9a9fc1f334e2cf5d22affcfef4a2fa0f8aac507160e58a1195fa46571c50a942d480a8ca1103a22b0e8a041c55359a5933a87f74950155a22a0c8aaa1cd5ff4a687dff58c662376cb13b92d8bd6aad98ebf5f8589f1a84ffb57f2fd220817e7308f163fcabbf176918b3876e1477a318b821eedf8b34fa173694117feef2ab99f867ff5ea4610857ea4621de43ff557f2f123c0f42f9f7228dc313101c9878a8ff5ea471087f276b12c2052ba1e66193f0d0ffbd4893106fe1423dee46d718f79f9d6ed3101f8ac66e509b86ff76cf14eaa3a450be3e572f84cb7db3ffd20635e2cf5d229b85785988bd340f4f4070f3f0d04fb745026f0423fedce51fe36e11fecb0c0ed1747ff749dd3f3b1f42f96270fd103e3e2da52b6bcb045a595b852720b85502acacadffe62b6b60dcadffe29535e2cf5d7eb5378cf87397906e4cdb8478a14f15f378b709fa5dbb7ed0f516e1bf3c537d28e82fbb0e075d8ffdb7edb6dcb71db58ff99ed869d7bbc6b41b054dfb8feed3818f1da95378c2ac9b2d6296d1501f5d76fe9b1f5527d4b8bb8470fd090bba240eb1b35108d7cdae211e73dcb146fcb94b6460fd0ce5e31258273b27c0b2d32d819e6b0bf5b2733184ff58dbfd6fbeec04b6fd217c9a2c32b0ae744b8065a74788979d50cfc7c03213ca638bc072d32301e663a2b084590743edec19ba793920be57fc7b061d8b049685d8ebdbd25ffb15ff5e7cde9bfa50dff0843fc5e1be106e877a497f190ce17f0dfdea97c17ee10908ee9700bf0cf6ff9bff321818777fd9333709b5a0fe59d700e9ca1a4a77b077607802820726c0ca3ae86fbeb206c63d288156d6501f09f48fb1867aefda3ffceff9780756d8c0862e71d8b52f217257887d5d2bf812ea65ad4458e87706a1369614184b2580f1fffe683559d86f2fa11e4042fdea11162267c58ad115060dec5b3921e7c1b6043a3d4da89dbb24ce24a19bd6affe087a70ccce7148dc3fb10adc5020ecd79750ef990687706f32343cb42b70ec7c181acf7c08f5833b24c487c1c9c2fe9ac3e084ded0857c811b1ac2056e58022d70c3fe8515efeff4fb60e9b0845908423de6102eac916524634e1cc23197958c39847bcac8727fd19823fedc25b27c08e79fe5c82d22cce18c9438a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc9540cec4719c7fa7f7a5defd178d39e2cf5d22f78470fe0d0d772c8f7bc31cce7d12e77e89f380c47950e23c24711e96388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c47951e2bc24715e9638af489c5725cec0040dce44126762893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c126746893393c49959e2cc9240cebff3df0564fd7f70ccd924cb63f6447f7efe55eddbaf7f4464c5be09f9d82409e198734896c7f2211c734ec9f298eb2f7a6c22fedc253277a2d03dcebbd23bc69c2784631e2cf9bba9bc92f5269fc4995fe22c20711694380b499c8525ce2212675189b398c4595ce22c21719694384b499ca525ce3212675989b39cc4595ee28c90382325ce2889b382c4192d715694382b499c9525ce2a12675589b39ac4595de2ac2171d694386b499cb525ce3a12675d89b39ec4595fe26c20713694381b499c8d25ce2612675389b399c4d95ce26c2171b694385b499cad25ce3612675b89b39dc4d95ee2ec20717694383b499c9d25ce2e12675789b39bc4d95de2ec2171f694387b499cbd25ce3e12675f89b39fc4d95fe21c20710e943807499c8325ce2112e750897398c4395ce21c21718e943847499ca325ce3112e75889739cc4395ee29c20714e943827499c9325ce2912e75489739ac4395de29c2171ce943867499cb325ce3912e77512e75c89f37a89f30689f34689f32689739ec479b3c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e2bc4be2bc5be2bc47e2bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c44e27c54e27c4ce27c5ce27c42e25c20713e29713e25713e2d713e23713e2b713e27712e943817499ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce5725ced724ced725ce3724ce3725ceb724ce2512e7db12e73b12e7bb12e77b12e7fb12e70712e78712e74712e7c712e72712e7a712e76712e7e712e71712e79712e75712e7d712e73712e7b712e77712e75289f37b89f30789f34789f32789f367897399c4b95ce25c2171ae943857499cab25ce3512e75a89739dc4b95ee2dc20716e943837499c9b25ce2d12e75689739bc4b95de2dc2171ee943877499cbb25ce3d12e75e89739fc4b95fe23c20711e94380f499c8725ce2312e75189f398c4795ce23c21719e94384f499ca725ce3312e75989f39cc4795ee2bc20715e94382f499c9725ce2b12e75589332cb1c39948e24c2c71269138934a9cc924cee412670a8933a5c4994ae24c2d71a69138d34a9ce924cef41267b8c49941e2cc2871669238334b9c5924ceac1267368933bbc49943e2cc2971e69238734b9c7924cebc12673e8933bfc45940e22c28711692380b4b9c4524cea212673189b3b8c45942e22c29719692384b4b9c6524ceb212673989b3bcc4192171464a9c5112670589335ae2ac28715692382b4b9c5524ceaa12673589b3bac45943e2ac2971d692386b4b9c7524ceba12673d89b3bec4d940e26c28713692381b4b9c4d24cea612673389b3b9c4d942e26c2971b692385b4b9c6d24ceb612673b89b3bdc4d941e2ec28717692383b4b9c5d24ceae12673789b3bbc4d943e2ec2971f692387b4b9c7d24cebe12673f89b3bfc43940e21c28710e9238074b9c4324cea112e7308973b8c43942e21c29718e9238474b9c6324ceb112e7388973bcc43941e29c28714e9238274b9c5324cea912e7348973bac43943e29c2971ce9238674b9c7324ceeb24ceb912e7f512e70d12e78d12e74d12e73c89f36689f31689f3568973bec4799bc479bbc47987c479a7c47997c479b7c4798fc479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c4f988c4f9a8c4f998c4f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c56e27c4ee25c28712e92389f9738174b9c2f489c2f4a9c2f499c2f4b9caf489caf4a9caf499caf4b9c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725cef724cef725ce0f24ce0f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f24ce2f25ceaf24ceaf25ce6f24ce6f25ceef24cea512e7f712e70f12e78f12e74f12e7cf12e7328973b9c4b942e25c2971ae9238574b9c6b24ceb512e73a8973bdc4b941e2dc28716e9238374b9c5b24cead12e7368973bbc4b943e2dc2971ee9238774b9c7b24cebd12e73e8973bfc47940e23c28711e92380f4b9c4724cea312e73189f3b8c47942e23c29719e92384f4b9c6724ceb312e73989f3bcc47941e2bc28715e92382f4b9c5724ceab12675812873391c49958e24c227126953893499cc925ce1412674a893395c4995ae24c2371a69538d3499ce925ce70893383c49951e2cc2471669638b3489c5925ce6c126776893387c49953e2cc2571e69638f3489c7925ce7c12677e89b380c45950e22c24711696388b489c4525ce6212677189b384c45952e22c2571969638cb489c6525ce72126779893342e28c9438a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc2571ee9638f7489c7b25ce7d12e77e89f380c47950e23c24711e96388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c47951e2bc24715e9638af489c5725ceb0a40e67228933b1c49944e24c2a71269338934b9c2924ce9412672a8933b5c49946e24c2b71a69338d34b9ce11267068933a3c49949e2cc2c71669138b34a9cd924ceec12670e8933a7c4994be2cc2d71e69138f34a9cf924cefc12670189b3a0c45948e22c2c711691388b4a9cc524cee212670989b3a4c4594ae22c2d71969138cb4a9ce524cef2126784c419297146499c1524ce6889b3a2c45949e2ac2c71569138ab4a9cd524ceea12670d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa12670389b3a1c4d948e26c2c713691389b4a9ccd24cee612670b89b3a5c4d94ae26c2d71b69138db4a9ced24cef612670789b3a3c4d949e2ec2c71769138bb4a9cdd24ceee12670f89b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e7008973a0c43948e21c2c710e9138874a9cc324cee112e7088973a4c4394ae21c2d718e9138c74a9ce324cef112e7048973a2c43949e29c2c714e9138a74a9cd324cee912e70c8973a6c4394be29c2d71ce9138af9338e74a9cd74b9c37489c374a9c37499cf324ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d12e79d12e75d12e7dd12e73d12e7bd12e77d12e7fd12e70312e78312e74312e7c312e72312e7a312e76312e7e312e71312e70289f34989f32989f36989f31989f35989f3398973a1c4b948e27c5ee25c2c71be2071be2871be2471be2c71be2271be2a71be2671be2e71be2171be2971be25712e9138df9638df9138df9538df9338df97383f90383f94383f92383f96383f91383f95383f93383f9738bf9038bf9438bf9238bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c3f4a9c3f499c3f4b9ccb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a9ceb24cef512e7068973a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e8973a7c4b94be2dc2d71ee9138f74a9cfb24cefd12e70189f3a0c47948e23c2c711e91388f4a9cc724cee312e70989f3a4c4794ae23c2d719e9138cf4a9ce724cef312e70589f3a2c47949e2bc2c715e9138af4a9c61c91cce44126762893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c126746893393c49959e2cc2271669538b3499cd925ce1c12674e893397c4995be2cc2371e69538f3499cf925ce0212674189b390c45958e22c22711695388b499cc525ce1212674989b394c4595ae22c2371969538cb499ce525ce08893352e28c92382b489cd112674589b392c45959e2ac2271569538ab499cd525ce1a12674d89b396c4595be2ac2371d69538eb499cf525ce0612674389b391c4d958e26c22713695389b499ccd25ce1612674b89b395c4d95ae26c2371b69538db499ced25ce0e12674789b393c4d959e2ec2271769538bb499cdd25ce1e12674f89b397c4d95be2ec2371f69538fb499cfd25ce0112e740897390c43958e21c22710e953887499cc325ce1112e748897394c4395ae21c23718e9538c7499ce325ce0912e744897392c43959e29c22714e9538a7499cd325ce1912e74c897396c4395be29c23715e2771ce9538af97386f90386f94386f9238e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b24ce3b25cebb24cebb25ce7b24ce7b25cefb24cefb25ce0724ce0725ce8724ce8725ce4724ce4725cec724cec725ce2724ce0512e79312e75312e7d312e73312e7b312e77312e742897391c4f9bcc4b958e27c41e27c51e27c49e27c59e27c45e27c55e27c4de27c5de27c43e27c53e27c4be25c2271be2d71be2371be2b71be2771be2f717e20717e28717e24717e2c717e22717e2a717e26717e2e717e21717e29717e25717e2d717e23717e2b717e27712e9538bf97387f90387f94387f92387f963897499ccb25ce1512e74a897395c4b95ae25c2371ae9538d7499ceb25ce0d12e746897393c4b959e2dc22716e9538b7499cdb25ce1d12e74e897397c4b95be2dc2371ee9538f7499cfb25ce0312e74189f390c47958e23c22711e95388f499cc725ce1312e74989f394c4795ae23c23719e9538cf499ce725ce0b12e74589f392c47959e2bc22715e9538c3923b9c8924cec41267128933a9c4994ce24c2e71a69038534a9ca924ced412671a8933adc4994ee24c2f71864b9c1924ce8c1267268933b3c49945e2cc2a71669338b34b9c3924ce9c12672e8933b7c49947e2cc2b71e69338f34b9c0524ce8212672189b3b0c45944e22c2a711693388b4b9c2524ce9212672989b3b4c45946e22c2b71969338cb4b9c111267a4c4192571569038a325ce8a12672589b3b2c45945e2ac2a71569338ab4b9c3524ce9a12672d89b3b6c45947e2ac2b71d69338eb4b9c0d24ce8612672389b3b1c4d944e26c2a713693389b4b9c2d24ce9612672b89b3b5c4d946e26c2b71b69338db4b9c1d24ce8e12672789b3b3c4d945e2ec2a71769338bb4b9c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb4b9c0324ce8112e7208973b0c43944e21c2a710e9338874b9c2324ce9112e7288973b4c43946e21c2b718e9338c74b9c1324ce8912e7248973b2c43945e29c2a714e9338a74b9c3324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f71de2071de2871de2471ce93386f96386f91386f9538e74b9cb7499cb74b9c77489c774a9c77499c774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f499c0f4b9c8f489c8f4a9c8f499c8f4b9c4f489c0b24ce2725cea724cea725ce6724ce6725cee724ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f9b2c4f98ac4f9aac4f99ac4f9bac4f986c4f9a6c4f996c4b944e27c5be27c47e27c57e27c4fe27c5fe2fc40e2fc50e2fc48e2fc58e2fc44e2fc54e2fc4ce2fc5ce2fc42e2fc52e2fc4ae2fc5ae2fc46e2fc56e2fc4ee25c2a717e2f71fe2071fe2871fe2471fe2c712e9338974b9c2b24ce9512e72a8973b5c4b946e25c2b71ae9338d74b9c1b24ce8d12e7268973b3c4b945e2dc2a716e9338b74b9c3b24ce9d12e72e8973b7c4b947e2dc2b71ee9338f74b9c0724ce8312e72189f3b0c47944e23c2a711e93388f4b9c2724ce9312e72989f3b4c47946e23c2b719e9338cf4b9c1724ce8b12e72589f3b2c47945e2bc2a7186a5703813499c8925ce24126752893399c4995ce24c2171a6943853499ca925ce3412675a89339dc4995ee20c973833489c1925ce4c12676689338bc49955e2cc267166973873489c3925ce5c12676e89338fc49957e2cc2771e697380b489c0525ce4212676189b388c45954e22c26711697384b489c2525ce5212676989b38cc45956e22c27719697382324ce4889334ae2ac2071464b9c1525ce4a12676589b38ac45955e2ac26715697386b489c3525ce5a12676d89b38ec45957e2ac2771d697381b489c0d25ce4612676389b389c4d954e26c26713697385b489c2d25ce5612676b89b38dc4d956e26c2771b697383b489c1d25ce4e12676789b38bc4d955e2ec26717697387b489c3d25ce5e12676f89b38fc4d957e2ec2771f6973807489c0325ce4112e760897388c43954e21c26710e973847489c2325ce5112e76889738cc43956e21c27718e973827489c1325ce4912e76489738ac43955e29c26714e973867489c3325ce5912e76c89738ec4799dc43957e2bc5ee2bc41e2bc51e2bc49e29c2771de2c71de2271de2a71ce97386f93386f9738ef9038ef9438ef9238ef9638ef9138ef9538ef9338ef97381f90381f94381f92381f96381f91381f95381f93381f97389f903817489c4f4a9c4f499c4f4b9ccf489ccf4a9ccf499c0b25ce4512e7f312e76289f30589f34589f32589f36589f31589f35589f33589f37589f30d89f34d89f32d897389c4f9b6c4f98ec4f9aec4f99ec4f9bec4f981c4f9a1c4f991c4f9b1c4f989c4f9a9c4f999c4f9b9c4f985c4f9a5c4f995c4f9b5c4f98dc4f9adc4f99dc4b954e2fc5ee2fc41e2fc51e2fc49e2fc59e25c26712e973857489c2b25ce5512e76a89738dc4b956e25c2771ae973837489c1b25ce4d12e76689738bc4b955e2dc26716e973877489c3b25ce5d12e76e89738fc4b957e2dc2771ee97380f489c0725ce4312e76189f388c47954e23c26711e97384f489c2725ce5312e76989f38cc47956e23c27719e97382f489c1725ce4b12e76589f38ac47955e20c4be970269238134b9c4924cea41267328933b9c49942e24c2971a69238534b9c6924ceb412673a8933bdc4192e71669038334a9c9924cecc1267168933abc4994de2cc2e71e69038734a9cb924cedc12671e8933afc4994fe2cc2f711690380b4a9c8524cec212671189b3a8c4594ce22c2e719690384b4a9ca524ced212671989b3acc4594ee22c2f7146489c91126794c45941e28c96382b4a9c9524ceca12671589b3aac4594de2ac2e71d690386b4a9cb524ceda12671d89b3aec4594fe2ac2f713690381b4a9c8d24cec612671389b3a9c4d94ce26c2e71b690385b4a9cad24ced612671b89b3adc4d94ee26c2f717690383b4a9c9d24cece12671789b3abc4d94de2ec2e71f690387b4a9cbd24cede12671f89b3afc4d94fe2ec2f710e9038074a9c8324cec112e7108973a8c4394ce21c2e718e9038474a9ca324ced112e7188973acc4394ee21c2f714e9038274a9c9324cec912e7148973aac4394de29c2e71ce9038674a9cb324ced912e71c89f33a8973aec479bdc47983c479a3c47993c4394fe2bc59e2bc45e2bc55e29c2f71de2671de2e71de2171de2971de2571de2d71de2371de2b71de2771de2f713e20713e28713e24713e2c713e22713e2a713e26713e2e713e21712e90389f94389f92389f96389f91389f95389f9338174a9c8b24cee725cec512e70b12e78b12e74b12e7cb12e72b12e7ab12e76b12e7eb12e71b12e79b12e75b12e71289f36d89f31d89f35d89f33d89f37d89f30389f34389f32389f36389f31389f35389f33389f37389f30b89f34b89f32b89f36b89f31b89f35b89f33b8973a9c4f9bdc4f983c4f9a3c4f993c4f9b3c4b94ce25c2e71ae9038574a9cab24ced512e71a8973adc4b94ee25c2f716e9038374a9c9b24cecd12e7168973abc4b94de2dc2e71ee9038774a9cbb24cedd12e71e8973afc4b94fe2dc2f711e90380f4a9c8724cec312e71189f3a8c4794ce23c2e719e90384f4a9ca724ced312e71989f3acc4794ee23c2f715e90382f4a9c9724cecb12e71589f3aac41996cae14c247126963893489c4925ce64126772893385c49952e24c2571a69638d3489c6925ce7412677a89335ce2cc207166943833499c9925ce2c12675689339bc4995de2cc2171e6943873499cb925ce3c12675e89339fc4995fe22c20711694380b499c8525ce2212675189b398c4595ce22c21719694384b499ca525ce3212675989b39cc4595ee28c90382325ce2889b382c4192d715694382b499c9525ce2a12675589b39ac4595de2ac2171d694386b499cb525ce3a12675d89b39ec4595fe26c20713694381b499c8d25ce2612675389b399c4d95ce26c2171b694385b499cad25ce3612675b89b39dc4d95ee2ec20717694383b499c9d25ce2e12675789b39bc4d95de2ec2171f694387b499cbd25ce3e12675f89b39fc4d95fe21c20710e943807499c8325ce2112e750897398c4395ce21c21718e943847499ca325ce3112e75889739cc4395ee29c20714e943827499c9325ce2912e75489739ac4395de29c2171ce943867499cb325ce3912e77512e75c89f37a89f30689f34689f32689739ec479b3c4798bc479abc4395fe2bc4de2bc5de2bc43e2bc53e2bc4be2bc5be2bc47e2bc57e2bc4fe2bc5fe27c40e27c50e27c48e27c58e27c44e27c54e27c4ce27c5ce27c42e25c20713e29713e25713e2d713e23713e2b713e27712e943817499ccf4b9c8b25ce1724ce1725ce9724ce9725ce5724ce5725ced724ced725ce3724ce3725ceb724ce2512e7db12e73b12e7bb12e77b12e7fb12e70712e78712e74712e7c712e72712e7a712e76712e7e712e71712e79712e75712e7d712e73712e7b712e77712e75289f37b89f30789f34789f32789f367897399c4b95ce25c2171ae943857499cab25ce3512e75a89739dc4b95ee2dc20716e943837499c9b25ce2d12e75689739bc4b95de2dc2171ee943877499cbb25ce3d12e75e89739fc4b95fe23c20711e94380f499c8725ce2312e75189f398c4795ce23c21719e94384f499ca725ce3312e75989f39cc4795ee2bc20715e94382f499c9725ce2b12e75589332cb5c39948e24c2c71269138934a9cc924cee412670a8933a5c4994ae24c2d71a69138d34a9ce924cef41267b8c49941e2cc2871669238334b9c5924ceac1267368933bbc49943e2cc2971e69238734b9c7924cebc12673e8933bfc45940e22c28711692380b4b9c4524cea212673189b3b8c45942e22c29719692384b4b9c6524ceb212673989b3bcc4192171464a9c5112670589335ae2ac28715692382b4b9c5524ceaa12673589b3bac45943e2ac2971d692386b4b9c7524ceba12673d89b3bec4d940e26c28713692381b4b9c4d24cea612673389b3b9c4d942e26c2971b692385b4b9c6d24ceb612673b89b3bdc4d941e2ec28717692383b4b9c5d24ceae12673789b3bbc4d943e2ec2971f692387b4b9c7d24cebe12673f89b3bfc43940e21c28710e9238074b9c4324cea112e7308973b8c43942e21c29718e9238474b9c6324ceb112e7388973bcc43941e29c28714e9238274b9c5324cea912e7348973bac43943e29c2971ce9238674b9c7324ceeb24ceb912e7f512e70d12e78d12e74d12e73c89f36689f31689f3568973bec4799bc479bbc47987c479a7c47997c479b7c4798fc479afc4799fc479bfc4f980c4f9a0c4f990c4f9b0c4f988c4f9a8c4f998c4f9b8c4f984c4b940e27c52e27c4ae27c5ae27c46e27c56e27c4ee25c28712e92389f9738174b9c2f489c2f4a9c2f499c2f4b9caf489caf4a9caf499caf4b9c6f489c6f4a9c6f499c4b24ceb725ce7724ce7725cef724cef725ce0f24ce0f25ce8f24ce8f25ce4f24ce4f25cecf24cecf25ce2f24ce2f25ceaf24ceaf25ce6f24ce6f25ceef24cea512e7f712e70f12e78f12e74f12e7cf12e7328973b9c4b942e25c2971ae9238574b9c6b24ceb512e73a8973bdc4b941e2dc28716e9238374b9c5b24cead12e7368973bbc4b943e2dc2971ee9238774b9c7b24cebd12e73e8973bfc47940e23c28711e92380f4b9c4724cea312e73189f3b8c47942e23c29719e92384f4b9c6724ceb312e73989f3bcc47941e2bc28715e92382f4b9c5724ceab1267581a873391c49958e24c227126953893499cc925ce1412674a893395c4995ae24c2371a69538d3499ce925ce70893383c49951e2cc2471669638b3489c5925ce6c126776893387c49953e2cc2571e69638f3489c7925ce7c12677e89b380c45950e22c24711696388b489c4525ce6212677189b384c45952e22c2571969638cb489c6525ce72126779893342e28c9438a324ce0a1267b4c45951e2ac2471569638ab489c5525ce6a12677589b386c45953e2ac2571d69638eb489c7525ce7a12677d89b381c4d950e26c24713696389b489c4d25ce6612677389b385c4d952e26c2571b69638db489c6d25ce7612677b89b383c4d951e2ec2471769638bb489c5d25ce6e12677789b387c4d953e2ec2571f69638fb489c7d25ce7e12677f897380c43950e21c24710e963887489c4325ce6112e770897384c43952e21c25718e9638c7489c6325ce7112e778897382c43951e29c24714e9638a7489c5325ce6912e774897386c43953e29c2571ce9638e7489cd7499c7325ceeb25ce1b24ce1b25ce9b24ce7912e7cd12e72d12e7ad12e77c89f33689f37689f30e89f34e89f32e89f36e89f31e89f35e89f33e89f37e89f30189f34189f32189f36189f31189f35189f33189f37189f309897381c4f9a4c4f994c4f9b4c4f98cc4f9acc4f99cc4b950e25c24713e2f712e96385f90385f94385f92385f96385f91385f95385f93385f9738df9038df9438df923897489c6f4b9cef489cef4a9cef499cef4b9c1f489c1f4a9c1f499c1f4b9c9f489c9f4a9c9f499c9f4b9c5f489c5f4a9c5f499c5f4b9cdf489cdf4a9cdf499c4b25ceef25ce1f24ce1f25ce9f24ce9f25ce6512e772897385c4b952e25c2571ae9638d7489c6b25ce7512e77a897383c4b951e2dc24716e9638b7489c5b25ce6d12e776897387c4b953e2dc2571ee9638f7489c7b25ce7d12e77e89f380c47950e23c24711e96388f489c4725ce6312e77189f384c47952e23c25719e9638cf489c6725ce7312e77989f382c47951e2bc24715e9638af489c5725ceb0b40e67228933b1c49944e24c2a71269338934b9c2924ce9412672a8933b5c49946e24c2b71a69338d34b9ce11267068933a3c49949e2cc2c71669138b34a9cd924ceec12670e8933a7c4994be2cc2d71e69138f34a9cf924cefc12670189b3a0c45948e22c2c711691388b4a9cc524cee212670989b3a4c4594ae22c2d71969138cb4a9ce524cef2126784c419297146499c1524ce6889b3a2c45949e2ac2c71569138ab4a9cd524ceea12670d89b3a6c4594be2ac2d71d69138eb4a9cf524cefa12670389b3a1c4d948e26c2c713691389b4a9ccd24cee612670b89b3a5c4d94ae26c2d71b69138db4a9ced24cef612670789b3a3c4d949e2ec2c71769138bb4a9cdd24ceee12670f89b3a7c4d94be2ec2d71f69138fb4a9cfd24cefe12e7008973a0c43948e21c2c710e9138874a9cc324cee112e7088973a4c4394ae21c2d718e9138c74a9ce324cef112e7048973a2c43949e29c2c714e9138a74a9cd324cee912e70c8973a6c4394be29c2d71ce9138af9338e74a9cd74b9c37489c374a9c37499cf324ce9b25ce5b24ce5b25cef912e76d12e7ed12e71d12e79d12e75d12e7dd12e73d12e7bd12e77d12e7fd12e70312e78312e74312e7c312e72312e7a312e76312e7e312e71312e70289f34989f32989f36989f31989f35989f3398973a1c4b948e27c5ee25c2c71be2071be2871be2471be2c71be2271be2a71be2671be2e71be2171be2971be25712e9138df9638df9138df9538df9338df97383f90383f94383f92383f96383f91383f95383f93383f9738bf9038bf9438bf9238bf9638bf9138bf9538bf9338974a9cdf4b9c3f489c3f4a9c3f499c3f4b9ccb24cee512e70a8973a5c4b94ae25c2d71ae9138d74a9ceb24cef512e7068973a3c4b949e2dc2c716e9138b74a9cdb24ceed12e70e8973a7c4b94be2dc2d71ee9138f74a9cfb24cefd12e70189f3a0c47948e23c2c711e91388f4a9cc724cee312e70989f3a4c4794ae23c2d719e9138cf4a9ce724cef312e70589f3a2c47949e2bc2c715e9138af4a9c61e91cce44126762893389c49954e24c267126973853489c2925ce5412676a89338dc49956e24c2771a69738c325ce0c126746893393c49959e2cc2271669538b3499cd925ce1c12674e893397c4995be2cc2371e69538f3499cf925ce0212674189b390c45958e22c22711695388b499cc525ce1212674989b394c4595ae22c2371969538cb499ce525ce08893352e28c92382b489cd112674589b392c45959e2ac2271569538ab499cd525ce1a12674d89b396c4595be2ac2371d69538eb499cf525ce0612674389b391c4d958e26c22713695389b499ccd25ce1612674b89b395c4d95ae26c2371b69538db499ced25ce0e12674789b393c4d959e2ec2271769538bb499cdd25ce1e12674f89b397c4d95be2ec2371f69538fb499cfd25ce0112e740897390c43958e21c22710e953887499cc325ce1112e748897394c4395ae21c23718e9538c7499ce325ce0912e744897392c43959e29c22714e9538a7499cd325ce1912e74c897396c4395be29c23715e2771ce9538af97386f90386f94386f9238e7499c374b9cb7489cb74a9cf325cedb24cedb25ce3b24ce3b25cebb24cebb25ce7b24ce7b25cefb24cefb25ce0724ce0725ce8724ce8725ce4724ce4725cec724cec725ce2724ce0512e79312e75312e7d312e73312e7b312e77312e742897391c4f9bcc4b958e27c41e27c51e27c49e27c59e27c45e27c55e27c4de27c5de27c43e27c53e27c4be25c2271be2d71be2371be2b71be2771be2f717e20717e28717e24717e2c717e22717e2a717e26717e2e717e21717e29717e25717e2d717e23717e2b717e27712e9538bf97387f90387f94387f92387f963897499ccb25ce1512e74a897395c4b95ae25c2371ae9538d7499ceb25ce0d12e746897393c4b959e2dc22716e9538b7499cdb25ce1d12e74e897397c4b95be2dc2371ee9538f7499cfb25ce0312e74189f390c47958e23c22711e95388f499cc725ce1312e74989f394c4795ae23c23719e9538cf499ce725ce0b12e74589f392c47959e2bc22715e9538c3d23b9c8924cec41267128933a9c4994ce24c2e71a69038534a9ca924ced412671a8933adc4994ee24c2f71864b9c1924ce8c1267268933b3c49945e2cc2a71669338b34b9c3924ce9c12672e8933b7c49947e2cc2b71e69338f34b9c0524ce8212672189b3b0c45944e22c2a711693388b4b9c2524ce9212672989b3b4c45946e22c2b71969338cb4b9c111267a4c4192571569038a325ce8a12672589b3b2c45945e2ac2a71569338ab4b9c3524ce9a12672d89b3b6c45947e2ac2b71d69338eb4b9c0d24ce8612672389b3b1c4d944e26c2a713693389b4b9c2d24ce9612672b89b3b5c4d946e26c2b71b69338db4b9c1d24ce8e12672789b3b3c4d945e2ec2a71769338bb4b9c3d24ce9e12672f89b3b7c4d947e2ec2b71f69338fb4b9c0324ce8112e7208973b0c43944e21c2a710e9338874b9c2324ce9112e7288973b4c43946e21c2b718e9338c74b9c1324ce8912e7248973b2c43945e29c2a714e9338a74b9c3324ce9912e72c8973b6c43947e2bc4ee29c2b715e2f71de2071de2871de2471ce93386f96386f91386f9538e74b9cb7499cb74b9c77489c774a9c77499c774b9cf7489cf74a9cf7499cf74b9c0f489c0f4a9c0f499c0f4b9c8f489c8f4a9c8f499c8f4b9c4f489c0b24ce2725cea724cea725ce6724ce6725cee724ce8512e72289f3798973b1c4f982c4f9a2c4f992c4f9b2c4f98ac4f9aac4f99ac4f9bac4f986c4f966023913c7715688a8141d3db072d4c0c80a917d23a2aaf6ab523122ba62bf4a5522ab4456ac52714054950a15065689ae52b96abfaa9523aa464657181839a862d50a8362a65d3c84637eeb2f1a73c49fbb442e491fbaf9372cdcf138270de1fc7b5bb26c270be198df918c397908c7fcae64cc294238e6f724634e19c231bf2f1973aa108ef903c998538770cc1f4ac69c268463fe4832e6b4211cf3c79231a70be1983f918c1966c8c6fca964cce1211cf36792316708e1983f978c396308c7fc8564cc994238e62f2563ce1cc2317f25197396108ef96bc998b38670ccdf48c69c2d8463fe5632e6ec211cf3779231e708e198974ac69c338463fe5e32e65c211cf30f9231e70ee1987f948c394f08c7fc9364cc794338e69f2563ce17c2312f938c397f08c7bc5c32e602211cf30ac9980b8670cc2b25632e14c231af928cb97008c7bc5a32e622211cf31ac9988b8670cc6b25632e16c231af0be1989384fdf36f7c027fdf16b894a6325496ca51f9c0cfa0488a0acc078aa68a54892a5315aa4ad5a83ad5a09a548b6ac78cbb2ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae5260054b4489290925a564949c52504a4a45a9290da5a574949ec2290365a44c9499b25056ca46d92907e5a45c949bf2505eca47f9a90015a44254988a50512a46c5a90495a452549aca50592a47e5298222298a2a503455a44a5499aa5055aa46d5a906d5a45a549bea505daa47f5a90135a446d4989a50536a46cda905b5a456d49ada505b6a47eda90375a44ed499ba5057ea46dda907f5a45ed49bfa505fea47fd69000da441349886d0501a46c369048da451349ac6d0581a47e369024da4493499a6d0549a46d36906cda459349be6d0753497aea71be846ba89e6d1cd740bdd4af3e936ba9deea03be92eba9beea17be93eba9f1ea007e9217a981ea147e9317a9c9ea005f4243d454fd333f42c3d470b69113d4f8be9057a915ea297e9157a955ea3d7e90d7a93dea225f436bd43efd27bf43e7d401fd247f4317d429fd267f4397d415fd257f4357d43dfd277b494bea71fe847fa897ea665b49c56d04a5a45ab690dada575b49e36d046da449b690b6da56db49d76d04eda45bb690feda57db49f0ed0413a4487e9081da563749c4ed0493a45a7e90c9da573749e2ed045ba4497e90a5da5c0c144224a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f111449515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea523daa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1da82375a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c1348486d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d2349a4e336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d1ed7407dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f4042da027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41abd4e6fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cfe90bfa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a5a4d6b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682feda3fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f374812ed225ba4c57e82a8571909d881253124a4ac92839a5a094948a52531a4a4be9283d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e09784488aa20a144d15a91255a62a5495aa5175aa4135a916d5a63a5497ea517d6a400da91135a626d4949a51736a412da915b5a636d496da517bea401da91375a62ed495ba5177ea413da917f5a63ed497fa517f1a400369100da621349486d1701a412369148da6313496c6d1789a401369124da6293495a6d1749a41336916cda639741dcda5ebe906ba916ea2797433dd42b7d27cba8d6ea73be84eba8beea67be85eba8feea707e8417a881ea647e8517a8c1ea72768013d494fd1d3f40c3d4bcfd1425a44cfd3627a815ea497e8657a855ea5d7e8757a83dea4b76809bd4defd0bbf41ebd4f1fd087f4117d4c9fd0a7f4197d4e5fd097f4157d4ddfd0b7f41d2da5efe907fa917ea29f69192da715b49256d16a5a436b691dada70db49136d166da425b691b6da71db49376d16eda437b691feda70374900ed1613a4247e9181da71374924ed1693a4367e91c9da70b74912ed165ba4257292c29eb3f25a62494949251724a41292915a5a6349496d2517a0aa70c9491325166ca4259291b65a71c949372516eca4379291fe5a70254900a51612a4245a91815a71254924a51692a4365a91c95a7c03f4944521455a068aa4895a83255a1aa548daa530daa49b5a836d5a1ba548fea53036a488da83135a1a6d48c9a530b6a49ada835b5a1b6d48eda5307ea489da83375a1aed48dba530fea49bda837f5a1bed48ffad3001a488368300da1a1348c86d3081a49a368348da1b1348ec6d3049a489368324da1a9348da6d30c9a49b36836cda1eb682e5d4f37d08d7413cda39be916ba95e6d36d743bdd4177d25d7437dd43f7d27d743f3d400fd243f4303d428fd263f4383d410be8497a8a9ea667e8597a8e16d2227a9e16d30bf422bd442fd32bf42abd46afd31bf426bd454be86d7a87dea5f7e87dfa803ea48fe863fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d4f3fd08ff413fd4ccb6839ada095b48a56d31a5a4beb683d6da08db48936d316da4adb683beda09db48b76d31eda4bfb683f1da08374880ed3113a4ac7e8389da093748a4ed3193a4be7e83c5da08b74892ed315ba4a61c958ff293125a1a4948c92530a4a49a92835a5a1b4948ed2533865a08c9489325316ca4ad9283be5a09c948b72531eca4bf9283f15a08254880a53112a4ac5a83895a092548a4a53192a4be5a83c05fe612892a2a802455345aa4495a90a55a56a549d6a504daa45b5a90ed5a57a549f1a50436a448da90935a566d49c5a504b6a45ada90db5a576d49e3a5047ea449da90b75a56ed49d7a504fea45bda90ff5a57ed49f06d0401a448369080da561349c46d0481a45a3690c8da571349e26d0449a4493690a4da569349d66d04c9a45b3690e5d4773e97aba816ea49b681edd4cb7d0ad349f6ea3dbe90eba93eea2bbe91eba97eea3fbe9017a901ea287e9117a941ea3c7e9095a404fd253f4343d43cfd273b49016d1f3b4985ea017e9257a995ea157e9357a9ddea037e92d5a426fd33bf42ebd47efd307f4217d441fd327f4297d469fd317f4257d455fd337f42d7d474be97bfa817ea49fe8675a46cb6905ada455b49ad6d05a5a47eb69036da44db499b6d056da46db6907eda45db49bf6d05eda47fbe9001da44374988ed0513a46c7e9049da453749aced0593a47e7e9025da44b7499aed0550a4bcefa4f89290925a564949c52504a4a45a9290da5a574949ec2290365a44c9499b25056ca46d92907e5a45c949bf2505eca47f9a90015a44254988a50512a46c5a90495a452549aca50592a47e529f0cf7391144515289a2a5225aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52580ad67f4a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f817f248da428aa40d154912a5165aa4255a91a55a71a54936a516daa4375a91ed5a706d4901a51636a424da91935a716d4925a516b6a436da91db5a70ed4913a5167ea425da91b75a71ed4937a516fea437da91ff5a701349006d1601a424369180da711349246d1681a4363691c8da709349126d1649a4253691a4da719349366d16c9a43d7d15cba9e6ea01be9269a4737d32d742bcda7dbe876ba83eea4bbe86eba87eea5fbe87e7a801ea487e8617a841ea5c7e8717a8216d093f4143d4dcfd0b3f41c2da445f43c2da617e8457a895ea657e8557a8d5ea737e84d7a8b96d0dbf40ebd4befd1fbf4017d481fd1c7f4097d4a9fd1e7f4057d495fd1d7f40d7d4bdfd152fa9e7ea01fe927fa9996d1725a412b6915ada635b496d6d17ada401b69136da62db495b6d176da413b6917eda63db497f6d17e3a4007e9101da62374948ed1713a4127e9149da6337496ced179ba4017e9125da62b7495c252b2fe53624a4249291925a714949252516a4a4369291da5a770ca4019291365a62c9495b25176ca41392917e5a63c9497f2517e2a4005a91015a62254948a51712a4125a91495a6325496ca51790afc5375244551058aa68a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a086d4881a53136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a5317ea4adda83bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac368388da091348a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b66d31cba8ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd4577d33d742fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e8697a869ea5e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25bb484dea677e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abea66fe85bfa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48ed6d306da489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a4887e8301da1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da1ab14968af59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e0040391144515289a2a5225aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52586ad67f4a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f81936d44521455a068aa4895a83255a1aa548daa530daa49b5a836d5a1ba548fea53036a488da83135a1a6d48c9a530b6a49ada835b5a1b6d48eda5307ea489da83375a1aed48dba530fea49bda837f5a1bed48ffad3001a488368300da1a1348c86d3081a49a368348da1b1348ec6d3049a489368324da1a9348da6d30c9a49b36836cda1eb682e5d4f37d08d7413cda39be916ba95e6d36d743bdd4177d25d7437dd43f7d27d743f3d400fd243f4303d428fd263f4383d410be8497a8a9ea667e8597a8e16d2227a9e16d30bf422bd442fd32bf42abd46afd31bf426bd454be86d7a87dea5f7e87dfa803ea48fe863fa843ea5cfe873fa82bea4afe86bfa86bea5ef68297d4f3fd08ff413fd4ccb6839ada095b48a56d31a5a4beb683d6da08db48936d316da4adb683beda09db48b76d31eda4bfb683f1da08374880ed3113a4ac7e8389da093748a4ed3193a4be7e83c5da08b74892ed315ba4a616958ff293125a1a4948c92530a4a49a92835a5a1b4948ed2533865a08c9489325316ca4ad9283be5a09c948b72531eca4bf9283f15a08254880a53112a4ac5a83895a092548a4a53192a4be5a83c054e3c1349515481a2a92255a2ca5485aa5235aa4e35a826d5a2da5487ea523daa4f0da82135a2c6d4849a52336a4e2da825b5a2d6d486da523b6a4f1da82375a2ced485ba5237ea4e3da827f5a2ded487fa523fea4f0368200da2c1348486d2301a4e2368248da2d13486c6d2381a4f1368224da2c93485a6d2349a4e336826cda2d93487aea3b9743ddd4037d24d348f6ea65be8569a4fb7d1ed7407dd4977d1dd740fdd4bf7d1fdf4003d480fd1c3f4083d4a8fd1e3f4042da027e9297a9a9ea167e9395a488be8795a4c2fd08bf412bd4cafd0abf41abd4e6fd09bf4162da1b7e91d7a97dea3f7e903fa903ea28fe913fa943ea3cfe90bfa92bea2afe91bfa96bea3a5f43dfd403fd24ff4332da3e5b48256d22a5a4d6b682dada3f5b48136d226da4c5b682b6da3edb48376d22eda4d7b682feda3fd74800ed2213a4c47e8281da3e374824ed2293a4d67e82c9da3f374812ed225ba4c57e82a85a565fda7c494849252324a4e292825a5a2d49486d2523a4a4fe19481325226ca4c59282b65a3ec948372522eca4d79282fe5a3fc54800a52212a4c45a82815a3e254824a52292a4d65a82c95a3f214380953244551058aa68a54892a5315aa4ad5a83ad5a09a548b6a531daa4bf5a83e35a086d4881a53136a4acda839b5a096d48a5a531b6a4beda83d75a08ed4893a5317ea4adda83bf5a09ed48b7a531fea4bfda83f0da081348806d3101a4ac368388da091348a46d3181a4be3683c4da089348926d3149a4ad3683acda099348b66d31cba8ee6d2f57403dd4837d13cba996ea15b693edd46b7d31d7427dd4577d33d742fdd47f7d303f4203d440fd323f4283d468fd313b4809ea4a7e8697a869ea5e768212da2e76931bd402fd24bf432bd42afd26bf43abd416fd25bb484dea677e85d7a8fdea70fe843fa883ea64fe853fa8c3ea72fe84bfa8abea66fe85bfa8e96d2f7f403fd483fd1cfb48c96d30a5a49ab6835ada1b5b48ed6d306da489b68336da1adb48db6d30eda49bb6837eda1bdb48ff6d3013a4887e8301da1a3748c8ed3093a49a7e8349da1b3748eced305ba4897e8325da1ab14968ef59f1253124a4ac92839a5a094948a52531a4a4be9283d855306ca4899283365a1ac948db2530eca49b92837e5a1bc948ff253012a4885a83015a1a2548c8a53092a49a5a83495a1b2548eca53e0846491144515289a2a5225aa4c55a82a55a3ea54836a522daa4d75a82ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d73e83a9a4bd7d30d7423dd44f3e866ba856ea5f9741bdd4e77d09d7417dd4df7d0bd741fdd4f0fd083f4103d4c8fd0a3f4183d4e4fd0027a929ea2a7e9197a969ea385b4889ea7c5f402bd482fd1cbf40abd4aafd1ebf406bd496fd1127a9bdea177e93d7a9f3ea00fe923fa983ea14fe933fa9cbea02fe92bfa9abea16fe93b5a4adfd30ff423fd443fd3325a4e2b6825ada2d5b486d6d23a5a4f1b68236da2cdb485b6d236da4e3b6827eda2ddb487f6d23eda4f07e8201da2c374848ed2313a4e27e8249da2d37486ced2393a4f17e8225da2cb7485ae52587ad67f4a4c49282925a3e4948252522a4a4d69282da5a3f4144e19282365a2cc9485b25236ca4e392827e5a2dc9487f2523eca4f05a82015a2c254848a52312a4e25a82495a2d25486ca52392a4f8193f345521455a068aa4895a83255a1aa548daa530daa49b5a876e07f15a92ed5a3fad4801a52236a4c4da82935a3e6d4825a522b6a4d6da82db5a3f6d4813a5227ea4c5da82b75a3eed4837a522fea4d7da82ff5a3fe348006d2201a4c4368280da3e1348246d2281a4d63682c8da3f1348126d2249a4c53682a4da3e9348366d22c9a4d81f79a0fbc8f7be03dd203ef3f1e786fefc0fb6607de933af07ecf81f7520ebc4f71e03d8003efaf1b78efdac0fbc206de7335f07ea681f70a0dbc0f67e03d2e03ef1f19786fc6c0fb1e06de5330f07e7d81f7c20bbccf5ce03ddc02ef8f1678efb1c0fb7a05de332bf07e5481f77a0abc8f52e03d8a02efff13786f9dc0fbd604de1326f07e2b81f73209bc4f48e03d3802ef6f1178ef88c0fb3204fe2734f07e028173f507ce831f38c77ce0fced81f39907ce151e38df75e0fccf81f32107ce0f1c385f6ee0fcb181f3a906ce2f1a38df66e0fc9381f33106ce4f18385f5fe0fc7581f3b905ce6f1638df57e0fc5781f34105ce8f14385f50e0fc3981f3c904ceaf1238df48e0fc1b81f35104cecf10385f41e0fff703ffcf1ef8ffeec0ff3b07feff37f0ffb089fff96f76813fb5fdc7a574d82f97987fc1098bf953dcb0983fc9098b79692e2ce629bab09843f5b09855362c707ec6c0f90a03e7ef0b9ccf2e707eb7c0f9ce02e7ff0a9c0f2b707ea8c0f99202e70f0a9c4f27707e99c0f95602e71f099c8f23707e8a0254900a51612a4245a91815a71254924a85fdf6922ae87ae6988f5977d5cd3976e9a286c1f76b1ff371c1e27c4b72ef4adc2df8b60ebf735bd7dfb9adfbefdc362de663bde22bbb2e4c34e754f06d73633e1e2954a44ea636ff9805ff7799f73b63987f8ddb52c67cac18f331769e248ef918786c038f6b9d98cf23fedc253255d074433dfd2a1115fb053fa609e00fbc3cf37fcb7b42cd9fd86926c0f4ff71cef2c0a5d99c5fa61f772c814bba98cf1305cdcbd8ef092c33b1eb4be07aeea0ef0f9e5e58ccf4e24e27f6f6841c6b9588e87eb1d34f9a00d3e7a1fac77984ff31c639bf9d97b1b7259df3eb9f1d7c5bb2a0db9206cdcf2271e64f422c6bc1f3276196b5c87f9caff35acb57ec7a5a7f4e42fcec8801b1d36f1033fdb0ff7cda9171bf103bed860963af103bfd460933fd41b1d36ffcefcf9bc83f9a78ecb49bfcfbd38ef883737cfcdfbea3e97f30ed3f3abf48e0d824b0ee958f995eecf62f785b16bb0d4be0f52632519c9f1716e76785c5f9f9a9c312769f9428cecf8bf5c49d3fb1d703c778b1fb87c10327d41f3d6ac2b8befd27341d357e42df51fd07060f2178b21982be1e7c7bf025ee7de2de2feefdd3c5737b2c334dd0d753cc09fbd5d0fef131e86bb19bead84d77cae0fbc7b92d55d06d49e7fcda953ae6f3a4413f27785ab18e6471ee5f2ee6f3f0988fc983be27f6fb33c4f3f393c7f9f9bf72c7f3b5e04528eeb492c4f3b5d8fb070ef78bc75c0fccd7d85535e99c5fa617aa45b272958888585fecbc4f16f6ebc5332ccecf4f16e7fed1319fa78e33ded85d719dffd039a872dfc84115fa0eea5bb1ef8001d1fdfb668a33fde07916984fb1bf96b80fbba307fcefb0fbf72fa13aec4e1ff6cbf56c41df13b8340f9a76a238b7b588e7e7ba0fbf23a232c7e34f1a34b6c0e57f8797bfb9fceff0f2bf787819fbab5d92b0df2ebb71f741710fb1e21e82855d631af11debc4fd1949e2995e8339bfbe2de9bf608b6fdd0b8be76bf1d992fc812d693cb6b8d34dfc3be3b8d6cf093605ffba1e775e278a735b7c76c3b14ec998cfffdbc73a2562aeffef58e7772f1512f858242a81f7cbf11eebc4b79df8bd639df87efd8e3dbef9a3e3a0e0639db8bfb227d05369fd13f8318bfcdf5369ffd1e57fc73affc5639d42bf4cfa57eb7db2b06b1fa7248b73dfbc311f03cf2fe4bac6f492ffcef462b72349aef17d0562aea78a671affce3cf9834b647c8e44f138ecc71ab1cf01fdb78f356ac75c971f6b0c941f6b44ff5d8e3592c4b95f7cdff37bc7237fd54b7109349ffeef714e9e40d38f9d6fc982e65d7cbf47c6fefcb8dbc3d8dbe3fb181616ffcb1ffff71c7958c21e7bfdded882fdb1cb468638f78f3b0fae35ad64ffe6b4fe9b8f69f0bc0e7e4cff719f39bfdcf67b2f87278b735bb239bf1d63e038227fd0fdae750c1cb85fa9a0eb5171e651426e9f136abb10b8640ebbf6b14decd7feeeaf5dc53efff0777eed2af65835f818eb7fbf4ffde6f2bfdfa7fe8bbf4f550dfb659e5f6bbb1cfc7c49ecf5f0b0dfee8362bf3781f7215189c27ebb9f8cbbbf0bfef9813f1dc81a737dfc84d1e306361dd570cac0fe13270c1d3daa7edffe4306061f14c49d48583c838fbd2d51d0d7af759018f77b9204dd3ff862f845ac56cce7ffed5fc4fac75c97ff5d69e45ff58b5802ad881563a79f2261a61fef2f62c16389bd3d76198e7d3237f87aac29f63e2d83eed3f21af76915749f5641f7095cfed32798e3fbe5a4459cdb825f9c6a19e7b6e00d73ac29b0018fddb005aee70d32062eade7fc624f14e7b63641b7fd452fde0ffadf8bf7ffd2e57f0760bf5cfe7f7f00d620667ab1eb79f25f7ed42fbf748425e876b642a2383f2f2c2cfe2747627f7eeab004ddaffcdf932329e278e2ce9fd8ed56f0df86f6ef3b62449b714327f59d30b0d1c451fd03c778c143089e6ce2788678ad43bee0cd6fdcfbc5dde4c7ddccc7ddb4076fce83a77badef8ffbb5d89f1d1ef6dbdfe393c731c67d48e37e2dee734271bf3f70896f9797e81a1f637f4ed81ffc9cf8ccbff7e7d1ffeecf49e8bfbdcb10c71afcb31278375731be4382b038f3f0f71ec7e0cd48dc75202c9ef91b16749fe0e7d09a054d37eefde27ae27b6e2fbedfd9e23e5ef13ddffb47cf1dc69defa9aef173eac47c1ef1e72e95e2db74c71d7ff03c8ffb78a40cbaeddf7d3c62c7f4ef3e1ec1f328459cdb82d7b524716e0bf6c54ec3f0ab6bd398cfffdbbfba06eff2c3c37ebbecc6ddb6c7f777657fd5f32bb1cb45ecbc8eeb491e747bf0fddbc67c0c8cb5679cb105af23bff77a475c43f0fd83c79d34cefc0a5ec753fc35f3eb770f57e29b5fb1f78f5def935fe3fec1f33ff8feb1ff021cf8bc4fccf5f8f6ab49e2dc96389e69c7b7cec7cec3c0f21aeaf5656095aa0322aa0e1ad8373232326a40c4c03f5a5f42fdf3a32bf6addcbf6fe5c8c8aad19103a3232bfed1cf8ffd955afe9afffffe85f90f2ea1fa5f8ab461bf5ccf12733d815f2fecf7df7cbdf07f4fab5cf3f2bfa755fe8b4fab648f995e607d8cfd5bde51a3270c1d34b5feb8813c3730a0d5c41123860e1a3a705cf09afc7b47e071ef97e81af7331c0de789f9fcef70341c1634bf823da13ca24d15f4331360fa11c1477e6171c612fc73e3ce83a4f17cdfb596bbc4713efede7d13fdce74d3c5735bec34639f440bf6c68e23559c8f5983a69b104742591266faf13e565983ae678933cee0f95d274486d8e9c5aeb3f13d9313f799c7e0bf4a0af6250abd2f322cce25be67da622fb1cb4c96a0afc5cecfff0f02a8a7e6659c0a00>, + "bytecode": Buffer<0x1f8b08000000000000ffed5d07781cd5f1dfd349b22559d661e3826d8a0db8db5c530383257763dc7bc158d5181c4cc02601427209a49346420a8150fee9bdf7427aefbd17d27b486fe43fcfdc48a3b9b9d59e6e9e7c93f87ddf7cb7b7efedcc6fe6bd9957f6ed6e2c7838dd1b0f826be30f1fc780e2f9df2aa0b3d839fca5c73542b906e15ca370ae4938778a706e3250073b77a650ee2ce1dc4ce1dc2ce1dc9cfc399a62f9df8efc6f26d992cdf6b5a6fb5299545732dddeddd69ccc3677b7b4a5da52cd6dcdbde9b64ca6af2ddbd6dadeddde9a6c4f65337da9fee6f64c7ff2e194880ff24a9695d23d3e719e32729c597ec2619b00544db03a3b3c943f9e1b0c1ecf23c7a7e4cbe07513e0ff44a0538126c507cf638a331b24cb4ba9f98abc26c4f5ea66b25a1b92eb6632a99b89e4f854723c89d5cd14f83f15e834a06942dd5429d7cd1cc5b63e5dcf9e291a4f1cdfb3986d798a29db2516e8b60dc498c81fcf009d4e073a03e84ca71fd04ca0594067039d03742ed06ca039407381e601cd075a10cf1b630c69103e8d314bd15104b85abcd3d4160bf3516c11ef715dc6bfd9395788b72aed28384b2172f5f53f9c162a46c1458a95eb1ae5d8209a87968b9bda20d59649a75b33ae5c5b6f3295eded49b7a5d3bdddd9644fb2ab27ddd79e4db5f767d3d94c4f6f4f37f0ec4af527fbbb7adafbdb1ee645f12e8e7b04ec98f3105e2ef8c58a61f73cc586e5cb86e7c50bf9966bc3f394239cb6de8b8ae85d2edfa4f21008036a32dfce47b3973ad7602f95ca079b34efa552422f951e855eea5cc55e2aa5184cd2467ba994a75e2a13f70838e3a197ca28f652d90aefa59c0db31e7aa96c85f752e9227a97cbb7d9532fd57c027aa9b9067ba9967cb069e5bd548bd04bb58e422f3557b1976a510c26ad467ba9164fbd545bdc23e0360fbd549b622fd55ee1bd94b361bb875eaabdc27ba9d6227a97cbf77c4fbdd4f927a0975a60b097ba201f6c96f05eea02a1975a320abdd402c55eea02c560b2c4682f7581a75eeac2b847c0177ae8a52e54eca52eaaf05ecad9f0220fbdd44515de4b2d29a277b97c977aeaa596c60b7b266dec1d6ad853ddd20ddb0e72637606393e335efc667a27fc5f06b41c6845dcffcdf4d3157dbf53d1f7572ab72b5e372b491d2c23c7cbc9f10a5637abe0ff6aa035406b85bad16e9f178fdc06992836a0edf30c72bc8a1c5fcc6cb00efe5f02b41e68c328d860a35a3bc8647de2dc34729cbdc90875b591d4c959e4782639dec4ea6a33fcdf02b41568db28c412c55bbfa9cd8ab164bba7d987b6fdce56b4df1645fbed3062bf7314edb755d17e3b3df765db490cd8418e7792e36d2c36ec82ffbb81f600ed1d85d8a078c32db54bb16ef61969dbb315edb75bd17e971ab1df1c45fbed51b4df7ecfb1611f89019792e3fde4782f8b0d97c1ff03405d40dda3101b146f73a42e53ac9b1e236d7b9ea2fd0e28daafd788fde62bdaaf4bd17e7d9e63430f8901bde4b88f1c77b3d8d00fff0f025d0e7468146283e2e272aa5fb16eaef05c3757903a38488e2f27c78758dd5c09ff0f033d02e8aa51989b1fd1b341bf64832344d72bc9f1ba90f589abe1ff2381ae893ffcf054753e2f168cce46ffab15db055dff3c9a77ac63b8408abf2e23c7ce1dcb9fa349db31af5674a6a3d179f50cc32b754cb1025cc3a90ae45ba44189f61c0e77e0b1511e550e5698aee38dd19d18ee36a8666319066b6a98fce4758a8df85171b5c630e44ec8a3223873b9d88f29da41d3a68f2ec1a6c3c9a2367d34099a63893da94d93e5a5d443e1fcd23dfda94c735f6b73b2a52bdbdcdb9249f7a65b93bdd9e6fe14004eb767c134fd3dd9b6deb674a63fdd9aee794817dff13686810d3b12ec558fe58faf87df1b806e8c8fee7e911b3dcd1c94eb78c87e91c7e41bd14d3c28ba0cbe5fe4a6088132595e1a62c472f78b3c46d1a96f52eea1476bbf08b581e67e91c7c63d0276ccb5f78b3c56714ef638c586e5cb868f8bebef17799c7284d3d6fba6227a97cb37a73c14c5809a8b17f64cdaa324cdfb73d72bb6fbc79fa0809a2c2fa51eafdc16303d21ee11f013e2fa7c6ff61c0493e5a5e37adf4cc6c84a7c431775cbb583e6cde01b14ebe716a3ce7a8b27677d62dc23e0277a70d62755b8b33abd9f34cace9a2c2f0de90d93e525d560fa64e5465f97afef2793b9f60de4f8e6f8e04af5d9e4fc39e4181fdb7e0afc3e15e869f9ffc8fbfa22bc6f22bc872bf374f8bd15e819713fbe7973be8d6a8f2e9f59e1a36a5f7a3f4bd17f0292aa9471dea4e89bcf56d699eb9a2c2fa59c7f6ad68bf3c9677a683bcff1b4d6a6dd76d28a6de7b60a6f3b2ef62b2e93a59caf3cc743db79ae72dbd1b6a36b339a630bd76e9eebc18eb1c08f0f6ae37c9e9e2d7ba53bfecf236311d716f0784abcf81dffdbe1fff3815e00f4c2b8ff571c9ea918876e373a19547c6a68c864f045718f805fe461327847854f069dde77185bb9f1d550cbc5f562a3cefa624fce7a67dc23e03b3d38eb5d15eeac4eefbb3c39abf648e08e3c56eddef58e7865d6b773585735554161d26e07be4683caedaa7b80216eb2948ca32c348337fd7c56c0dc40bf02b431ce338071be078cc71b5a4d9e02cf0da1d23db1b9399be9efeb6af56983299ed687b4714e378233aec76bc80ef197e4a3e2ddb825027f5dc659c1d0a4dd6dbf44b1abbd27aeebc068877b043b6857eeddca7384da6074e608be039d7a83bb47b1c1ddeba9c1dd1bc1f12a69b2bc20f0d308b475566caca9854674ae52d47991119d157bcad4e251d239595e4a9da7683f2b23b764600367ca08ceb4119c192338b34670361bc1d9620467ab119c6d4670b61bc179be119c1718c1b9c408ce0b8de0bcc808cea546707618c1d96904e7322338971bc1b9c208ce954670ae328273b5119c6b8ce05c6b04e7c54670ae3382f3122338d71bc1b9c108ce8d46706e328273b3119c5b8ce0dc6a04e7362338b71bc1b9c308ce9d4670ee328273b7119c7b8ce0dc6b04e73e23382f358273bf119c9719c179c008ce2e2338bb8de0ec3182b3d708ce3e2338fb8de03c6804e7e546701e3282f30a2338af3482f3b0119c8f3082f32a23388f18c179b5119c8f3482f31a2338af3582f3a8119cc78ce0bcce08ce4719c1f9682338af3782f30623386f3482f3314670de6404e7638de07c9c119c3923381f6f04e7138ce0bcd908ce5b8ce07ca2119c4f3282f3c946703ec508cea71ac1f93423389f6e04e7ad46703ec308ce671ac1f92c23389f6d04e7738ce0bccd08cee71ac1f93c23386f3782f3f94670bec008ce171ac1f9222338ef3082f3c54670de6904e75d4670bec408cebb8de0bcc708ce7b8de0bccf08ceff3382f3a54670becc08ce971bc1f90a23385f6904e7ab8ce07cb5119caf3182f3b54670bece08ced71bc1f9062338df6804e79b8ce07cb3119c6f3182f3ad4670becd08ceb71bc1f90e2338df6904e7bb8ce07cb7119cef3182f3bd4670becf08cef71bc1f9012338ef3782f38346707ec808ce0f1bc1f91123383f6a04e7c78ce0fcb8119c9f3082f39346707eca08ce4f1bc1f91923383f6b04e7e78ce0fcbc119c5f3082f38b46707ec908ce2f1bc1f9152338bf6a04e7d78ce0fcba119cdf3082f39b46707ecb08ce6f1bc1f91d2338bf6b04e7f78ce0fcbe119c3f3082f3874670fec808ce078ce0fcb1279c550c67257d97fa27a3a473b2bc94faa9a2fdee31f2bde29f053670fedc08ce5f18c1f94b23387f6504e7af8de0fc8d119cbf3582f3774670fede08ce3f18c1f9a0119c7f3482f34f4670fed908cebf18c1f9572338ff6604e7df8de0fc87119cff3482f35f4670fedb08ce878ce0fc8f119c8ea1059c312338ab8ce08c1bc1596d04678d119cb546708e318273ac119c754670d61bc1d96004e73823381b8de01c6f046793119c0923384f31827382119c138de03cd513ce4ade1730e97f50e7c946dae39458f9f66befeaee49a69abb7cd64d5c51e7a946dae3798a3a9f66a43d4e1ba5ba49969752d3637af53c3d6e43e7198a3abfc4c8bea9d38df8cd1946709e6904e7594670ce34827396119c671bc1798e119ce71ac139db08ce394670ce3582739e119cf38de05c6004e74223381719c1b9d808cef38ce04c1ac1993282336d0467c608ceac119ccd4670b618c1d96a04679b119ced46709e6f04e70546702e3182f34223382f328273a9119c1d4670761ac1b9cc08cee54670ae308273a5119cab8ce05c6d04e71a2338d71ac179b1119ceb8ce0bcc408cef546706e308273a3119c9b8ce0dc6c04e7162338b71ac1b9cd08ceed4670ee308273a7119cbb8ce0dc6d04e71e2338f71ac1b9cf08ce4b8de0dc6f04e76546701e3082b3cb08ce6e23387b8ce0ec3582b3cf08ce7e23380f1ac179b9119c878ce0bcc208ce2b8de03c6c04e7238ce0bcca08ce2346705e6d04e7238de0bcc608ce6b8de03c6a04e7312338af3382f35146703eda08ceeb8de0bcc108ce1b8de07c8c119c3719c1f95823381f670467ce08cec71bc1f90423386f3682f31623389f6804e7938ce07cb2119c4f3182f3a946703ecd08cea71bc179ab119ccf3082f39946703ecb08ce671bc1f91c23386f3382f3b946703ecf08cedb8de07cbe119c2f3082f3854670bec808ce3b8ce07cb1119c771ac17997119c2f3182f36e2338ef3182f35e2338ef3382f3ff8ce07ca9119c2f3382f3e54670bec208ce571ac1f92a23385f6d04e76b8ce07cad119caf3382f3f54670bec108ce371ac1f9262338df6c04e75b8ce07cab119c6f3382f3ed4670bec308ce771ac1f92e2338df6d04e77b8ce07caf119cef3382f3fd46707ec008cefb8de0fca0119c1f3282f3c346707ec408ce8f1ac1f93123383f6e04e7278ce0fca4119c9f3282f3d346707ec608cecf1ac1f93923383f6f04e7178ce0fca2119c5f3282f3cb46707ec508ceaf1ac1f9352338bf6e04e7378ce0fca6119cdf3282f3db46707ec708ceef1ac1f93d2338bf6f04e70f8ce0fca1119c3f3282f30123387f6c04e74f8ce0fca9119c3f3382f3e74670fec208ce5f1ac1f92b23387f6d04e76f8ce0fcad119cbf3382f3f74670fec108ce078de0fca3119c7f3282f3cf4670fec508cebf1ac1f9372338ff6e04e73f8ce0fca7119cff3282f3df46703e6404e77f8ce00caa6ce08c19c159650467dc08ce6a23386b8ce0ac3582738c119c638de0ac3382b3de08ce062338c719c1d96804e77823389b8ce04c18c1798a119c138ce09c6804e7a946704e328273b2119c538ce09c6a04e76946704e338273ba119c338ce03cdd08ce338ce03cd308ceb38ce09c6904e72c2338cf3682f31c2338cf358273b6119c738ce09c6b04e73c2338e71bc1b9c008ce8546702e328273b1119ce719c199348233650467da08ce8c119c5923389b8de06c3182b3d508ce362338db8de03cdf08ce0b8ce05c6204e78546705e6404e75223383b8ce0ec34827399119ccb8de05c6104e74a23385719c1b9da08ce354670ae3582f3622338d719c17989119ceb8de0dc6004e74623383719c1b9d908ce2d46706e3582739b119cdb8de0dc6104e74e23387719c1b9db08ce3d4670ee3582739f119c971ac1b9df08cecb8ce03c60046797119cdd4670f618c1d96b04679f119cfd46701e3482f37223380f19c17985119c571ac179d808ce4718c17995119c478ce0bcda08ce471ac1798d119cd71ac179d408ce6346705e6704e7a38ce07cb4119cd71bc17983119c371ac1f91823386f3282f3b146703ece08ce9c119c8f3782f3094670de6c04e72d46703ed108ce2719c1f96423389f6204e7538de07c9a119c4f3782f35623389f6104e7338de07c96119ccf3682f3394670de6604e773ab6ce07c9e119cb71bc1f97c23385f6004e70b8de07c91119c7718c1f9622338ef3482f32e23385f6204e7dd4670de6304e7bd4670de6704e7ff19c1f95223385f6604e7cb8de07c85119caf3482f3554670beda08ced718c1f95a23385f6704e7eb8de07c83119c6f3482f34d4670bed908ceb718c1f9562338df6604e7db8de07c87119cef3482f35d4670bedb08cef718c1f95e2338df6704e7fb8de0fc80119cf71bc1f94123383f6404e7878de0fc88119c1f3582f36346707edc08ce4f18c1f94923383f6504e7a78de0fc8c119c9f3582f37346707ede08ce2f18c1f9452338bf6404e7978de0fc8a119c5f3582f36b46707edd08ce6f18c1f94d2338bf6504e7b78de0fc8e119cdf3582f37b46707edf08ce1f18c1f94323387f6404e7034670fed808ce9f18c1f95323387f6604e7cf8de0fc85119cbff484b38ae1cc245bb2d9bed6745f2a93ea4aa6dbbbdb9a93d9e6ee96b6545baab9adb937dd96c9f4b565db5adbbbdb5b93eda96ca62fd5dfdc9ee9cff39ea3a8f3af4649e7647929f5eb2a3dfbdd1bb751cfd58af6fb8d91b65da3a8f36f8de85caba8f3ef8ce83c4651e7df1bd179aca2ce7f30a2739da2ce0f1ad1b95e51e73f1ad1b94151e73f19d1799ca2ce7f36a273a3a2ce7f31a2f378459dff6a44e726459dff6644e784a2ce7f37a2f3298a3affc388ce131475fea7119d272aeafc2f233a9faaa8f3bf8de83c4951e7878ce83c5951e7ff18d1798aa2ce8191f5b0a98a3ac78ce87c9aa2ce5546749ea6a873dc88ced31575ae36a2f30c459d6b8ce87cbaa2ceb546743e4351e73146743e5351e7b146743e4b51e73a233acf54d4b9de88ceb314756e30a2f3d98a3a8f33a2f3398a3a371ad1f95c459dc71bd179b6a2ce4d8a3a03abe37b7c7e92577801d042a045408b81ce7332805240696707a02c5033500b502b501b503bd0f94017002d01ba10e822a0a579bd3b8196012d075a01b4126815d06aa035406b812e065a077409d07aa00d401b8136016d06da02b415681bd076a01d403b817601ed06da03b417681fd0a540fb812e033a00d405d40dd403d40bd407d40f7410e872a0434057005d097418e8114057011d01ba1ae89140d7005d0b7414e818d075408f027a34d0f5403700dd08f418a09b801e0bf438a01cd0e3819e007433d02d404f047a12d093819e02f454a0a7013d1de856a067003d13e85940cf067a0ed06d40cf057a1ed0ed40cf077a01d00b815e047407d08b81ee04ba0be825407703dd03742fd07d40ff07f452a09701bd1ce81540af047a15d0ab815e03f45aa0d701bd1ee80d406f047a13d09b81de02f456a0b701bd1de81d40ef047a17d0bb81de03f45ea0f701bd1fe80340f7037d10e843401f06fa08d047813e06f471a04f007d12e853409f06fa0cd067813e07f479a02f007d11e84b405f06fa0ad05781be06f475a06f007d13e85b40df06fa0ed07781be07f47da01f00fd10e847400f00fd18e827403f05fa19d0cf817e01f44ba05f01fd1ae83740bf05fa1dd0ef81fe00f420d01f81fe04f467a0bf00fd15e86f407f07fa07d03f81fe05f46fa08780fe03e41c2c0654051407aa06aa01aa051a033416a80ea81ea801681c5023d078a026a004d02940138026029d0a34096832d014a0a940a7014d039a0e3403e874a03380ce043a0b6826d02ca0b381ce013a176836d01ca0b940f380e6032d005a08b4086831d0794049a014501a280394056a066a016a056a036a073a1fe802a0254017025d04b414a803a8136819d072a015402b815601ad065a03b416e862a075409700ad07da00b4116813d066a02d405b81b6016d07da01b4136817d06ea03d407b81f6015d0ab41fe832a003405d40dd403d40bd407d40fd4007812e073a047405d0954087811e017415d011a0ab811e09740dd0b54047818e015d07f428a047035d0f7403d08d408f01ba09e8b1408f03ca013d1ee809403703dd02f444a027013d19e829404f057a1ad0d3816e057a06d033819e05f46ca0e700dd06f45ca0e701dd0ef47ca01700bd10e845407700bd18e84ea0bb805e027437d03d40f702dd07f47f402f057a19d0cb815e01f44aa05701bd1ae83540af057a1dd0eb81de00f446a03701bd19e82d406f057a1bd0db81de01f44ea07701bd1be83d40ef057a1fd0fb813e00743fd007813e04f461a08f007d14e863401f07fa04d027813e05f469a0cf007d16e873409f07fa02d01781be04f465a0af007d15e86b405f07fa06d03781be05f46da0ef007d17e87b40df07fa01d00f817e04f400d08f817e02f453a09f01fd1ce81740bf04fa15d0af817e03f45ba0df01fd1ee80f400f02fd11e84f407f06fa0bd05f81fe06f477a07f00fd13e85f40ff067a08e83f406e301103aa028a035503d500d5028d011a0b5407540fd400340ea811683c50135002e814a0094013814e059a043419680ad054a0d380a6014d079a01743ad0194067029d0534136816d0d940e7009d0b341b680ed05ca07940f38116002d045a04b418e83ca024500a280d9401ca023503b500b502b501b5039d0f7401d012a00b812e025a0ad401d409b40c6839d00aa09540ab805603ad015a0b7431d03aa04b80d6036d00da08b4096833d016a0ad40db80b603ed00da09b40b6837d01ea0bd40fb802e05da0f7419d001a02ea06ea01ea05ea03ea07ea0834097031d02ba02e84aa0c340ee7bf5ee5bf0ee3bebee1be6eefbe0eedbdbeebbd6ee9bd1ee7bccee5bc7ee3bc2ee1bbdeefbb7eedbb2eebbadee9ba8ee7ba3ee5b9eee3b993920f77d47f7ed44f75d42f7cd3ff73d3df7ad3af71d38f78d35f7fd32f76d30f7dd2df74d2bf7bd28f72d26f79d23f70d21f77d1ef7ed1bf75d19f7cd16f73d14f7ad11f71d0ff78d0cf7fd09f76d07f7dd04f74d02f7be7ff72e7df79efa7b80dcfbd5ddbbcbdd7bc1dd3bb7ddfbacddbba2dd7b98dd3b8eddfb83ddbb79dd7b6fdd3b65ddfb5addbb50dd7b46dd3b3cddfb31ddbb27dd7b1ddd3b13ddfb08ddbbfedc7bf4dc3beadcfbdfdcbbd5dc7bcbdc3bc1dcfbb6dcbbacdc7ba2ee0772ef3772ef0e72efe571efbc71ef9371ef6a71ef4171ef1871efef70efc670ef9d70ef7470ef4b70ef2270cff9bb67e8ddf3e9eed96ff75cb57b66d93d0fec9eb575cfb1ba6744ddf397eed946f7dca07b26cf3defe69e2573cf69fd00c83d5fe49edd71cfc5b8674edc78d73d2be19e43707bfcddfe79b737ddedd576fba0dd5e5eb7b7d5edf5747b1fdd5e40b737ceed15737ba7dc5e22b7b7c6ed35717b2fdc5e04776fdeddab76f76eddbd4c776fcfddeb72f77edcbd10776fc0ad95bbb563b796ead616dd5a9b5b7b726b316e6dc2cdd5dddcd5cde5dcdcc68df5ab1e1e42046eafb24b0b82c1940f2f4ec4f17cb7b7d7ed75757b3fdd5e48b737d0ed95737bc7dc5e2ab7b7c8edb5717b4fdc5e0cb737c1ddab77f7aeddbd5c776fd3ddeb73f7bedcbd20776fc4dd2b706be76e2dd9adadbab546b7f67616d04ca059406eeeeee6b26e6ee7e63a6efffc5ca07940f383c254478e27e67f27fdb8f3b4477eea152b69b9adf9dfbb5f75c6dba6ffb86a0fcddb1692b73b246f6f48de0df9df6573bebcfbe5b1dc9f68de13f2bfbf9d754ec7844dc74d30909e12a2c3ad45f2d0068bd9ffaafcafab5b57af1df9ffc9f252aa8ef0d5e6df966c6ea675ea017fa62e186cefbeec833c3df03fbe1fdba515b941fe5c17971af3ff63c496788df369f417777c2ab99ef20bf2fc381fccf7a96b1bac8c20ff6a0ffca1aa8eef913cae63aed09698579d1b2a9be6d590bc6a62cfd3997d7cb4356a1f3f6d2d757c2f52b1f6d590d7752eb1096f3b3166074f385331262f60b238f67a8ff5e200c5983cc4c3ed83c7ae4f457f3cd87774f991ab8e5ed3d57374ed55d71eedbaaaa78faa40d926c8799a4f132fc3cbf1f28d423ec26c20e7c7e48221aa1dff25e7d035d055c6d2f22caf8ee455e786e2aacfffaf2672282fc451c3cacfc9ff6fcaffd6926bf0fa8420bf96c91f825b38479b10e71517ce617937bc3a2b7fecec8add5e756e909f56936c6d4b26111fdabe2618da3c0326bf86955f94ff5fcff4c5d0d731429cfdad5da9fe4c577f5773576f6fb6a76b02e34f6de6ec84ebebb68739d9d693c39cf0a435cc191f0c1e27c8352ead24bc632c6f9520d7f67027999e28e0af26bab9b43c170ca411ca4df113385498c1ece849cf666c13354161c2bc5a22bb585f18048531920ff56611bebc1c9749db6f2dcba3753286e5497db1c4930ecd2abd3f9999ff7fa2fb13da2ee341615d705c7c18c7877941111e521d721971811ffa633c28f49962d824ff0e847312b6f830d8aa056c9c6f55881ec5e4504c616d3cc6f224ecae5eb17d9d1c2784a68ce77e3ced39d68be304a9fd878d13a4a92b8e0df818a289f073898e1306e60081bfb117b48916cf75968a32ed9f1e0c266ae79aa078bcab616527e77f5d5f38b108bfda60f83e305ee4bad3f2c77581dccf77043af69270c4041cc3c5ac4aefb3cfcaff3fd17df6a4bc43da8eed2d2763fb3009637b5f6e28ff20183eb6e335526cefcfe78d0dc8fa5430746d41f2d30e05bdb0de7df50f2e4d0c8ac74c3ecf5396dd8bfc57e4f9076abcb303bc57fac19e46feabcac75e300746deabfd601f88556bfcf0cf22ffb57ef86790ffc57ef8f723ff75b9a0dcba2d48c8fb1282dd07fff57e6c33c07f831ffc036d73634eddf603bc37f9b1cdc0ede8cd847f4c8d7f7ac0f65bbcf06f19b0cf563ffc07fc769b1ffe037167bb1ffe03f5bbc30fff16e4bfd30fff8131e42e3ffcdb91ff6e3ffc7b90ff1e3ffc07c60c7bfdf0ef43fefbfcf01fe8b72ef5c2bf7520feecf7c37f604c75991ffe03f1e7801ffe03f1a7cb0fff81f8d0ed87ff80fff6f8e1df8dfc7bfdf0efc5f5a607f2fca439ad9ebce624ce17e93a375fd7ab21e715b7b174f1f5a92090b7b10cec7508bccebf07b6b1d4303cdc3e7c3dae56c09a10f2781dd60a726a053909218f8f0fcae1b55f91d70e455efb147969eab84791d72e455e7b1579ed54e4b5599197a68e9aedeb80222f4ddfd6b4fd36455e9aedfe32455e5b157969b6af2e455e95da77e098d0efb8e3e1f51fc7738c1ffe99305b509df8be17be4740fa0d02798c84b2ea83c2b1868f3192a41bc55fac9eb90dca693394579d90e7a34e6b42f4e6f28b9597c692587e6c087f5abe29286cc363992deafcd8221d566f63894c943f8e9cefedeb3e76f09223070396f8d818ed761a2b876bc25541a1bdc714e115b0ffa7b17371c28fa67144876bafbfaa67c391a37dd706c3a43067f6fc7c477bd46081f2472b5854333cc51a35dfc848af4d04850ec527f992b3d50872245ebd8abc362bf2ba5491d776455e7b15796d53e4b54b9197a68e3b1579556afbdaa2c86bbf22af038abc34db97a6bd762bf2d26c5f9a3eb44f9197669bd08cab3899f53c096ae18b9734611e1d5cc6581e1da8aec80d96e329cefe539d1c8f5f10bebc1cc743c74d74b0576ccce092e789c1c0834163fdf01f98788c0986da94eb34b688ad305ffa455e3c0f658dd682bba49b34494a0485ed924fb8245e634ae475221708a436de188255d2834fb0c326add426587e6c082e5afe7f65123a9595c34d6de54c42a7b273c526a1e52e0e214e9712022f9c50f3b9a94b1df9df6459a9ad8bf7658abcdb3dc7f756ee7b34f1be90da16f368fbe77d683de1b5223734af815c57c3ae1b17c2b33184e7f8109c4d213ce943f57cae7e0ac9a3b18b27691c8075e6ec57131be4cbcb61b2f0d0c0cff3ff2be141bf07f2ffa5b11e5ee7b9af4b8f74cce16bbc16653c456d392e18f4c5c347ba7a97775d7dedb1c37d55cc94bccba5e6a4ecb8dadc55069a1f3bc7bb902a761d76495253a5d7c583c1e79210f39ff3bf4efd07f3c752b783fb7da52126ee33763cfec97053ac61a60e1bae501ed8653505436d23854a8a7f4311fc9407c55fc378fc8794f9379343eb87da221693cb51f9b49c744f815e130f0a6dc2f58c0bd7f1b23c44a02d1b04b918221a198f8efcff6479a98f774f3449dd13ef82120c57100491bb20fa3c4c295351da05f3ae73e07549c1605d50bb8e23f9b4fc84bc20d71eeeac1d2a6f8280274a6875890fff68d7c1fd65a2a29c89a40c7ffeff544539f4755e7cca344951ce2452864fb7272bca994ccae07007fd730ac9435dd13f4f23798ab795ba50c7694161c2bce944366f5333481eedd67992fc13752ad53fa7923c8a8df2a4fe49ed3a95e4d3f28b628358ee1e37543e9fced1fe0d9f03890785f5342528d4654a20f3a6d7d609798a759e95ea9cf707d3fdc86e8ee237547e3dc3aadc3f0d0c19a7333cdc3e250e196933a0ec4f65ecb00c2d4bd3a904122d5fc3fe176b5651868c7541a19b289ab8db6f734eb6796eb2035b8a66f8c1df83fc4ff7c37f6015e50c3ffc075ee170a61ffe032b4c67f9e1dfcabb823d64a8d6993f6e646510874b88cf4f884a25a3864c945f1ff81c320c86cc690c0fb74f15b3cf4c3f78fa638c3fc53353b00fd6e52c210f799d9dff4f8711b4fc4ca2232d4f8ff17a7a6e63bec2128ca74b38b58c097971e11cdad7b5d3b579be4d823ebc2f92ea4deaea12c2f5dc860de43abe84304ed04d5ac9e479e343f29a04bdf854d1a5f5ecba53049ece6e9f8b0df22bd68624db84d5d14c0147535068cb59117885c93e5b284f79ac66b2a92f9c1d815798ec7384f294c7cadc50d954d77322f00a937dae509ef258cb64535dcf8dc02b4cf66ca13ce5b186c9a6bace8ec02b4cf61ca13ce5b189c9a6bace89c02b4cf65ca13ce589638ba6a050d7b9117885c99e2794a73ccf62b229ae79117885c99e2f94a73ca732d914d7fc08bcc2642f10ca539ea733d914d78208bcc2642f14ca539e6732d914d7c208bcc2642f12ca539e53986c8a6b51045e61b2170be529cf194c36c5b53802af30d9e709e5290f7ccd4d93800bafad13b0682ee722d66489baa584f2495206f136317de8b53e64bb84af69690a0a6d978ac02b4c765a284f79e29cb52928b4095e5b275ca738bf1818cf674ad42d2b94cf903229a65b9ae4e1b58d41a15d634cef8c1fbd23cfab507e7de0b31e92a1f540edc36f916405ac09218f8ff9a4facb0a72245ee728f23a5791d76c455e731479cd55e4354f91d77c455e0b14792d54e4b54891d7798abc162bf24a2af2e2fd0e8d1b8af17760979fe61c8ce20d9b8349d79dc3f48c0bfa87cd3d255b4973503ea690e6de670bfa2784ebb19ce7baca84d97ea47356a9aea439abb4a6c56d58ea9a16bd3e6c4d8b6f2ba15b03f8fa13dd423193e5d1dd79b3585e93a097b4fde11c964777e7a1dde89a560dd3e78bf9f37e6f2927937cf79a64abd15f474f0ef9f410a613b98eced7a1255bf8f1e76ce4af4c9dcd6c31cb932dc2fa02e99e42583c92d6c8e96ddb837d472f397270d9f5dbba0ed28d82d455389c46568edf399f590456072b7736fb8f2ecd71505e34711c71f69f97ef18a63c3d1e279c77a929281efa622c2f0806ab819e0bbba580e5ea0439b140ab89b50e7c91e65c2ffcd3191e6e2fcb2bed42f2032cf43678c1906d916eaff090c2378a2be91f39bca2fcfaa0b0dbf41152c6333cdc3e7c3add24604d0879bc0e9b04394d829c8490c71f7e1c292fc97fcac1b55709974bdb14796d56e4a5a9a3563d06ca3a6e55e4a5a9e31e455e972af2daadc86bbb22af038abc7629f2d26c139afea8e9439a6d42d35e3b15795da6c84bd3f63b147969da7ebf222f4d7b69c6c22d8abc34ed55a9b150d35e9a31e77f61cca4d92634fb6d2ddbbb633e7f2d07578f122e977af3bc9af279747ec45fe841e72874b9b52e28d457734e88fc4ff1c37f60993c1162472a5fdaf2182bf28bbc781ecaaa67bcb46d17a61bc5cfdb085dc2a63628c62b5122af3a21cf479d3685e84de537866095f4e0f375692d4d5aafc0f2a784e0a2e59b04d9782dda902edd2bda301d6643ea8b287f242ff440bb2d62e556e706edc0db60a208af80fd5fc4cec503f9851e6175d82060c2f258bfb54279ca8f3f557a69be729dadeecb17925e1a338ef0bf35fff81ad639dfe6d091ff9f2c2b6533e80773997da86cba9541712d32f2d707507e3dc3ea2b76866d657589af45ce17b026843c5e87d256d3f9829c8490c7c763e5f0daa3c8eb52455ebb15796d57e4754091d72e455e9a6d62af22afcd8abc34db84a6bd762af2d2b4d70e455e5af6a27d5da5b5d56d8abcfedbebd1a5fd8abc34eda5d90f6d51e4a569af4aed8734eda519ef35db9766ccd1f447cd36a13966d2b2bd3be66b6be5e0ea51c2e5526f9e57938093afadcd11f471c9ef9c6b706d6d811ffe99303b4a8fbe350a368815f9455e3c0f65d5078576f7313f9474a3f8c3da2e7f2ca01c3f405e75429e8f3a9d17a237955feebc58da8e2ccdbfb1fc82105cb47c93201baf451bd2471a7cacad4936a4be88f247b2b686769bc7caf1b535da06e717e115b0fff3d8b9626b6b7c7fdd17f2c697f6f529da57dcce8cb2a47b1d7c6f245df793d602b91fd2eb1b8af0a22f2ea55f529f16c8b6fa1a59277cd9b8a13c4bdd722bf910e5c15f794075a0d7d2eb6a84b263591e96fd0ed1e595795da4adfb585f9edb474fd4be04e5d70bbafae84ba47a95da9db40eac88a73bacdd486315be6ecceb8ec60cfa7a165a7e0ed191c7251a6f6ad8b95fe68d92080afb8675b9a118a4d718487d895b6eff71d550dd463a26a17c1341a16db07e510edd1e8f7ee9f0fcae6aa82e3caed06bddf114924fcb3f79dc20cf07f33c9b84eb8bbd762346e4d13df52b7343cb637de2fd115e86c73d2cff57122b5ec3e2de3441e729219891277db32cc58cafbfe118fec5fa294ff718c47e0a653531bcbc7eb82e529df076375bb04394370bfa8933a9c88fb4a0fc7ac1263ee270d457adf86d1f0f3fee3e5cdca278b12ee70979c80bc778d48768f9b944475a9e1ee3f5f45c63bee2124161cce671581af7d273340e8fc9f36d12f4e1af000bebaf28df84703db7211ff748bf28879fe37224cc617e37523994171d63d27aa5f54e5fbf48f718d0faa0b193b6431e3bb1fcb43c5017bf5f1f32d6a37ddb8cf8f0581b04ac35acfc15a46f3b93b51bba8700eb43aa1fbeef639a2037c6ca0641e15e18a93f429cb545ca3715d16b36b1e97dac4fa4b690ea95efdfc1bc6a412f9778bd62f9f923a8d785f1e1b1d27ae5730b2cbf9ed4eb79ac5ea9fdc2ea35c1f268bda28da43e97d779a97d2ebd7e5a889c492c8fd621be813aecedd67ee74c3d91fb6a3e679aec054ff89c89da87f7d5b3fdd867a0af961e6f95c6d59ee77019692c506cadbcd8586036b1212d4f8ff17a7a6e5dbe6148f342bef6a7315f1b6d5e61e3175aa72e5e75305bf89a47f218315b518e342795c663d4d7691ecae1e7b81c7a3d96f3bbe72d9394c6f08afc53d23d1c45fe6969bd5f8f7f76e09507745d9df7397ed6c99b5ba2f63928bf9e61f5d5e784bd6ad125be277091803521e4f13a945e85b848909310f2f8bddf4ae1b55d91d71e455e972af2d2b4d72e455e7b1579ed54e4b5599197a68efb147955aa0f69da7e9b222fcd767f9922afad8abc34db5797222fcdf6b55f9157b7222fcd76af598f9af14b53c71e255eee988fe5cbc1d59bd3e3a5692fcdf1c4ff423fa4d9ee2b75fcb54591d76e455e27c75f27aedd6b8e4d4ef669a5f1aad4b15ca5c642cdb19c662cd4ac474d7b55eaf88baf75fe378ebf7628f2d2f46d4d1fd2b497663fa4e943956a7bcdf8a5b99656a96b439aed4b73ec5ba963cc4aed3bf87d2c8dbe43ba877a3629e7f9798c8ce74f3065c26c257d8eaa31ff9fde638f15f9455e3c0f65d5335ecabaa5c2740b7b7689b629fee99072da27f2aa13f27cd4e9c210bda9fcc610ac3efdcc1d4f53e4d5c878853dc344796179e9136b523b691264e3b558b7e7913cc5ba4d87d52d8d11287f24cf67a1ddb6b3726b738376e0beb1a808af80fddfcecec503f9f9aca6a0b0ad15db078a72f9b9b0fd6ef342e44c2e53cee488722cebc379e33e2be973bb7ef799b474fbdd67d2d2263d8bacc7bfb95f1a4328e24f4bfd8d1eff6cb33446d1e3dfda86fd13c6349441db56929cd78bb72d99a8631a945f1f788dff03639a24c3c3edc3f7f9a404ac09218fb711e91395d2e703255e8b9578b9c4ef5995c36bbb22afad8abc0e28f2d2d4719b22afcd8abc34dbc416455e5a6d42ea334fb689705e7b1579ed53e455a9bead697b4d7bed50e4a5a9e36e455e9af5a8d9ee772af2d26af7ee988fef2ba54df428f2d26a13eef8e4f8ebc4b4d520a8ccbed61df339ecc95818ceab57919756cc71c77cada01c5ee39478b9a4e9439a315ab34fabd47161a5f6699538b77249736ca2e9439af6d28ad127fb8eff8ebec325cdb995662cdcafc8ebe49ac289f3214ddb6bead8adc8ab52e7439ab6dfa5c8ab52d70b35c73927e3c4891b4f9c8c1327cef6951a277a192fe91dd60981179697ded74c79f0f78dd039c08208bcc2640ff71e87d5b9a1b2e9dae8c208bcc26487ed057469656ea86caa2b5e5b275cd791ff4d969532d94601678cc9f5b45fb22fc6e4a18de8392abf9e6155c633b01f40dabb26ed9bf3bb5f22d91b63fc299ea4601f697f025fb74ee7ffd37741d1f249a2232d4f8ff17a7aeed49a877f35d7d7dc7b95c6e7f9faddd7d3ec7bdf4dabd456f4f867dbeb04bb2bf21f8813b40df0389121e7f5fc20d51c354ea0fcfaa0b0edfa8813198687db87ef1bca0a5813421e6fe359414e56909310f2f8387aa4bcdcf1bc0ac4e5d23e255e92ff578a8e9b157955a2ed5d3aa0c86bbb222f4ddb6bead8adc8eb52455e95687ba9ef2d8717f6b318dbf95e6e973c3fcf14b95fe4efcdf3f59da9189347ed2aed8947db2d16b026589e4bfcfd9cd2387db120c722af12e67ce99efe54a6b9afb539d9d2956dee6dc9a47bd3adc9de6c737f2ad5964ab767db3299fe9e6c5b6f5b3ad39f6e4df7340a72799bf534a7c9466db328bf3e286c233edaac34c792ea0c6d9711b026589e4b1b7383e5785e5c38575584178f23e5f07209dfffed716da1b93128b42d6f677ee60c0f3fdb45e5a18de8392abf3ef0daee43e70cd43ee5ce19fcd5e7e0f3b37eea2c3bf08edeac3ef681e7769acbe79de12790778b3eee81e7995af5796791775bf9bc7bf9096cbfc5be1970a466b00d396acf9729f6cd80b3493e2dff89da419ed7e479a2ec7144368f3be3c979bd369c4e468d3b28bf9e61f51577c6333cdc3e3cee4c16b026843cbede34599023bda73f21e4f17b1fe5f0ba4c91d756455efb14797529f2daaec86b7f85e2daa6c86bb322af2d158aeb80222fcd76af894bd3f6bb157969d6a3a6ed7728f2d2d4b14789973be6efad2d07576f4e8f97a6bdf62af2aa54dfd6ec3b703c81f7e9e9f8917f7398b6a5d94c1efd8e25e58fe3525fdf3c44fe33fcf01f784fcef4a0d0c65427948fe3cca9a47cacc82ff2e27928ab9ef1d2b65d986e143f6f3ff4db5efcdd3c12afe925f2aa13f27cd4e9b410bda9fcc610ac921e53984d2439d21c05cb9f1e828b9647bfa46d1faf451b9e41f2b4d7a18ad5f7e94426ca1fc93b86d06e67b272b8afa92a28b4fd8c22bc02f6ff4c762e4ef8d124eddb1acf788d633a14abdf84703d968b32b7f71307d25d51e312ca1fadb9fdd4887645db4d13b026843c3eb72ff59b88348fcfedcbe1759922afad8abcf629f2ea52e4b55d91d7fe0ac5b54d91d766455e3d4abcdc319f979483ab37a7c74bd35e7b157969fae301455e9aed5e33166ad6e30e455e9af5a819bf34ed75a922af2d8abc34eda5e9439ae3094d7bed56e47532ae9eb8b85aa96300fe4d078d3100cedde8bce9d460681ec5c0bf613e89e44d6558a60ad7b9e479ed62e07effe97ef80fac8dcc203ac5059d507ea3608358915fe4c5f350567d5068771ff34a49378a9fb72dbabe426d508cd78c12799dc8354c6a6bbe86296195f498a26893a98cd7148157d8da59d4ba6d0a0aeb13aff5ec63036b675343ec44e58f64ed0ced368f955b991bb403b7f7f422bc02f69fef092e65ed2cc17895ba7646af1f1722e7b432e59c16518e657d86dbcbb4a15696596c2f137fcf3796bf8bec65da5c3b54477afd842028aaff449647dfe3cffb74babe8ae5d0a79b489e9e4fa706f685617dd28479a710d90d2c6f02c9a37af31467ffa94e2e46fc82f0e5e5381e6a438a8df2a4752dd9b586953f503b88e54de3649e31c293e2c4757d2c8fb6ac0d06f5a66538062cdf4b30bc669cccb3ba885e4d4578de48daf0c15a996720f094f43a85e9c5312418062c7f25d1eb3ee2ecb40cfea7b100f76aa3ac0982aca0c839de362614c92b552eb50f9e9b18416e4cc8e36d89db935e5fcce6bc2d61f963216da951c040edc1eb7d3cc3c0cb9cc23060f9eb050cee076348cf91abaf5fde75f5b5c70ef7052c5593631eeaa5aae655d028f02996d00c0e2dba0be783ffc39a89e48e419173c5aa7d1c39dfdb77b8ef685f11035531660d4584550572e2b114af73c96f9f13fd5900945f1fc8edb643074f8ac779c4c3edc3efdb2504acd2f8082b37ac9fe7be46318c17302482e163c7f888fa8c0b061bf6b5478f5c53accdd13e5c6a73e38ac88f09d707ecda9870ce25e78fb7e69db28ec9556e073dd2bd6c4cd2d823c6f2a8bebcad705fa279b4ad54b33cda5fd4b03cdab7d4b2bc89246f0ccb3b95e48d6579745e5dc7f2e83eaa7a72cc9334d6c33a73f26a62837c79394c4e9f3bf34ab96bffdbe6309c57555038377109bf4b856d9fae59e8b5fd9e24e2c179758da01b955fc3cabf92f4f56f65e30d692d448a691c032d4ff5e67525ad7786c9a67585e318bfeb9f83f69d41ec27e9369de4d3f26f0cb1afb43e1666dfe1d648118fb40e3d83f11acebe2b730fff56ba7ddf7902ed4bfd6b06cba3d879bc936c3f45c025c5bb2921724e2b53ce69829c305e0981179d27c040f8d0757dd76c387274e01555c8929a3560c775ecdc34f69f0f7d271581cae71a7c1ccfb7ccf2ad7033d9ff53047c52421c34712cf160f8844d1d6df551d2d4dfc19abad4b5d1ee08c3255f82a3d7d225386c5ee79372bc199f2fc8a4e7c29a319693e4f06de01708d7c5581ec5704108067a3d96c310b784e4e985b8ec4088bb30cfafd872e612924fcb7f3924c4e13554ff5982fe1c032d4ff5463c92edf1da464176acc82fcae1e778bd500ce78c921cf4ab26218fb775c9ce4b42e4d0eb978c923e895192d3344a72a63139172acab99094691c25397c3981e6f1b826f9e9852172e8f5dc4fcf57d4478ad3beedc61ffdb988e4d13e0e712c1570608cef20e7b56f7953798897db00e5d533acca780696c63a181e6e1fbedcd129604d0879e790639a47e5740a72245e17310c1791eb46a9fed223adbf8bfce009adbf8b04bb965a7f5966d74e2f7a64d3886b595098306f3991cddbc20a92477d852769e90a7572e3a6778f1be4cbcb713c1d240fb1350585f54dcbf17a09abab84703d96ab0b0a6da2581f596ed740d07f2591dd4c8e79926c8eb89dcdbf5882cda95d57b23c5aefab581e6db7ab59de3292b7267fdc14146f733196873af273bc1ee9f5cb19067a5db97da284596a974b993ea5b6cba5829cb0d83c527d24cc617df848e5507d3a999c4e4539b42d2e6372dac97574cb4b6acce035f43a3a47a4d7e2b2720d2bdf326e906736cfb32e28f48313194bb86fac2279bc9dad2679bc6dac2179d4e63c49f1096de1e2d38323ec13787c0a1baf781adf451eafa0fcd11aaf2c65788ac51a297ee3b5923fb5b2ebc2c6f89d27d8e69dcce6bec7f89d0c0fb70fb7f932016b42c85b983fc65883b7110fe6e3cbf1f54216bf901fddbf81af487469436e284f2cdf3d2a312bd512d62fa3ec159e64476d3f285f1a0323ee7a21afba0caceded7d7dcde9feae54b239d392e9cbc682c2d81e17cef1f5c5954279e955ee68eb557e6c9dc5981ecf0df2a771dba56a92b782e5d5903cc4e8fa8c718d43f1aff4843f8afda9fc84507e3dd1a194ba9c100c6d6bd41f71bcd949f2f8ebeca578d429c84908d763393e6ea2e55cdc794cfd5099888f6eb3a4f77b8a8d9b1ecfe28e9f79574bab3456e27167a527d951e30e1fd7503c88bb5ec82b27eef4f7b42533c99696debe966c7773b63f2c8ed0733ceeac12ca9f2794475baff663ebb41477e89cd5a56a92c763128d3b88518a3b7ee2664b3a8afda9fc84507e2dd1a194baf4c98bc6030d5ee347c80b63abd4a757dada0f7f6c83b6b9f92c8ffad3029647e76b741b1e4fc3ad274d691ce4cbcb713de8f891c7b5d11ffb45bf3fc0e3ac9fb630387790c604d25a57589f20f9077dccb55c5fe3630f5a477ced2eea18475a83c2727efbe36c0bf7279a247fe26b23d49f68fbe049f227d4a9d435716a73c426ada5d272bc2d45594b0d8b8b546fc5fa68471dd7068509f32e26b24b5d1347dca5ae8953bb5eccf268db5cc7f2689cbe84e5d176b53e7fdc1484b72b9a873af273616bd56b18067a5dacc82fcae1e7b81c09b3d42e57327d4a6d9761eb98bed6f88b8dc735e4486339292e952b87b6457e7fa6935c47d7c4ef676b4a781d5d13a7d7f2b91d963f93ac897f98cdf3fc8cff4b8f25dc37d6913cdece2e2179bc6dac2779d4e63c49f189ce331e1c619fc0e353d818cb4fbf1a7d8c85f2476b8c258d7dc2c658ab04ac923f759063eeb771e15c986f625d36058575c4ef27963a965b2ae8e3771e9b6de5fd1d4dd2388adf635a4bf24a1d63d1f5c252c658d4e661f7ab7df465581f546fc5fae8e2b12f10f4a7b1afd43116e22e678c55ee384a6a571bf2c74d4178bbe27d465c3817365658cb30d0ebcaedc325cc52bb5cc5f429b55dae12e4f81e639da8b1cf6a4539b42df2f14427b98e8eb1aac60e5e43af8b3ac61a98d39031564d9ea7e7f95ac9b184fb061d47f176268da3306f03c9a336e769b839e08323ec1350a74aeb3bf93a218d177c9d908e7df93a21adb352d709699f5bca3a61d83c558a057ee70fd1c7b028bf3ef0d91606c7b0ab191e6e1f3e865d236095e6ec7c9db0d47586a8f37f1f7bfc3ccf25dba4f5124c92aff17542ea6be5cc09df3dc2f114626b0a8af7efb1a0b02d4599bb487d38d607d55bb13eba799c0a04fd69df52ea181671973a86d51ca74aed6a63feb829086f57340f75e4e7c2c6487c0d815e172bf28b72f8392e47c22cb5cbd54c9f52dbe56a41ce7febd8d2d73a2e1faf7592eb86bc2e8e8d61f1baa863582cff8786419e9bd918d6d37cb8e458c27da3d4712ae66d2479d4e63c0d37c77e70847d028f4f27c758fec7581de498fbade6188baf13963ac65a2ac8a9b431165f273c39c63a39c63a39c60a4e8eb1ca9053c963ac672b8db1be45c658cf3d39c63a9efe8bc7587d51da28955f69632c677afc94e0c1bea39b8e751f3ed4b3aeeffa6b3bafeaddd475cdd1435d873b7b7bafe9bbf65aaa0d6f0d5c5bde0aa4554e773c5f384f79ac89a805f75a5a9ef2408f6f0a0a5bc5da08bcc2644bbd15e5b13a375436f5988b23f00a93bd4e284f79accc0d954d755dc7ae93ee28c48af0e6b2c3f084e1bf44284f79ac0dc17f49045e61b2d70be5298f35b9a1b2a97dd647e015267b83509ef2d8941b2a9beaba815d4723352d27f12e26fb9222ba51cc1b83d274dc2494a73d07469f26418f4d117885c9de2c94a73ccf62b229aecd117885c9de2294a73ca732d914d71676dd169247cb15e34d6587e109c3bf55284f719c1e827f6b045e61b2b709e529cf33996c8a6b5b045e61b2b70be5294ffe62428a6b3bbb6e3bc9a3e58af1a6b2c3f084e1df2194a7386684e0c76ba38ca8284fc5114c6f8cc9433de8392a7fb4465451eba191d9925e9b10f2f82c51aabf1d821c89d71a455e172bf25aabc86b9d22aff58abc3628f2daa8c86bb322af4d8abcb628f2c2188a318dd6eb2226471aa3ad0f9143afe7ab5ef4ba58915f94c3cf713912e6e1562dfec6562db00d4aab1634f6e3aa0596ff3059b5f8679ea7b4a28518253bf3d5bb52ed2cc9c1be86b661bdd8de3cf0a4201d2360c23cdacfb591639ea4550ec45dea2a2cb5eb769647e30cefaf69dcd8c9f2a8efeeca1f370585f6e531511af7d27361ed7833c340af2bd75f24cc52bbe471b9d476b94190e3dbfff90afa064539549f8d4cce464539b42d6e62723ac975349e9d5e37780dbdaed82aecf2dc603e2dff5a12cfcecaf3ac0b0afde044c612ee1bd2b804f376923cde3676913c6a739ea4f884b628751596c66a1e9f249fa80b0adbde89b8d38df2eb83429ff33167186e7d87cf19360a58257fe27dadb426b3519023f1daca3084cdf93cd55f7aa4f5e77bce27d55fd89c2f6afdb530bb6ef4a2477392f7fd34f13e99ea8679748cced70303661b9aa84ea5def5a76d0cb1496351deaf977a77955ecfeffa7b1a6fa6b95d03417fba1e53ea5dff918e37a95d793ca0f5be8de5d176cbfb01dacf62df268d37792c2b75bc49af1fadf166d85d7f3e7e2eb55d86dd8df575d77fb4c6b59536deec2971bcc9effa63f9dbc978b39f8d37a93f57ea7893b7333adee46da39cf126daa2d4f126ed875027cf7d6786c7e340c045d7eeb708f8c36c41fbc7c38d837c79392e93fa2d8fc7d2ba81746f6b3139e67e1865fcb858d023cca7fdf6abd1c7ff28bf3ef0d97606c78f9b23da556ae79b99cd691eef33a57b7b5b0439122feedf61e37f4ff3a56cd4fa43f9a335fe97d68a160b761d8df65dac9e3786e0f1d3f72407de9e17f5deaafba2586d50d886a47bd61cf736c21fcf158b59a5ee05a03cf8dea062388bf11ae95e0097f8de201a97b644e035d2fbf82eadcc0d954d75dd5ae43a5e4ec2329cdebc6c209cc77116ad0bfec4ff165696da8edf2b447daa8a60d842f269dbe3bac484f2123fda76393f5a67788edfff0f9b7b6d63655d42bfa763bb1311a7517ebda0b78f382ddd3ba4f6a171680cb3356f33b4fea47d72eef81241571e9fa262c2f23b85f294078f4f14ffce08bcc264ef12ca531e3c3ed1f685d786b5cb28ed86e2e2f3100d5ebb1478e1f849dab393080aeb6207cba373273ee7da2de0437fde43ce9f087f46f9f50cab2f7fdec3f070fb48fe2cad33f0fe264a993d442e9e73b43722262cbf4f284f79707fa675bc2f02af30d9970ae5290feecf7bc9f5782df6a7d8677e22bfaee1c6711fc91ff3f515ea0f51ee57d33542f407c7ff3321fcf784f0df5b84bf4bf87506ca5ff2679425f9335fd3a7fe4cd78e689bfa22b1db5743e4ae0d91bb2e442ef645947f0dcbfb3ac1f0ed100ceb43306c0cc1b03928e48f6328697d96e64b7bb9f13fd5bdd8188bef2d5b2594a7e356e427ed25e7fb88689fcffbd8f5829ccd822e31f67f6c113db8ed35db069787ed63be20a38695fd45dd20ee1bc83a152d833c5cf2fbb453f43e0be58fd65a41d4e745d076d2731609218fef0f959ead5827c89178ad51e485fb43eb843c3dfb667bd05eb42d6392d63d4bbd6786b84bbd67a6f9342ce6d13db7d89f48b1a8dc3641afe76f03e4cff348bf28879f0b6b2ffc6ddad2d3a0319647f5591d22477a4340a3705db9fa54c213acbede78c89f0aed24d7d17b6613ea07afa1d745bd6786e51f4bee994dcaf3f4fcd47dc9b184fb46a94fc34ae35cfe4c1d4d527ca24ff28f748f168f4f924ff87d9b61b2396abf8df2eb83429ff3d16f4bcf984ab1c6991e9ffd39d877745ddff53bba0e1feaed3a7ae8c8555bfa1e79acefdaa3540dcaba5a5093577f351387e5f832e1ba5c61399a46eb4504a59a0fcb0ff7882e860b490f1e0a4f40338e7cabb1529bb1340cc16bc35e841b567f612fefa5bcf8b619ca3bc9e42c17e42c0f919314307b7e8168c92fd549b23cdacd95faa255d4e9e44b7506eae3e44b758242fb9e7ca9ce5039275faa3332392379a9ce01365518e94b750e92a9420f9b2ad0387322634925bc54076d51ea54a193e4f1f8b45cb8d66fbf1a7daa80f247eb032752ac91c624526cc76b25bf5d468e797c88b2fc4179ad54e4b5429117b631b40dfde02ddad0f937ffe0ad340e6c1764c618665a9ef2e0b7dd9685e8bba244d9d20763280f3eb7a1ed15af6d0a0aedb3247fdcc8fe63be4b75820e2762dec33fecb8c40f9ed00f3b52fb709f8cfa61476aff62755bea871dfdd651b6b951c01530fd69cce62f52a7fe4aeb8d27a9ef419d4a9d8f503bf3711fc5c0eb6309c353acde1341717faab40f4c943a1fa173c052e623d4ae7ccc483f00c0c779611f42933ee0218ddfa96c9a873af273bc1ee9f5a3357e5fc2f4a118f807174a6d97170972c2e2fc48f59130f33ad790237d6896b71f0d39b42df28f047692ebe87ce46d6c6c81d7459d8f60f94d643ef24e361ff1f431dd926309f70dba5ec0db199d7bf3b6416fe1519bf324c527fa11de91ce47787c0a1bfbd0b67722c63e287fb4c63e17313cc5628d14bff15ac99f3ac831f75b695c1be69b5897754161dd2afa47c91f7de72f382fd647f124b573d4a9d4b10f6daf7cfcefbb8ff11caf4afef877a9631f1a5b463af6e16b2ff4c5fcc53e30476369d8b848fac0281ffb943aa7a0d78fd64793c3c63efc4308a5b6cba5821cdf631feef74b15e5507d3a999c4e4539b42df231165d9fa0639f3fb1b10f5e47c73ef45a3ef6c1f2ed64ecf35736f6f1d3ff961e4bb86fd071116f67513f7a416dce93149fd016a58e7de83c95df2740ec3542d90b581e96ad26f5d5923f96d698ce0f86e69d4ff22e64791790bc7696b744e019637c689ba3e5334c072cdf90c7ed6c7953a3ccb32a90630eb6636ca3d447f5da684f12f1740a3a5e48642e653a62f904d1f1adacbdc47383d7a3edf3bb7283ea9c177d520e478e6df7a5e3cd1a2297c7d1b8509eaf95760ae569dda0cda498d7c1785d20f0ba909cc3c71d46ab0d203fda06a8cff03680e567446c0368d713d106a85da3b4015a9eb7810ea13cad1bb4592228ac777ecf449a0bd17651096d80f68fc5dac0dc886d00ed7a22da00b56b943640cb97da06f83cb583e42d67bc2e1478d1be6035c38abc6b03b93fa2fd152d9f217574dfb8a1f8a43e19f3a43e95f6cb31c683ead120e8d1c8f2e8b58eef919aa1f8710c77011913accf1f7bbea73bf00a031cd348e34e2abf86955f2af8458c5d43ed15d6f7847d1c451ad3d0f91d5e5b69f70ef89837ea7a1f1ff3d2f5be4e9647f73b94ba1648ef553c9fc4135e0e136d9b31261365705fe17ed12ee0a57321beaebb85f8452ff30b9f1f69a47559ecd5cdd46f68f91d217eb17a187b71bf08db434af1486b1b78ad5f7b95bee792af83d3b6cffd82b67dbe0e2eb57d69af0fb5094f925fd08f2346f58b5ee617d23a522739c7fda253c04bef8ff0fd5787885fdcc8fcc2cf635f837e81762fe617eb82a198b1fc2342fc427a5c6a3939c7fd22ecf344925f488fb456da6372fcfeadf43a4c694f1a5f33a58fb6f03553fa386ca98fbdd0c7f2a2fac58dcc2fa4bdea51fd622de17b80f905da2e47fce236e617345ef8f00baccb627e41fd8696bf25c42f343f9d25f9058dbd78ad5f7b657b1b05ac98a4b6cf1ff9d26cfb98471f47a736e149f20bfa187954bfb88df985b4073caa5f5c4cf84e607e81f67801f18b5731bfa0bafbf00b7c5d4531bfe0af8bc2f22f0ef10be93556f4d5d0dc2f86fb7416f70be9d3597eed55faeb2df9eb43e9eb87787f11f555f6fcf167e9751a51fd02ed548a5fbc8af9c52626a314bfd844f8f6b0d77060deeb895fdc3f3a7ed18bba615d46f50b2cffe612fd22acbf905e1718d52ff05acf7e51519f71c03cfabaa5d1f08bfb3df9057ede43fad4231d9b521b0c27d3f3ab377b785b2fe63f9b493e2dffc910ffd1fea46498ffe0b52732de48afb5e4f1e60b11d7bf37107d5caace79d1a74f5affa6f55643e40e57472e951a13f96b97689fbc89e5511fe271a953e0e97c123f21c6e7fcdf217dd56f8dccf97f7072ce3f90fe57e6fcbff534e77f7611bff823f18b9a7c1bab74bff8eb49bf1848ff2b7e51c3ea59cb2f3630bf1878cfc5b8c13233985ff879de7fd02f68bb97fc82bea288961f9fc729f985b44622edcd0cf32369ff5813b31bbdb6d2de8fc0d7ada8cf2c67799a3e13d52fe8fb18a2fac50c56cfd23dafa87eb186f0ad627e817ace247e91617ee1e9158919de868bf9057fe523963f37c42fa438223d0b10e647546fee17f4be217fc5a01f7b65bb1a05ac98b8cf48b19dfa0cf70be9dee0487d26aa5fa09d4af18b4c847bc751fd6235e17bff98878fb18de1bead36e2171733bff0f90c33ad87627b50e8de685a7e49885f487b133ac8b9529e15a778a4e7d4f1da4a7b9e98b77dda6ef9fd741aebf91e14293e701fe536e149f20bfa8c7254bfb898d5f3322683d6954b617b509611bea9bc5f60fd2648b939c1d0bce9246f5a3014cf5c010f2ddfc0cacf2318a4f2c8af8695df4adafe7dcc5fe793eb15fdb51b312f2098e2825ef319662cbf33c45ff11a6ab7d9e41cf7d7054279aa37e2696276a3d7d6b1ffbaf64a0dec3d5d28d86bae80a78695df2fd84b5a7b4b107d5caace79d147dc7b4aebad86c81dae8e5ce275ba50284feb066d9660e569fd62de1c92379fe5519f9dce3024040c51f77ae2b5ce9717e6035e535058df3c9ed0b6c9e389e417b43c8f270b0806a97c31dfbc3a249e503b2bc6937ec4bc886092e2c9428619cb1f0d8927525b6a22e778db5b2494a77af37842db255e5bc7fefb8a278b057bcd17f0d4b0f237468c2773893e2e55e7bce823c6135a6f3c9e84d5914bbc4e170be569ddf0b8403fa3b880e5d178b290e5519f9dc73048e381a8f104af3d3e4f66f184963b97c99c23c8a47de9cadcc3bf7502661ff79e68cc890785f69c47f269f96784f8f73c41c7d3c839de16868ba33c26d3788dd77ab6577798bd6647b0d7f322fa7703d1c7a5ea9c177d7a24ffa66d93fbb754a7b47ca9758a364b048531928f25a80fcd61721a0439d49fb80fd3bac26b9d0fff2eaf403dc9c75ff7bee98efcff6489a9a7bba53bdbd7ddd392cab664b2c9de098cbf4b68bb060ff2b3cd5dad3d5dada9547b36d5974d358fb6fcbeee6c7b6b777b4f73b237d99e6acf8cb6fcd6ae3690de9eedcab6247b92ad2da32d3fddd6d6d29eee4e665b7b7bfa7bb3a3ae7f776f4b4fb23d93eaedea6a05f5db465dffdedebe5436d5daded697cdf6b68f7efb6b6b8786d7dfd7954aa5d2bdc9bed196dfdcdbdd966c4d77b5f7f6b4f4669a7b8693efe2f203a40ccac71427e7f9f578be46284f79f0f73ac6c9f53511645729ca8e85c8ae295176ad509ef258cd64d36f0de0b58d821cc45827e054ec93237fae09e5d733acca7852a5d64323b325bd3621e451dd8ad55fad2047e21553e455cdf4a1bc8bf96a947643f53d11ed06cf8d56bb89333cc3b59b6a016b22288c21f85d8fb018552dc8192d5e525ce5b14ab24d3c440eaf2b971a85eb789be336edc8ff4f969722bf771ae5d7075e7d2015567f925dd1763502d6445018f7783b9162628d20c70a2f1ae7c2e21e8f73c3b547ecefb98fbb849f19e5b1b429285e373cbed3f33502ef1a56fe6f6cfd740cd3a323ff3f5966e2e33c2acbf338a285f7c334350a7af37a1f4bf278bdd731cc348f8e9df9779c688ab3ffd416c7df5117e17ea3d446622caf56d003f378bdbb94080adb3d1fbfd0765fcbf2686c1bc3f268bbdf901b8a99f689616395a8fd6ad8181baf6d20e7c7e486f23bfe4bced5e48fb13ec6d2f22caf8ee455e706e5ba549fff5f4de4505e88a386959f9c678ef7086ac935787d42905fcbe40fc12d9ca376e6bce2c2392cefeaaa298fb1d8b890d627efa33dc5a096189347f590e2527d50e8373efae8310c4fb1f62ec523ee5763c9751b7383e5785e5c3857558417f79972795529f28a2bf2c29854170cd5d9a58efc6fb2b4d4cc4fd415d16184fc796ae7fd124d52bf24f904b51f4d1477a9ef4ea5755ecff2681d36b03cda6f8e6379344e200629c6f3f6c6fd9f9f0b9b6bf0b101bd2e56e417e504c3c89130370918789b97facbaa1039d23c2c6cbe3e527d4a9da38d540e2dc3d72aaa15e5d0b63886c9a1636dfaeed4558d83d7d0ebe8fd327aeda6dc603e2dbfbd7190e7dafc31c6124ffd532bf7339aa4be88fb061d1bf37656cf30d33c7abfb8d47133daa2d477a7d271f3589647db0b966b080aeb6827a9a343ac8e3cc5fb66c487b696da15955fc3caef6d1cb417bf6f2df5a561e3f03aa1fc58c176d29c03afadd4fe516a9bbc4d8f6398695e23c9e3316a3cc9a336e169b8fe38eabed443456212cae03189df33ae11f0d25847c7fb7ccd89fb537550d867f1fe2128c243ea2fb90c69cd6b556e685e75046c521f1308e7246cf161b0550bd838dfaa103d8ac9a198c2d6ab781b97b07bb9179dee69eeca34b7277bfa9a5bbb5a5a477d2f403f48ed6f4d36a77bb37de9deaee1e44bf36dba57c5259cb3d3393d2d8ffc6a58f95b48dff124e6c735823c57eef69072b122bfc77908e7aa7343cf49737dba0682e551767dae1023e63590bc1a26675cfe3fb517e585386a58f9dbd81a085db7c0eb1382fcb14cfe10dcc239be06d220946f10cabbfa797a1e23b65baabbf63ac271998c3f3dc7b1dd5e647d465a2b8cb33cda47f1b887fd9134567689af4363f9bbd87889afab76042ab612d7a1eb980e63880ed2b8676d6ea80e58fe9dc487ef691c6a33e9deac644f3eef93d63a9a04dc7ceda2c18ffd069e83c2b10e1d6f52ac0dc1501b61f9570ae34d69df5f2dd1c7a5ea9c177db2d2be3ff4d7e3f8895caa57100cea4dcbf37e759c509ed60dda2cc1caf37116fd4f79d131fa6a86156d581b848fc7f93da1b7903ae2efa8a67e53cfb053ddf9ba645c902bcdabeb08e62f9c9ce71e4fc3cd734bb93fa41187e8fce538be5c21ae13e1b7744ec7fd96fa685c28cffd76383fc7359e44505897bc7d4b7d4d293ee3d26a268fb617ac1bea33c5eebb145ba7fa0a9b13623d165ba7e27d2096ff15e903bfcefa40cd7b93c3b54b5ebf280f6309f7cb8efcff647929f23e10945f1f043ec73ba9b0f62fade5781e3f64c3fa45c91f4f091e5e1fe17546f1212f3a8f5e937bf8576a5f7cbc57eade387a3dbfe74deb38ec5e398f0351ee95d3f6de10848fd5638c57b17541de1f44dd33cac7bebf277e3f31bfa025f92ff77be9bea034bee57e2fedadc0b6cbd7e13af2ff93e5a581b63b30df0e649bd2b1312dffb790b556c91fa4fb961c032d2f8d1da567b006f626b0ffcaf61a982b8c1fc65e8dcc5e58fe3f21f692f41f1362aff142f9c6107b515bd26bb9ec62b168b4dae270b6e56d11cb8fc91f0c370f1b4bf471a93ae7459f66693c47c76035446e317fa1e5a3d4bfe42f09569ed6b714e379aca6721b581e8dcd3cfed3188fb18dc65269ed9dceef70fcd6963f5727d841735c4163b336ffb664b68ddf9fd18e4dbef7a07bde6f9cc476b72237947fc0e4c65939e91a692f0396413d7cb423a8e766cf76ca785e3b18e8e3c29ef3a1f2cbddff40658dd61e7249378a3f6c0f355f1f2e673f361fe79d883aa5b6a6757abc4c6e30af8ae55593bc1a9647fb36d4d1f587679272920f62b9f9e47801b391cff8ec2b2eb83451c0cfefc5e0bdb32090ef51a15d4fd43edd79f9ff95bc4f7756feb821185c334a137ec5fca02a28e4273d4788d77af6d9742c288c4b61f35d37f69b943fbef6e8916bfad65eb5f2d17d3dc78e1e3a72d5f2ae9ecbfb6810e64c024179cc8b91f3c53a657e4d9c94a7a921f03bf06e6d4b2651263a444d50b8e04ce5d7b0f2adf9ffda37e7e1de7caa3fd3d5dfd5dcd5db9bed19f6e6fcbefcb1f1816ff7680d7c3d3962b3ef0789a4812fd505f3b10dafcc0dda72656e28262cb39a94595da4cc1a52660d29e352d8009a77de148734185cc5f2e8a2e66a964703336272011c039b3b9e4230bab496608fb1bc8b491e5f10f631c884f6deee7902909e18148fc3e86bcb735e64a7b043e52fb03c010fbf64624c5e10c8938b4a7df8c575d813f3c73d5d870f6fbae6d0755d47fb561dbbaac7f5d95405cab64a50b158174edd8997e32eccdd96bb2a754fcab7d8f5fc1cca969e67e06bf6bc4af9393ea792ee01fb7e9e21cafb244a95e3790d2719f61c83efe7c9a5101f301b86d5a3742f3f26f092da209d83ae207c79398e479a1b4b63705e5fd27ac970736f6e778bcf1047ad0ffa2c7029f511f6bc0af535be2f85e2431e16a622cbf3ff4ff4548476f9d2bb2f786c97f6698fd67c59ba3f2cad5bf2fbbdebf2bf4ed71d4c37e91eb2b45ec831d0f2d2fb67a47d246322c8a6fd321dead1eb6b83d2f4a7dfc6c36fec49fd5e9ce55509bc877bcee8bfed1d60a5be836f72fed8f8d4be79b4a6f63eede373bc254deda5b157d874dbf923ded71d1b14ee75f059b71e6d1fba1e8e7d0eae253bfdd167ae3a72f450fff5cbafe983b952ef8663870f1fea3fd4770db55cd88884978b1529676174808b2295303a0888bd3ced444cd711991ef827a5ddd274976103cb431b540bd7156b7755ec37ac6c2c846fa390873c715181e2453dead8ef24c2d747cf73aa1ffe625d4d22c7a7323da9bd3b9430203ff4596966cb5762e85d4e8a2fa68f2f15b024ad3c60c236732a3987f6fc7f52a7d61f2ce10400>, "metadataHash": Fr<0x1eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b944>, "selector": Selector<0xd9e0e7f1>, - "vkHash": Fr<0x1dec445c8fa1078b7dce9b3ccf5de0be2245124caabca925bb78b32f1937accf>, + "vkHash": Fr<0x0abd64ffdf5d26f9e76c5f44d89a59e72b697a293d8dcd308b64b1d10fef9ece>, }, "privateFunctionTreeLeafIndex": 5, "privateFunctionTreeSiblingPath": [ - Fr<0x124ac28b575def2e243406b17fa9f0925bf1118986880d83a9b745459bc8f3a1>, + Fr<0x0c4557e746c247100779af4a2e4e5eb5e8556261d414978ecc8c775d79957343>, Fr<0x233d10e0c959338e062b1c76fb81e17fcf61643da568eac372bb7feac8bfa357>, - Fr<0x0861b8c908d4acade859229678fac5c86ce12b5fa26c04ceef065df68e74b118>, + Fr<0x256c06f8384f82f77f7ab3eb47b9c467f6f329051a00163f3125041dab91c748>, Fr<0x1a0ca5eecb1430479902264f04e557160a4666fb42bb8b283c6397e3d17ac937>, Fr<0x2a6595890719fef7967c209488728aa5342438ba52058a3c770202f55acf6854>, ], - "unconstrainedFunctionsArtifactTreeRoot": Fr<0x01bb3b34c9349b23ac39d039e544844c573e5610c8888080c4c4e906254d8c7a>, + "unconstrainedFunctionsArtifactTreeRoot": Fr<0x0602a113eb715538d26370d53819aa5d1f653c7f0509a2aa9c5abdc03872a87d>, } `; diff --git a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap index 21734ca0b466..a8b8bd0dcb41 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap +++ b/yarn-project/protocol-contracts/src/class-registerer/__snapshots__/unconstrained_function_broadcasted_event.test.ts.snap @@ -2,21 +2,21 @@ exports[`UnconstrainedFunctionBroadcastedEvent parses an event as emitted by the ContractClassRegisterer 1`] = ` UnconstrainedFunctionBroadcastedEvent { - "artifactFunctionTreeLeafIndex": 1, + "artifactFunctionTreeLeafIndex": 0, "artifactFunctionTreeSiblingPath": [ - Fr<0x09fdbed4bd565f3b26f4e878699a7d7c01656991c2301b73a5d853c614ca44a8>, - Fr<0x2a4bf9232d7673acf981fd8244941e3acdc98933db06afcccea33872aaad7ebd>, + Fr<0x1b24ce918b7778f393bac313bc14cb4ca5e0e12936fccdf70cfdbce94d5630ac>, + Fr<0x159716eba9df09d5f0d8271dafcfdfcb4cca12c411a02fd5846c308c9f976dca>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, ], "artifactMetadataHash": Fr<0x3049fd9d18d6a3e6f07206670af0861939fb59708f11c4bddd4019aad0b7f2ea>, - "contractClassId": Fr<0x270cb4f1fb717d14d3eb66bb6e6072c708e46d19d9d7ad2aad0756ee67f10150>, - "privateFunctionsArtifactTreeRoot": Fr<0x2caaad89f1bc2bb35d0fe39aede0ffae1f0f38fb3a97b0d79837c0afbfed1f42>, + "contractClassId": Fr<0x1a9ddbb308ed22ba60da2f2e98f3701846e4464d42ec98d15f7225fc0568e8ce>, + "privateFunctionsArtifactTreeRoot": Fr<0x1980e713dbcaf8ea2c4343bfef4f6b267ca68a9191a591f71b024b204c6d5316>, "unconstrainedFunction": BroadcastedUnconstrainedFunction { - "bytecode": Buffer<0x1f8b08000000000000ffb593cb0ec2201045a9c528d2c4c4c77f4c534cbb74e1da7f20ad2c755137eefae9d664264c88d1057013324c80c35c1e85f02a304a1121821c312a8c0b365eceed8c39c4a956c1be29f91d18a3bef84b587fa39059e4e103f1339d3fac9073993c9f7ba17dd773d3ac5f09ff3e72f9a7fbcbe97fffc3b346af5bcc2be1ffc3f8baf7d7c7f3368a3fd26c919cd29b683b002abe44fe12f9a1241be7f30f986f84af8fa28ca8d3b5b6768d75f66487c1f47617f03fe287fd06f3a87a78ce040000>, - "metadataHash": Fr<0x1eef7f2eaafa09e24b0475a918bd7388c4dec305145849f5f84d1b822202b944>, - "selector": Selector<0x83abd7ca>, + "bytecode": Buffer<0x1f8b08000000000000ffed7d698c5c5776deabdec8aeee6615494994284db48d445112a5eabd7bb44c5164935a488a14176da3a5578d60461c8bd43893c52ec74860208693c040123870128c81208013600c1bc8822446123b8963c4880307fe6104486c04fe11c0018c188831c1247ac33a555f7df5bddbef759ddb5de2d4050856bf7bee77ce3df79c73cfbdefbef74ac9ed526afe4bcb085ce362d7eacdff6bbd956947ac5a49c819ec846af0eec1dbff8f37ff1e82fa61c78e8f0b59bcf0976a0bcbe349779f1de59f1d6f62c6d48f6146c0afed6be27cd468e3735fd23295743a07b6d9dfacb7df33d0262d5f076c6b1f536f9f8ffb5264bd4d1f4eb275653677aa91b48a0fdfb90dc33edd88d2af19c35f8983dff2f73371f0e70cff6c1cfc59c37f390efeaae1bf02f8a508fa7fb5899ff861d70cfbb538bad932fc73bdcb3e5dcb90fd3cc8de037e2d0bff421cddb4f05f8f237fcb6e2e367ad67d26f6a538ba9937fc37e2e02f1afe65c0f7f3d999d6d85e8982bfd0d2ffd538f8ad98792d0e7e2be6bf1907bf653f6fc5c15f30fcb7e3e0b7ecf39d38f8ad1cfbdd38f8eb86ffb538f8ad9ceabd38f89b86ff7e1cfcd6bcf84114fcc556fcf9300e7e2be75c8d83df8a3f6b71f05bf1673d0e7e2b3e6cc4c16ff9ef661cfc35c3df8a83bf3191dc5e779e69263d939fff3bd0c4fe68f3d64bd76facffd085cffef4dae6a74d829614b83a54d7b1a4a887daa8a76e7c72ebd3d5f55b2737363eddbc799311429b478c5a06d4afaf7efcc92b1b8c36ba33b46b9b9fdefcf8c6278c369613cdd6d0fb80de6fdce66bb6a7b09fe443deb83fe497b34dafaabd2fb606e45f2659bdd7c525e267f2b07e6cbfc1745716b256451d8f6159f0290b3e5551c779562f581f3a62bde588f5be2396671fbfe688f58e23d67b8e586f3b625d76c4f2eca3a77dad396279fab6a7eeaf396279dafdaa23d655472c4ffb5a77c4ead7b963a3891537efb8bd4f97624ec4c19f0de902fb64fc2d8fd807f4a58cff0d8beb8c5739e9ce3562e448aa6f287fd638b30e7ab119c41a177531c6743cd06fe69f45af7249a39f0ce0237d25e9b6e149d2c5541c5dcc84c66d12781aff49e8f3c6e6da671f9dbbf151426598f4607abb8fe86cef7e28e9d6f7440656427fdf47d786010fcb24c871f35b9fac5fb8716bf366b24d0939b30d4c9c05ccf472de6061fc772b58ec2779b28cda74372e64ad26dd0eb5d968d36539dbb8e0a3b0b61cb12e3b627de088f5a623d67b8e58d71cb1de71c4f2ece3db8e58fd6a5f571cb13e74c45a73c4f2b42f4f7dbdeb88e5695f9e3ef4be2396a74d78c6555bcc465e04adf2e62516abc3e47284ea30513d05fde7c2dbf8d8a7746e3f576ae3321dcb837913267b59394392445f18b40e074ec6c16f2d3c26924e9d729f26337465f5ea7fc3e23ae3b55b1beeaa6f6a91544dbaed92175c0a6ba220d65e6e10281b9f0ac8aafac10becd0a2157562f49301b990fe0765117a2fd1ad34da7a601bccbb08bd97ae652d427bdd1c3239d3521558b6a0e6b5695aeacdff6b3d95c50d9ecbfcb06f1f2c633b70927b33721c585773a915ab43ffd9477507a08ee7e70a60d9fc6c755568b79fda1d0c601e0a601e0ec8795700f36ea81ba7ba7ba00e7d8c8bca316cccd2fe7dbd408eb1fbfb36b7e70396e74edeb7b103aca1f9294fbe6ced93a43d46a8c3facef431c31722e7781beceb5894af2b7b41fd6141b9d331199b6ae3321df3447b3f4075380615aa435fad521dc6528b359647285b2f25dde33a2caeb18d707b9481e763f5bff149b6e1a364ae0819d866956f85725ee55bbde6fa8a8f9299c7dc830ff6a74c7cca8e7c546e667c86a09de541e9c1ac83a5761b6c379ab4c70adb9e6eb4eb91fed9521bf3aee66f75a0cb3196acb19f61e17c43f906e61b6c671883d8362a505774ae365da4fc8e15884fb86e99245aa31f4dbac7cb1ebc2911ff11d13e2de71b9d5846ff48a92df7c9a6c091c77749f93ceb85f78cb00ec78673318ccd63548736334a7568339c131c00f9f0c11b2edbd9c5e9027681b1c274319174fbe734f8e729f2cf48737d6bdd6afd503105f98f12fd3cd8dc53d5363dfb409e75fe94a0c77e87d6f9d6b65f73231597389ee13a88e319ae83787e3a0475a8132edbe562cf54dbb84c67056d93e723e3c1f16da5d129ef909017e739ebfb48a34de735868b4beda7e1879bf866f35c46a01ee95f6b02f0bc6231acbe4339b71657a7b76657b756e7573736e6d6570f117e02bae303eea6db31a0b57691e78099929053ad178d7f99647596679ae7519387f563ba9c4cda7678fdc6eac6a9d56fdcfcecfae610a9124fdcb33a118ebbcdaed8323fba56a2bf87a89db99132556c379cb4c3b4c9fc164c2d57c96410cf520bab1b813a4b53528cf72904a0ac215597482ea457e9af5a8af1748ff2bf9e213f62a0fca384b1067afa90f484e383bad8c8a043fe48374c3cb9cd70a2a760ece7b068c7b41c22d4b4c92122d2f6f8a64abfaca8a991d3b62ac9952449ee290edf4351e4f61ea610281b6262baa46e3b70baf419d8d7f7c63af91d12f2e409ad69e165264e1dec2f871df9e0362ba7e87739f2c12d5bdecebddb910f6eff727a768f231fdc4ab674c7fcf308d4595fcd3fef833ac7a37aaddbef4793ee6275f7036fb6a907a02ef42c99f24feb5351ffbc17ea5036c444ff44bdde0bf548ffd74a6d593eae76f2e75b6438bfd916f270d23d4e4792eebe1c493436b61d17758e633ea7c69ce783fbe3f09ecfe337c8bf4cb23acf4fad94f17e9287f5533065443340f8bb08ce689016cb5d2012d28fd2df59669527651c4fbaddc4732730ae39d796e29a6c6dddf01f88823fddbaabf3a538f22f1bfe9f8a83bf60f80fc6c1dfe050fdcf2195fa79983690c6e4488bc91727844cd7f28634e35f4e624ee9ed907694e461fd0c917e1e8a23cf5689f0519e87847e6c2c1f167586f548f36f9ce691fe21e823d2e36f6b8fd77eb1396055c24c0befd63f2cfa83d74cbfa99dfe4213b722fac373851a37351555457bd621eed0f1127f52f44ded7272dd81405d45f48b977269b940ed0e0acc546fb5a1365e960d29dd84c6e821214725e9d6e5c339b042bc1f11f488b1d2e8e4fd10b47f24075688f7a3821e314e373a79635f1fcd8115e2fd65418f18671b9dbcb1af5fce8115e2fd98a0478c338d4eded8d7c7726085783f2ee811e312f1c6be3e9e032bc4fb98a0474c9bfb2b49775f8fe5c00af17e42d02386bd6aad22e47a22075688f771418f9896735692eebe1ecf8115e2fda4a047cc2f116f94ebc91c5821de4f097ac4b0575256845c4fe5c00af17e5ad023a6ad232a49775f9fce8115e27d42d023e6fdc41be53a91032bc4fb19418f980f126f94cbda8e8b769edbad26ebb305fb5613f4cf02cd09eadb335057232c4fde69b1578856926eddd5726085784f0b7ac4b4355f25e9d689b51d17ed1cd717ad7c7ea660df6605fd0cd0d4a86fd350676da7926ebd96a8df3371fa9d7b5d65fccb49cc71a805c701f5c3b7306685ac5551c7399f1abf59c147613dea88f56547acc71cb11e77c43ae688f58423d67147ac271db19e72c47ada11eb1947ac138e58cf3a62f1bc8371c331feb64e8879aec150ded01a4cb57b94fa392cfa1f5a7b2a5da93528e7146aedfd88e87f55b437bac863351bd2fd4ed7ac6aacd49a55ed69b10e8bee6961fbd09e161ffbc05bf7bcff84471c1ea23a3cb9f730d55544bfd4f18447a90e4fee99de704f8b4f81ce36afc7bde55babf1e932a5abdddf47bfbd76417e49b2b7fbe8bc0fad7411c79fe7a6f3eae211d2c5c39174119a0bd43d85503c7a58d0e36dd58f366f9dbbf1d14bdfbab2fa113f04c727984c9c29a2e33bdb0f65885527ba47e86f73e9ac875e7178941cc3f437d3d7b7a1c7df93e27a5a2a4976e82b515d92b48701af856e29f083d4fcd046bdf977ada7b2d87a80f6cb51f0676639dcfeab66a7d390bc42a177228a0c730beaf60a87149c8afc5c7826777835fee5a47bda8c11520e903cac1f5e4e5784ac5551c76358117c2a824f55d4f10b5f768aa5fca717b9de73922b2dd71cb12e3b6279f6d16b1c13e73e5e75c4f2ece3d71cb13e70c47ad711eb4d47ac3547ac771cb13c6dc2d31f3d7dc8d3263cf5f5b623d6aa2396a7eedf72c4f2d4fd878e589efaf28c85571cb13cf5d5afb1d0535f9e31e7072167f2b409cf79db4bf7e96f5ebff622d766c30f6bab895569d6e1fa681f61e21a05b75bc793eefe7aae090dff601cfcd6367935a047e4af8e3c9632fe372cae335e65c2f2d65da86f283fdb086e61a30eb2b0aa05b1c6455d8c31ad04fa8dfca702b2aa7ef07a5deda5a9fd0aa33f18900be92b82b7b5351de2d6bda30e67423a445f34fe3b7989a1e9ed04d1ad34da7a601bac666025f4f709ba360c7889a05763382164327a1bdf31418f78fcd4e7af340737d5d5f56667f8e587d83ec5ffc3e6e36536e67ccca1defcbbd653999b353f3846fa41de7894c1712f32f717d78c7f99648d153bb73bcaca7b91c785ac5551c763a88e9a1e177caaa28ef3b15eb0bee688f58123d6bb8e586f3a62ad3962bde388e56913ef39625d76c4f2b4094f7dbded88e5a9afb71cb1bcf485735dbfd9ea3547ac3b7d1cd3f2a12396a7be3ce7a12b8e589efaead779c8535f9ef1ded3be3c638ea73f7ada8467cee4a5fbf437efadf522d766c30f8bf7d6504ede5b7b5cf4272de3cd6b71d65cedbdb527e3e0cf86f4a81e7d9b123a2865fc6f585c67bcca49b7de63ac0f55df50fe90edf26301bdf881618d8bba1863fa44a0dfc8bfd775b13a8eacd6df46ff64402ea4af08ded6d674888f34c4d85b533a445f34fe3bd95b33bd1d27ba95465b0f6c83c733b012fafb385dcbda5be3f375334d60d36f24df94c7998d97bad7c167238b7ea807db4f6460e18b45f165c34713adaba526713aee37aa9d98458fdc2a1f420c7ee501f601db62bb5141bb9fea8cf645e8cba7cdbea8a3fb365e91ed633def5c62fccba2af31e61235aecaee4c3f8fc791672d64372a57e17d631e3b8c33f87a16a47f1cfac87109e3e4285d3bd71cb86ad23d37f0eb59d46b0cd45c926eb79f19eeecdb4e7312c4ad26ddbae117ffe3f1787cf1ffa5e1cebea817ffe3633a47a01ee9ff70b28d79a5895911edb35ebb51027e78a6fe74a393dec6d3ee8f300dc73da37f1b62c56714f78e8a3e1f09c86c98f8e65794f97c43cbf03ecd5391ee31c879ca7855485e1e1fee8b1a13b6bbc7841ef2bcf92f4e9c99cefd488bf1dfad37ffe57dd54a5cfbb8fdb8fb76710be5b5b17c42d41996e56ee843487f0cfa88f4f8dbdae3b51b14873166731c56792f5ec338fc31c528ec0fbf022c345f216e55b4671d72dea3fe373e7c8df92899437eb7533e888539268e2b8e3bbebeb09a74d2db7860ec443be4d869f47f1ee2f79f09e47a38b7fde8f0f6b24e08594789feb7606efb71b21b3c4360e3a1c687cf7d1c157c4b449b24dd6761d47c64728e65d05732faf593a0d3eb3427a22ed4b8f2f91dab1b11fd4a0b8fabd1ffd40ec6f5a787b79715c795d71646ffcb30ae7f9dc615f5171ad72ad5e1b89a8ed49ccb635e74cec5f647037ceea63a1c437b4374e8edd371d74cebb9e76a5e33dd13459ef09a09f5c373f56371f4d39aabd5e3ad2aaf8ebc869b55b940d65e79562ef018e810e9f1b7b5c76bff88d64e98abf0de9fc77a6db7b142f90b8e691aafbebd4beb488e118f39f2516b52958fa1af639df1e16bcc07db1b9df293f45fbdf977ada7325b5339bc23feb4ba87e3883fa3f6fbfdf0e75aaf3cc07d759e73e2ec93cf2fe49d738c7f99648d35e76cf7aa453e13f8b490b52aea780cd5ab109f167caaa28eeffdf60bd69b8e585f73c4fac011cb535fef3862bde788f5b623d665472ccf3ebeef88d5af3ee4a9fb6b8e589e76bfea8875d511cbd3bed61db13cedeb4347ac0d472c4fbbf71c47cff8e5d9c74d27acf437e7f2bdc8b5e524575a3cf5e5994ffc20cc439e76dfaff9d71547ac771db106f9d7ded9bd676e3298d38a61f56b2ed7afb1d03397f38c859ee3e8a9af7ecdbf78aff34eccbfde72c4f2f46d4f1ff2d497e73ce4e943fdaa7bcff8e5b997d6af7b439ef6e599fbf66b8ed9af7307dfc7f2983bd43dd447802ef2f318b3861fe9134cb3215da9cf51f1333356affe372cae335e65c272eedb74a86fa16797d0a6f8d321bdd8a7618d8bba1863fa54a0dfc8bfe8bd402f3f4b7f1f75c49a22acd0334c8865f4ea136bca4e2a82b7b5b5b1c54fbb388eed4c686c314618ffc9a4f8f359a6b7ab4477b6d1d603fbc6d3195809fd7d95ae0d27faf9ac4ad26d6b59e7408d2f5f0b9d777b22c0e79e1ef9dc9393cf17b93f8c6de7acd4e776e39e3359588b7bce6461493d8bec873fbfa5720847f967d47ce3873f37af72143ffcc5259b9ff09396162f8cf7b370dd2fde2ecce6cd698c7f39891aff5b39cdb3240feb87cff9d484ac5551c73652137c6a828fc23ae1849516be67d50bd69b8e58571db1d61cb13cfb78cd11ebb22396a74d5c71c4f2b20935670e6c228cf59e23d6fb8e58fdeadb9ebaf7d4d75b8e589e7d7cd711cb731c3dedfe6d472c2fbb4f7f737edf2f36b1e988e56513e9ef41feb537b69a24fd39d7a6bf790d3b888561ac2d472caf9893fee6bd825eb0269db0d2e2e9439e31da734eebd7bcb05fe7b42b8e58fd18efbd7dc8535f5e317a3077dc1973475a3cd7569eb1f04347acc19ec2def990a7ee3dfbb8e188d5afeb214fddbfe388d5affb859e79ce204eec5d3e3188137ba7fb7e8d139c7fa97758570596d1abf7352306bf6f04d7004fe6c00af1deee3d0e2b8d4edeb837fa540eac10efd059c0b49c6e74f2c6be5adb71d1aedefcbfd653999d9b127296886fa4f3929b25e2673ac26bc8bf4cb23acbd33a0fa0ceaea9737371cf4bd4364a848ff23c2bf4a3ce27f0bef574f36f7c1714d23f0b7d447afc6dedf1da37476fffafe2e34ef7d7d2f72a7da3891bf75ccf7cec73378bca56fcf0e796c785de1df15b71026d80e3c40c5cf7f383e9f9bc71c2f897936edb8d112766481ed60f9f1b9a15b256451ddbf8ace0332bf854451de7d13bc54a7f3fd18772a5e57d272ce5fffdd2c7cb8e58fda8fbb4ac3962bde988e5a97bcf3e6e38627de088d58fba57736f2f5836cff2fb37ad3e2d919f67ca3d2ff27bf3627d67aa44fc50afea4cbce9ee8490b54a7569e1f773aa3cfd84e0f345c42ab0e69b59df9a9e9ddf5c9caf2daccecd6f2cccce6ccc2cd636e6e6b7a6a797a66796e7966667b7d6e79636966666b7661667d6a7045fb6d9486b9ab9bc36cb67c023ad418367c0d59899ee6684ac55aa4bcbc5469b8eeb86c5b5a10c2c8e23bd60a5c5deff1d716f617e2ae9d62ddb599c35c3ed67bb909fe908af21ff7212d5ee836b06d44faf6b86b873ce5c6d5cf4c307bbfd7ceeac3f76ebb9a0397fecd63341f3bd63cff205c35ef0977bceb0177bc7dee00bdb7d33e0b79afb3ae6174b4d9aac6f063c02f548ffe4be36e66f37318df724f0e6b87300aefbf9c74c2d6fdc31fe65923556dc3940f2b07e38eedc2364ad8a3ade6fba47f051efe9af8a3abef7d10bd6aa23d65547acf71db1d61db1de74c4fab04fe5bae68875d911eb8a2396a75c6b8e589e76ef2997a7eedf75c4f21c474fddbfe588e5d9c74d27acf437bfb7b617b9b69ce44a8ba7bede73c4ea57dff69c3b2c9fb0fbf4983ff23787d1961e237ef81d4bc4b7bc34d6370f0dff8138f8adf7e4dc9f74eb18fb64fc2dcfbc17e84b19ff1b16d719af326179eb2ed437949fede77e9087dfcda3b0ee2f88352eea628ce9d140bf91ff544056d58f23a413c547ad518cfe4b01b9905e7d6bcdda9a0eff14d479ef43658df79780a7f1dfc93b864c6f0f12dd4aa3ad07d6fd03195809fdfd205d1b063c2ceadcd601c29aa43e648d6f55b437ba3c6bfb38716066356f5c32febbb5b6bf37a75ef95ba4d8b62aea786d5ff49b8858c76bfb5eb0561db1ae3a62bdef88b5ee88f5a623d6877d2ad73547accb8e589b4e58e96f5e97f422d796935c69f1d4d77b8e589efeb8e688e569f79eb1d0731cdf72c4f21c47cff8e5a9af0f1cb1ae386279eacbd3873cf3094f7dbdeb883588ab7b1757fb3507e06f3a78e400b676c375d35d49671dcac0df30bf1beaee2559ee15edd21279efa2754ffe4b71f05b7b230f24ddfac73e19ff29a18352c6ff86c575c6ab9c74eb3dc6ba52f50de567dbc2fd15d44116d60305b1f6720f1375cd7b984a56d58f238e3ab997b08e08acd0de59deb1ad24dde3696d23fb586befecde809e90ff4ef6ce4c6fc789ee74a3ad07d6f7fd195809fdcdeff52fb2775625aca27b67d87e32c0e7be1ef9dc9793cf17b93fdb9d65face98e699759689dff36df4ff6fac8df94b639d7dc4f6879224b3ff87a90edfe3cf733aeeaf1a9df97405eafc7c7aba752eccc6138bd51d04de13547708eab0df5c86e96fec531a23ce95dab84cc7f2a00e5136c4c4b1567a1d25fa7f3dd696e5cf553566093051ce954627bde9722c69f71b695806a3ffb720c367558d3992d1af4a06e67f051bfef5318d99084cd5af83d42f96a14a3218fd7f847e5d07a648637f632cb0b3dac6eb90e095645c63db38945157942feac7ae1dcec1b724ead896589fd83e4be76c4b46ff3b015b9a1232a03e78dc0f900c4c73906430fadf1532a47ab618b27ee31bdf3ab5fa8d9b9f5ddf4ca88cc06f0ef56aa87908a6044e563135a4d29abb308efd1d3213e58e49c6b5ac619f84eb1b9bd7376f6d66286888c02632980d25ba702cb57669893be7e47f16c0f897136db7751f79a639ce9b3cac1fbe6f5715b2aafcc8063734cfb3afa10c07840cd564fbd87120677f2693b661dfbc75e3d32c9bc3395cd9dc6406ff92689f50db92b89696d41fffb0e994e3c4d7d90ed6d5bd6c2b2af728511df6976d857d09ebd05646a80ee78b51aac3b9658cea0e43dd3eaabb0beaf6531daeabc7a90ecf5195e1371795ebd998a5fcbe5e6ae3329d95b43fdf6b762a6d7ba7ad61186b28e95e9ba4e56ce3f6ff66fbb867e167fbeb3593c7d6d5a3a26fc87f94e8cb4d234bc7f729ca37d45e888a692c03d263bf79acd47e6788378e95e53171f73fdbfa7d00f4a7fa763fd423fda1807ed5fe5848bfdbed919a3c6a1ffa01c2da4ebfa71bb7ffef77fd1edd43fda27f3d4075283bc73ba5fb23422e15ef8e04f8dcd7239ffb049f10565560e13ae1f344f8e36f6e7e7ae1c6add62baa0c12d59ad0ef71ba7694fee6d4f7ee0c5179adc1793c1f99e5a3700fd1df07857caa981c585896e164fb62a66eba3a06a6fea364ea6a6ac3e9c8c2256fc1615bdc8233f35a063a36e365c113af85ccd8e8141f3e06fe15d1ae447528c3570232607ba3b310f71cd4f985b8b956887bbe8997b59df91cd423fd7c20c4591becffc3a2ff2c03d263bf4d1ea57b6b3b25789732fe373e7c8dc70565787497f870c8c63ab675a5e7e7027cb0fd73bbd49fea2ef1a9ec129fa3c4e779473ecf03cdd42ef1e1ed04ace3b8a6fcf4f9001f6ccf7ebaecd81f15a763eb8d1ffd7901ea708e33395e1472588cff2a5cf7bee58dfc4c5ed681f12f93accef2b4b6c6be4af2b07e78bba32e64ad8aba47e137d6219fbae0a3b05e20195e8076bb347e333b1dbf17e2c8131cbf17845e8b8edf1ce9b51ea51f73d326d7c9a4bb58dd4bc09b6de114d4a1af70515b57f5e6ef346ffaf16a1b97e9581eb43193ad92748f37d2f1b884c6aa2ada1bdd78d2ad13c7f19865bd26a2ffa781f73cfce6a2746e72a73a1f9b6ae3321df344bd9ea63a1cf715aaab43dd19aa3b0975679bbf2b49b6cd95a8cefac8d7781cb1fd4b2403b6eb754e54322bbb7c91fa53d42e5f147c42b179a7fd513287e6f09df2c1fed4894fdd914f1d684e129f256887475e7e665fbb0db6c33522b6b56de551a2ffb9c936e6df68628e27dd7eb097b1847d6305ead8cece401ddbc659a8abc36f2e2a3e992ed2f874ac407cc258cdf12994af44caef72e72bc67fb7f29517499eac58a3e2b7b555feb440ed42397e3d4e1f73ebdcf8ed568e5f2779583facf39342d6aaa8b357d359acb1db88bf0eaf0afb0ec52fc3c3f31bf68ac4b4bcdee8c434fa5fdd959835bd109a978df7a948bcf3da8ff15739b0c95d1675233dc8babcbcb9393fb3b53a5d9b9f5d98dd9c2b25ddb17d585ce3fdc5d3825ebdcadd74bd1247d77316d3871b6d7c8cdb691981ba5354370a7526633a67fcad6aa7fca723c99f47ffc8bf2ae82f401f8a8ce5a1a4d3d6d01f2ddfac431dbfcebe2ef8d4059faa686f749c37215d1a77fe5bb993a7c987c72cf17e4f56def4fb1477e2acbb161655aec471e77424de79e30ee735288fc95d1675bdc49dadf5a5da6c6d61616373616e6d7e6e2b1447f01ac79d1541ff8ca0375d9f89a3eb19157770cd9a9611a8e3988471c7645471274edc5c98c9a37fe45f15f467a10f45c6322616c6030fac033bc4b2d8aae6f47edbfbe1c736d0e68e531dfad3935487eb353c86c765bbfda49f2fb0877712ea38aeed7eee97fffe00c7d938b6d05e3ba89c40ed7585e604e51ff8986bafbe66635949bac788f7eef2e6386a0fcae8e2cec773f3ec4f58943ff1de08fa13da0717e54fd6a7a27be2a873934deda5221ddb529ebdd4505cc47e3b8ec792f5f1e5a4bb58dd2bc0bbe89eb8c95d744f1cf5fa0ad5a16dbe4a7518a75fa33ab4ab73cddf95246c5758677de46ba1bdeab32403b62b65fc6f7cf81af351322bbb3c4dfd296a97a17dcc587bfc59f9b8071f95cba9b8d42b1fb445be3f538776b827fec8fe761b6c877be2d896d77646ff97614ffcb12666dcfcbf782c61df7815ead8ce5e833ab68d7350873ae7a2e213ae338aec8963ace6f814cab1e2ccabf9732ce3bf5b3996ca7d4239d68a9055f913df7f566be015c14761d9585692ee31e2fb894573b917457fe2ae63e71678bec3a2f228bec7f432d415cdb170bfb0488e853a0fddaf8e3197d97860bf1dc76399635f22fa8fb1af688e6572f79263f59a4729bb3adffc5d49c276c573c6b0b816ca155e2619b05daf73b89259d9e50af5a7a85dae083eb173acbdca7dce38f2415be47ca20eed30c7daa01ccbdae5cdb18cfe06e4581f518e1569bd563896b06f601ec576a6f228ab3b0f75a8732edbad018be4586a9dd76f7327ef1362bce07d42cc7d799f10c7ace83e21ceb945f60943eb54150be2ae1ff2e7b0c6bf9cc4b485760e7b86e461fd700e7b56c8aad6ecbc4f58749f21effa3fc619bfc86bc945b55f6245f91aef13a2aff5b226fcf11dfa93c95649b2e7f752d26d4b79d62e6a0eb7f1c07e3b8ec72ac7a944f41fe796a239acc95d3487f5cc53955d5d68feae2461bbc23aeb235f0be548bc8780ed4a19ff1b1fbec67c94ccca2ecf507f8adae519c1e74ecd2d63ede372be5687761daf8ba31cd6dae5cd618dfe2dc8617f8972d848ebe1c2b1847da3689e6a7517a00e75ce65bb3576911c166335c7a7418e153fc7e27dc2583916ef1316cdb15e147cfa2dc7e27dc2418e35c8b106395632c8b17ae0d3cf39d61f39e5582721c7fae3418ef5fd7207e7589b796c14f9f75b8e959aab7d4af0a3cd5b173f5bbbfef1fa6b9bdfba79f2938d8bab9fdefa78f5fac98d8d4f376fdec4deb035706fd90ad42e67fafbb8b88e186773f682bd16e911c33cbe92745bc5cb39b042bcd56c85182b8d4edee831afe4c00af17e55d023c6e946276fecebabd44edd5128656033ef903c21f95f13f488713620ff6b39b042bccf097ac438d3e8e48dfa3997032bc4fbbca0478c4b8d4eded8d7f3d40e2335d229ec2cdeaf65f40d65be9014ebe3eb821e670e8b3e15d18fd7736085785f14f488f146a39337ca7531075688f725418f98f656b64ad2ddd74bd4ee12d4215d1636f20ec91392ff0d418f727c2920ff1b39b042bc2f0b7ac478b9d1c91be5ba9c032bc4fb8aa0474c7e3121f6f50ab5bb02754897858dbc43f284e4bf2ae8518efb03f25bdb3c1915623a66301b25e267fdc06bc87fb732aabce33045bac4b65551c7ab44357e57051f8575d611eb1547ac971db15e75c43ae78875de11eb8223d64547acd71db12e3962590cb59886e3fa34f15139dab9001f6ccfbb5ed8ae94f1bff1e16bcc47c9bcddaec53be3ed3668836ad70263ff28d13f09bb16ef3531d58e163f4991751a7b277a567c6cae411bf68bedf3ad27053147b0627538cf2dc26f2e6a97c3e42eba0b8b7abd4275186778bec6b8718dead077df6cfeae24ddfae598a8f25ebc16b2e38b2403b6ebd55f94ccca2e392e17b5cbf3824f6cffe71df4f38e7cb03f1788cf05473e688baf139f3ab4c378f66314cfac5d563c7b10ea91fe30c4b3bfd8c41c4fbafd602f6309fb86ca4bacee1ad4b16dbc0975a8732e2a3e992e8aeec262ace6f8a47c623ce9b6bdbdb8d36dfccb49b7cfc558336cb7bfc36b860b4256e54f3cd7aa3d990b828fc27a836408adf9228ddfcc4ec72ff69a4f8d5f68cd9777fc6649af17a2f4636e8be77e2c3c2763dfac0e7374de0f4c483758b04f45effaa38d996c2a17e579bde8dd556ccf77fd23e59bd3acd744f41ff7638adef5df69be897ae57880e37e99ead06e791ec079d6e636956f722c2b9a6f62fbddca374377fd397f2e6a97a1bbb1b1eefaef565edb6ff9e6af15c837d3c277fd8dfeff4eb431ff3de59be8cffd9a6fb29d61bec9b6d14bbe69ba289a6fe23cc47bec685f48379274fb1bdb7692689f451cf6b90b19fcd372aed1597751b463d9d47a3911d74a02e7dc36b25d14b231ee50a01f597cf2c6c213247bd1587842f0c993a7c699bff3af338cff6ee5a979ef4d2a7fba483acfcaf9b00ef95c127c1416c7fed03a314e3e5c9bcb3b7ec67fb7d6896afd7642e87537ec3b6b9c5702f2c499e36aadb7f4a97bb86a1d9d7eb96c2ce9b621756f9ce5be0cf8762d6b6c14ef902f22069f415ac990330b2bc43b74e6202d2b8d4edea8a34b39b042bc43e705d272bad1c91bfbfa46463ba653b26cd76fa64dc475cbe7702cf8cd0297881675c7f724ad3f4319325c827ab43dee4b49d02b3cb45dc653f90e9f335811582abfe4388d39e45ec469e35f16fd8e11a7d53d4ad40fc6a17d49a7aed96670fcd479bcf4f76ba2af1c9ff2ca64f4d7043d62707c42f9afe5c00af17e53d02306c727b42f6b1bb2cb3c768372f17ac703eb4d072ccb9fd4d9a06ad23d1657a90ed768bc7e7b4bc867fefc365cdf0b7f36fe659235963fbf4df2b07e943f63acccca31f2d0bc0d7ced5afaef9d9c3219fdbb821e31d89f718cdfcd8115e2fd35418f18eccfef407b6b6bf3a9cd994f37df789ee6714f347ff33e0efa439efbe2b81769fe90e2d702f86f07f0dfc9c04f8b7d0502f1953fd793ce3a758f4ff933ee51a14dcd83de96037c5f0ef07d35c0d7e622c41fa5bae74086af06645809c8702120c3c5a41b7f28e9f639de2fc67ea3bcf637f67d48c8c9edb10ee9316f353c75669dcf2be19ccf73ec39c1e7a2e84b89fede9fd10fc38b611bcccfece3b8e0c139f7f9725beeff03f78b90c630d212f7a9aafc7396f1dfadbd9ebccfa5f053616a7cb18ecfa1aa67385e157c14d659472c3b873a2eea1cef95aef1937258d4bdb0a2f7e64ceea2f7e63c9fbab53a3cdb6bf3898a45bdda04b6e7b70ef27343ea7fe3c3d742f6c26fed564f9d96a80efb7326c047bd89604ab4ebb53ffdf0a46cac372bf2d3a7756887f7e6be495fbeb17679efcd19fdff807b73df6a62467ebabf702c61dfc05c33cf53b72acfe567f7b0a8f8846f0cd8e959308e4fca27e2be35b1369f77de36fee5a4dbe762ccdbea5956156bd2a38bf68cd1479bb75edbfcd6b5d5eb1f6facdefaf8c6276f6cfef0679b376f6137107a04ae633d96116267742b44f76aa39b0ecb6ebdf0a0a8fa4269126258b850fde050b807669cfb5663bf9ab14a43acad9a165e82df59e3177a493062f12d69c47e96f8bc24f8bc14e0f3ac9039f28b4a0bbfbce759aac369aee80b5dad4f8397f7b4c663f0f29ea45bbf8397f774f219bcbc67677c76f2f29e5fa5a5c24e5fdef39bb054f877b454c038b397b1a41f5ede63ba28ba54a8431dc7a79744dbb8f36afea582f1dfad0fa9a858a3721215db796b1deb4ec26f8e0f79b63f10ebb423d62947ac7af3b7e9063fac6b3a4cfddb3eac6bb11f75b344f29c14f29c0cc883ed59e72adf5c1258467f4ad02306dfde437ea772608578ab0fe02006afa1d02fac6d25e9d6c973cddf53f4b7d5a7a55f3f54f95c1c79821faa44fdb0efe7fd5025dbb4c7872ae38ed1dcdc94902ba1fee3dcc02f86c7b880e3c645cd71d6a7a2eb1ed433e79728038fc773244fd6b8ab186374fdf6c18ca2eb1e5c6b1659f7a05e3937c50f1a703e89769be7c3936a9d80bcb1cefac8d7781cb1fd6ead139ea3fea00cfc0189a276f982e0138af33bed8f9299c7dc838ffa702edb8f071fb445fee8611ddae1bae78189761b6c9777dd63f4ff18d63d0f367f47fe3870e158c2be81fb126c67b8c667dbc05b85a8732e2a3ee1478577baeee1f814ca7dd0f6f622f731febb95fbbc40f264c51a15bfadadf2277e31bccab14e093e0aabdefc3d9e748fada37f14fe883dbfb03d6b8ee2a2ecbcdefc5d34f7417be5fc3ff61cd36f1f332f9afb606cd969eec37b3cf8a181ac0fe6612c0de545ea83a99cfb145d5360fbddfa087428f7e10f3b14b5cb17059fd8b90ffbfd8b8e7cb03f75e25377e453071aceb1707f02739f7729f7b17698fb605bce7d8cfeef41eef33ee53e71e6dfe2b1847d03f322b6b3bc1ff1a8c36f2e2a3e992e8ae63eb84ee5fb1126fba8a0fd0ad519ed0fc178fd5cf3b7da635a4e3aeb96a1ee79aafb0ad42d51dd7302b34438687348ff14f5c1e83f6dca9deaf2bb558d3994e89863766c368a3eea67a3eb3593a72efaf83cf07c91fa68f43f027d7c8a7288e146bbbde9bef9d68464a411a53fd3a91cdfa363c5986f8e025f8ea3c3829ef74aeb821ec7c674a6621ee7a75f1158cfc3b595c6edff77cb064c3eb401f419b601a3ff899c36607add0b1b40bde6b101a4671bf8aaa0c7b1319d5593ee713f49586a2d8476d10f3680f363960dfcd59c36607add0b1b40bde6b101a42f6a03bc4e451b7889b09e17583817ac90ac863d96e8f908e72ba4ff5918a3ebd54ef9d49c6c756a4ec579b94418d88f09d18f29aac3b629ee6f8d76ca6f39dcb72127f865cae122dd3b6ebd2ac1721a957722ff51a2fffbc22f4ad406f5159a7b421f7b51390daeefac6dbfdd3be09c37ef7e1fe7bcb8df57a73a3c5751742f10ef553c93638f046db3443c8d07fb0afbc5929017d742bcaffb4fc12f7e83fc22e64727712cd55e34fb0dd2ff8b805f9cd9465fec17a1b3aa288fdadbb0b6fdf66146de0747db67bf40dbe77d7065fbea4c11ea848bf20bfcd8635ebff88d8cfb18c603c72a2dec1775212fde1fe1735eff09fce2f7c82fe23c5ed6f60bd37b965fbc9a74ca6cf4bf1df00bf558169e1161bf087d6e49f9857a74b6df1ec7e3fbb7e7a18e7d06cfbef19e293e42c37ba617a1aee8e335f8f85f5ebff83df20b7526be0ed7427ef132e0fe2a3dbe6dbafb03f08b3f21bfc07811c32ff0553cca2fd06f90fe7f06fcc2f35360ca2f30f6f2270be2e86b6e7d4ac86a45d93e3f5ae669fb56878fbda34eb828bfc0c7d5f3fac59f905fa8b3e675b816f28b5700f79be417a68fef815f54276fffb671c6bec7f00b7b2d46965ff06ba95aaf9e6acaa9fc42bd2eeb3c5c63bfd8ee5360f5e6efd0a7c0e2ea6b7e664ac86ac5eaf05507fc3a547ccd11cf17795fcdcf8f59abd776e4f50bd35311bf30db2c114fe351c42f5e075c7b4d2efbc5ddf0998563bbe3171bd6371bcbbc7e61f4f715f48bd07ca15e4b98d72fac6d64bfe8abcf52581dbed66937fce25824bff831fa5412cebbfcead40b3979467ec5e73adb7a96ff5c847aa4af05fc27ef6b6843fe86fdae377f873e91b997f146bd3e93e3cda2d097daff3e0ffd49cb48234a7f36d5fe378edb28f0dd6e8cd2523426f2eb9d704e7e9dea429f92aa0b4cfc241aaff94fc15c7595e6aa7e5df39f0df8da60cd7f67aef9afd25ce5b5e6ffa3fdb77fb35fbc037e71fd0be217ef0ffca2557e50fce27a24bff80ef985f5f387c12f7e82fc22ce7b05da7e8176affc025f8584f49f05fc42ed91a8b399213f52e7c72aa4376cdb6fef61e07d2bf49997a8ced367f2fa05bef721af5ffc04f985bae755876b21bf380bb81be417d6cf9f04bff859f28b48af629c651bcef20b7eb5a4d1ff54c02f541c3905d7d82f941f61bfebcddfeaf573fc2ac338fa9a5b9e12b25a619f51b11d7d86fd42dd1bdca9cfe4f50bd35311bff859f20b75efb80ed7427e7106701f21bf38d9acfbbbe017bf487e81670b62f8857aee4b9d15e0f3013f1ff00b753601cf36b15f849e154779d473ead6b6df9e2766db47bbe5fbe918ebf90c8a8a0feca3ac132eca2f4c4f45fce217c92f4e120f1cabb4b05fa8771ba4b83fb3eff66f1bdf2ad03d9e74d63d007547934e798e0979907e82e89f001914bde18d12fd3f03dbb7336f667fc7a1bda3bfae99cc4f824cc3a25fc74966a3ff97017fb536a8b7c7e01afbeb93821efb6df254486fd8769cfef6d5d774ebece953425fc7843ca344ff6b39f7deaad09fb48c34a2f4479e3dc5711b05bedb8d515a784c9f12f43836a6b32ad1e3f85adde350779cead0671f2019aa4286bc673dad6deacb3fdd0c7895a47bbc399ea06d723c517e81f41c4f9e0419147d966ffe4e209ea09e1de3c996c9fc34c8a4e2093f8762f4bf1b8827ca962a708d6def69418ffde6788276696dc7e9ef58f1e484d0d77121cf28d1ff5ece78720cfa9396914694fec87882e3c6f124344669e1313d21e8716c382e9c80ba27a90ee3c95354873efb04c9a0f281bcf1c4daa6befca3144f90eecbc4f371c113e7d2d38ddbff8f0b9963dc7bc298339c74ebf309a847faff1df0ef27441fef836b6c0bdbc5518ec918afad6d647dad85f4f5580e7d7d37a77f4f407fd232d288d29f75e5df689becdf6a4c91bee8989aceaa49778ce45c027de871e23321f8a03fb10fe35859dbd4872f357d38d5cb9952679b21c06b56b5ec6d18ae3b8e4fee4f84d8b532c9ea2c4feb3d1ac349b7be513ff6db74372264ad525d5aec9de02551372cae0ded325625e91e6fb679a59be1001f1eabb44c89766c73acd37af3ef5a6f25f73b2b8d7f3989ea03d3a1f1537a35dd8d0a59ab549716b69351c16754f0f9a26059fbb4b03fa6c53e273645b4689b1c03b7b3557b8f421a5b31965692ecb131de63cdbff1faa8907794e84f342752f38f7d246bbdf977adc772087013e2352efae7c8bbf58cdb58d25da644bf79dcf7431d8fed38c98c7565a8e36f406019a6bf511729efbb0eb67199ce8ab29112d58d897e581d8f7b5aaa49b76d8f521ddaf618d5616cdb4775e84baf373a65c6397138e91ebb3c730762f0bb58550e90fa1c8e570272d69b7fd78a96998df585cd99c5a5dae2c2f4ccf206fb00f6857d9e6d8fe5629ce100765560599c34df433b2e257e7ecfbe80321a6f5cf339aec373bf4fcdf897936ebf8d3127abbc1bf5c3316652c85aa5bab4588c2f89ba61716d28034bd9c3002b1b2b2d9c77f4823518c7c1380ec6d1671cd5be6299f8a8783c11e083ed8d6e4ab4e3790efbeabd7f8efcac1f780df9979398f36e7b9e9bcca957d3dd9490b54a756961bf9a127ca6049faae0c33637c0cac64acb40f703dd7fd1b06c0e5079f44ee71a6c3f19e053ee914f59f09912ed4a19ff1b1fbe96157b7bc1b2fe1f001ad6f301c2e26b213d1f20990f38c86c581547acaa23d64147ac430e582a6f2b531dda92edbd589db20dabab04daa14e5fa6ba8380c97b50d8e7579aedf66e4f22ffbda93b614f42c5f37e5b6bdcf9eb83fc3677a7ac0f780ddf4bce15036bb7f2843b2deff941cae32c26a0cdfbf9e0dc62de9860fccb49d418351df22fa557ce01b12de71a69e1b553d13c14eb5e1d60ed19d60547ac814d0c6c626013039bd80e6b6013039b18d8c4c026b6c31ad8c4c026063631b089edb0063631b089814d0c6c623bac814ddc593611bad73e4eed4a89e7feea46eee7938c7f9964f595a7bddfabf4aaeea7987e2a71f43357227c94a722f4c3f7e779ecd27f76ef199f7745fa0af411e9f1b7b5c76b7fa1c988ef7fa785edf6a0e80f5e33fda6f7cd7fa489bb5be738149fc91ef94c0a3e9ee745aa0199d57da329ea4fd1fb46ea9e67dcfbc5615f50670242b616a23f5490feb0a09f08d0df5510ffee82f4f714a43f5290fede82f4f7097a154bcd1f8e421dcf43f7c3f5bd98878c7f99648d350fdd9f74ebeea8d05dea73f61cd5479bb72edcb8b57913e546acdf86eb588fc568f8ccd828fdcd675f2a202b5e3f9871fd50c6f5c319d7efcab87e77c6f57b32ae1fc9b87e2f5db76267bb8c969fd97c85ea79be301f507a4d8896c7c3fe6659bdea9388d8def589a0576ded7ac8b66d5e441be6f7418d43bb61718de7456ccfbe511658ca978d7ebbb36ffcfc28f29ba0761319720d0bec2cded88ecffd85640ef5519dab50efeba908bed6969f954e8be926f5d37f70a093a7e163fe8b6dcdd74789feaf54da98bf403929ea86f34894398f4da8b9b49a648fc11e3ecbba55227ed60fbc86fcbfe8cfb2f23aa65f9ee91b600db0065803ac01d6006b80f5838dd50fcf8ef0ffc687af85f663f3e4b73be5a3d651dbad23be4beb08d37dde7584d12fc03ae27b817504bf0357e966b7d6188a8fed616ca7b7b14aa73c21bd210fd6db97416fe3954eb9f609b94ad49f9144af87f7113fa39f027e8f04f8d9be9b1a4396458d05beff8ac70edf67a9e85957467fb829af7abf34afffebcdbf6bbd9535150faca8755689eaf09e02afcff8fe23d6e17db011aa43fd8f52dd41a14793090bef05a20e53fd9e9e6ae3325d423c71ecf8f99a12fd8d36c6cf8fee17ed949d627cb43613497e5fc4bd12a43f06be314b3c27054fe3673a1a4a74cc3cdbb8fd7fdcfbaad39b26cf41d17fb4c30af5dfe84f807ff1bb92d5fd29b567c832203df6dbe451f725f9396cbe87afee3b2a1bb276389e6c23281f8ed94ae3f6ff3c0f60dbd03c90650b6f3471e39e41985be071435b50fa1b25fae702b6a0ee13876c41d94ee89eaeb2d5106f1c4b1b37d32fc6c318fa55e70e942df3b9825301fd2adf09e957dddb5567254cbfa8d34384b59d7e4f376eff3f2edac7d0afdd33cbd22fea1fe95f0be857e92ba45f752f1cfbcdfa45dd1f26acedf4cb7345bfeaf7f21eea17e3d76192cf62c75b3097ff24cde5185f783d827de7f565c8d7d3c26b23a37f0f74f5dd0c5d0d6560b23ddc0532c5c81dee167dc4b1b82be9eca3d1af097b303de37703ec5ae4ef826ca9ef06a09d8d025fec5792b4fb8df479ceafe0d898ceaa44afe63475bf107d88e7b43831a16d0338c62a7fe49860f49fe4b401d3eb5ed800e6226c032a6e85bef7a36c06c7869f9147fb3848586ace47bbd86d1b50f302ca9c352ffcd99c36607add0b1b40bde6b10175ae2befdc653aab26ddf900ef1ba83509ce052b24abe9702c09e7d59cdbff25b18fa2f62ad97ed57b35707e0df563276babef1638e3803906ef1bfd34e4024f543566d67aed52a3939e63755a4e030d9fdde53162fa2992d9e87f26b0d715fb5cf64ef70ffe66c1fd83d0199aa2fb07a8778ead8ab78aadcc7b2c29d6ffbf1318b338f1ba3d662a5eab751ec7eb6f17cce34363b65d2c347942eba4500c35dd85fa8718eafc7f29e93cdbb59d6d9c6e74f6d1f8e4b50da3ff87c236b2620acb7536870cca375886ef0464506b9bd0d97afb1bbfb58163c0df4031fa5f0619de6a0e50bffbc83fd9431f41bdf35e02f34e0bc6b24a06efb10cfaacfeff4a20aec5598fb6c76ca7ebd17f13183395b787c62cef5aaf92748fd3dd84a5c6ec74a34dc363667cb2f287acb5d87ff8028ed96feee198a1deefa63ab517c572e5ddefbf07dac7d8cfb367004633fa7d0fd423fdefe45cb7992ee2aedbe616d5ba0dc77414f862bf92a4dd6fa4cff37c108e8de9ac2ae8f91b4a6a0e407bb518bb973680369c6503bf9fd3064caf7b6103a8d73c3680f4456d80f7f08e405d563e8458a13d3c9c1762d8008eb1ca53314623fdffca6903a6d7bdb0818ee775816f56dc47fa3ccf15e2d8f01e08da07e7632ab70bede1c59987db36a0e66194396b1efeee17602e08ede1a95c21b487b75dae603acbb397afd69368176c03381e316c40ede55744df387fdcd7d4777fdccf291e0742ebacb4e4d9cbc7b1319da9bd7cbe4fb8dd7abe1f6c40ad2bd9060ee7b481bd8c03a1fb39ca068adecfc1b109ddcfe17d5f751679f7efe784eff3a3cc596bff0773dac0eedccf293e1778dfcfe1e7e8d03ef85e0fae15f12c5ad63d08e499f77e099ea5b56742bdbfadbab9b4bc515bdeda5c9d9e9e9ed9a86d16f9b6aaada1f18ca8ed63a873c7fcad653bcf87d75137bccf68f4f3bb733e587e6b99cf3bef833e0c933ed27296fa60f4179b7d486997aa9d3a1b231e5887fa1ca2bafda407ac43b94ddf91bfd1326bf2ab33bb286bd699dd7acef83406fd49cb48234a7fe6547cc2f3f11c9ff23ed3cb7a427a1c1bd3997a470f7faf5a7daf7d3f5c5b21594d8763891e23c3e3ef9ebf0663c4f79bd16ff8db46d877fea6f5b0e06b75182bc641e6af534ce098546ffe5debad2caa6747ac4c09bd95a80efd909f19e067ccb10eeda0e837d04d1745bf81ee1187f0f986efcbd7e8966b2ffc16cf2cb2dfaa675e42671cf3bef7429dc360fb56734d119f49cb0af1437bb1b1419f89f1cdf6f5b585b5b9cdb5f585e9b985d9b9dab6df6cf7e63f37bfbab8beba383dbd3c37bd39373dbfdbfc37d7e69617d796d7e76b9fa757d3cbb3bbcd7f7175e973eecb73ab730bb5f5dae2c26ef39f595a5a589e59fb3cabdf58dfda98dbf5feaf6d2cacd79667a7375657173feffed2aef77f6363737a6e7a717969736e6e6379d7ed6f7e636da9b638b3babcb1beb0313bbf5e24af2f259d71232d78ae82db87720ec4e0f7ffa8793ec47bc8917729c07bb420ef31418f182bc41be3b1b59d127c4cc67121a7e7fc58227ed60fbc86fccb49f77ce428cf74d17150cf2af2bcaad6a8a1f11b137c1456c9118b9f05456cf455bbbeafd1c9ebfbffc335cb6b2cf7da8ff454370e75238d36dfb4949b7fdb1a97b14c8e51a2ff36ac6bd332066dac7d55f01f23fe1d728b6b68878c352cae197daafbbf0d3910c640b6a90efca43b0776b4ff85bcfe68fccb89b6f1ba8f3c2d7fdc47f264d9b65a0771be8a6bd18b8d361dd7a9b5eb500696f2c75eb0861cb1861db178ff06eda4defcbf56acccf385f18c3eec109fcbb25a875951eb61e513a83f2c2877faff5881e7dd71ccf97d1e3886fc4e119cd327a90ee3049f6d5631be94748f6b28ffaa66b44719b05d29e37fe3936cc347c95c49744e80f20c89fe0c05f80c0b3ea13c69a7fd5132f3987bf0411a9eeb471cf9a8fd74e3833915bef3e43fd37d0b7cc788ca69edd909ded7feefb0affd5f067b72df2fdbedc91d2b109f700db09fead05e8c6e22e91ea3df8731fa631aa348f17edee4c3e77886037de277dbfc81b817109a4b555ec23220bddaeb567b9dd6b65fe747659b6cd3932433d6e1d9018e5178cf1375c265bbf9f819ba9793082cb44d8e49c68363d24aa353de51212fc63af73db799f5f9d5d9f9e5dafae6fce2eac2e2aeef796e7dce756bb1363fb331b739b3b1ba1d7fb52ec3fdf9b4d8da0ed77e486f78a3443fd4bccf90ea7b84ee398c0a7e29dde1005dd13971a4d1794dad0971ad6cf4c6bbdce896d1ea26a06e94f84c36ff467d2196c9314af4d566df6d4c707d6bedab82ff7ee2df21b7b8c66be509413f21e8bfff0eb3a68cad7778016feff5e6f779123e5e63d9cc76b2d6f15979cf91836d1e386f64e53d7c3fdfe89f017b3f0a63c971c8faa6eeb1712ecdfb0b5897758f8de78c96fd273a9fa937ffaef556727f8fc2f89793eedc2bc69e45e8fd7509e83cf25988d6f333ea1ebfbab7989ad081a47bcc503ec3c2b5c399c6edff957df1d995a27b95d89edfefa6724fb5bee27b9a6823bc47a4ee5b4e24e173479c2b64e599bc879b770f9f73e959f0fb6be4f7fb8807d6a97d26755687fd1e6d81f78138afab37ffaef5565ab68bcf9e2a9df23b098cfeb9a65e54eeaefc41ed83b10c48afcec1a867c7a7485f5371f4d53af774601b7df1b3bc46ff52405faafffb02fa0a7d174ee94bbd3f8ee5b5bf552cda2d5bdc4eb76c8b46ffaad0ad3a9bb21ffa9396914694feccabb329789e0473ac2c7f097dbb2bf44e3215abd5b95615e33956235f3e478bb199e33fc6788b6d184bd55a0ecfaa1da19c1465ec652db5bab8b93cb7303bb33ebbb5bcba54dbf6fcc0ff079d95f8872bc10200>, + "metadataHash": Fr<0x1125672f40d49b4b192a803a41ccb3ddacec4da05bf7d535224059fa9bf766cd>, + "selector": Selector<0x111cfcfc>, }, } `; diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index 6ff1609c6aff..5a12d56b1b0c 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -282,9 +282,9 @@ export class Oracle { return newValues.map(toACVMField); } - emitContractClassLog([_contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): void { + emitContractClassLog([contractAddress]: ACVMField[], message: ACVMField[], [counter]: ACVMField[]): void { const logPayload = message.map(fromACVMField); - const log = new ContractClassLog(logPayload); + const log = new ContractClassLog(new AztecAddress(fromACVMField(contractAddress)), logPayload); this.typedOracle.emitContractClassLog(log, +counter); } diff --git a/yarn-project/simulator/src/public/public_tx_simulator.test.ts b/yarn-project/simulator/src/public/public_tx_simulator.test.ts index af3d7b6c6513..b3599d8949a7 100644 --- a/yarn-project/simulator/src/public/public_tx_simulator.test.ts +++ b/yarn-project/simulator/src/public/public_tx_simulator.test.ts @@ -178,11 +178,12 @@ describe('public_tx_simulator', () => { Math.ceil(publicContractClass.packedBytecode.length / 32) + 1, ), ]; - const contractClassLog = new ContractClassLog( - contractClassLogFields.concat( + const contractClassLog = ContractClassLog.fromFields([ + new Fr(REGISTERER_CONTRACT_ADDRESS), + ...contractClassLogFields.concat( new Array(CONTRACT_CLASS_LOG_SIZE_IN_FIELDS - contractClassLogFields.length).fill(Fr.ZERO), ), - ); + ]); tx.contractClassLogs.push(contractClassLog); const contractClassLogHash = ScopedLogHash.fromFields([ await contractClassLog.hash(), From 7cd0932154def3555ef4591c9104809afb6de0cd Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Mon, 24 Feb 2025 17:47:44 +0000 Subject: [PATCH 11/21] chore: move cc log to /logs/ to prep for conflicts --- yarn-project/archiver/src/archiver/archiver.ts | 2 +- .../archiver/src/archiver/kv_archiver_store/log_store.ts | 3 ++- .../memory_archiver_store/memory_archiver_store.ts | 2 +- .../circuit-types/src/logs/extended_contract_class_log.ts | 2 +- yarn-project/circuit-types/src/private_execution_result.ts | 3 ++- yarn-project/circuit-types/src/tx/tx.ts | 3 ++- yarn-project/circuit-types/src/tx_effect.ts | 3 ++- yarn-project/circuits.js/src/hash/hash.ts | 2 +- yarn-project/circuits.js/src/structs/index.ts | 1 - .../src/structs/{ => logs}/contract_class_log.test.ts | 2 +- .../src/structs/{ => logs}/contract_class_log.ts | 2 +- yarn-project/circuits.js/src/structs/logs/index.ts | 1 + .../circuits.js/src/structs/rollup/base_rollup_hints.ts | 2 +- yarn-project/circuits.js/src/tests/factories.ts | 2 +- .../noir-protocol-circuits-types/src/conversion/server.ts | 2 +- .../src/msg_validators/tx_validator/data_validator.test.ts | 3 ++- .../contract_class_registered_event.test.ts | 2 +- .../class-registerer/contract_class_registered_event.ts | 2 +- .../private_function_broadcasted_event.test.ts | 2 +- .../class-registerer/private_function_broadcasted_event.ts | 7 ++----- .../unconstrained_function_broadcasted_event.test.ts | 2 +- .../unconstrained_function_broadcasted_event.ts | 7 ++----- yarn-project/simulator/src/acvm/oracle/oracle.ts | 3 +-- yarn-project/simulator/src/acvm/oracle/typed_oracle.ts | 3 +-- .../simulator/src/client/client_execution_context.ts | 2 +- .../simulator/src/public/public_tx_simulator.test.ts | 2 +- yarn-project/txe/src/oracle/txe_oracle.ts | 3 +-- 27 files changed, 33 insertions(+), 37 deletions(-) rename yarn-project/circuits.js/src/structs/{ => logs}/contract_class_log.test.ts (96%) rename yarn-project/circuits.js/src/structs/{ => logs}/contract_class_log.ts (98%) diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index ecf734d16e81..3c180b3fd260 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -24,7 +24,6 @@ import { } from '@aztec/circuit-types'; import { type BlockHeader, - type ContractClassLog, type ContractClassPublic, type ContractDataSource, type ContractInstanceWithAddress, @@ -39,6 +38,7 @@ import { isValidUnconstrainedFunctionMembershipProof, } from '@aztec/circuits.js'; import { type AztecAddress } from '@aztec/circuits.js/aztec-address'; +import { type ContractClassLog } from '@aztec/circuits.js/logs'; import { createEthereumChain } from '@aztec/ethereum'; import { type EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts index 92196ec70290..fec43be53bd1 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts @@ -8,7 +8,8 @@ import { LogId, TxScopedL2Log, } from '@aztec/circuit-types'; -import { ContractClassLog, type Fr, PrivateLog, PublicLog } from '@aztec/circuits.js'; +import { type Fr, PrivateLog, PublicLog } from '@aztec/circuits.js'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { INITIAL_L2_BLOCK_NUM, MAX_NOTE_HASHES_PER_TX, PUBLIC_LOG_DATA_SIZE_IN_FIELDS } from '@aztec/constants'; import { createLogger } from '@aztec/foundation/log'; import { BufferReader, numToUInt32BE } from '@aztec/foundation/serialize'; diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index a39abfec756a..f32e8057a81e 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -17,7 +17,6 @@ import { } from '@aztec/circuit-types'; import { type BlockHeader, - type ContractClassLog, type ContractClassPublic, type ContractClassPublicWithBlockNumber, type ContractInstanceUpdateWithAddress, @@ -30,6 +29,7 @@ import { } from '@aztec/circuits.js'; import { FunctionSelector } from '@aztec/circuits.js/abi'; import { AztecAddress } from '@aztec/circuits.js/aztec-address'; +import { type ContractClassLog } from '@aztec/circuits.js/logs'; import { INITIAL_L2_BLOCK_NUM, MAX_NOTE_HASHES_PER_TX, diff --git a/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts b/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts index bc980531779b..7537dfda7f33 100644 --- a/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts +++ b/yarn-project/circuit-types/src/logs/extended_contract_class_log.ts @@ -1,4 +1,4 @@ -import { ContractClassLog } from '@aztec/circuits.js'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { BufferReader } from '@aztec/foundation/serialize'; import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; import { type FieldsOf } from '@aztec/foundation/types'; diff --git a/yarn-project/circuit-types/src/private_execution_result.ts b/yarn-project/circuit-types/src/private_execution_result.ts index e90b19b7779c..26f431c66d4e 100644 --- a/yarn-project/circuit-types/src/private_execution_result.ts +++ b/yarn-project/circuit-types/src/private_execution_result.ts @@ -1,5 +1,6 @@ -import { ContractClassLog, type IsEmpty, PrivateCircuitPublicInputs, sortByCounter } from '@aztec/circuits.js'; +import { type IsEmpty, PrivateCircuitPublicInputs, sortByCounter } from '@aztec/circuits.js'; import { NoteSelector } from '@aztec/circuits.js/abi'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { schemas } from '@aztec/circuits.js/schemas'; import { timesParallel } from '@aztec/foundation/collection'; import { randomBytes, randomInt } from '@aztec/foundation/crypto'; diff --git a/yarn-project/circuit-types/src/tx/tx.ts b/yarn-project/circuit-types/src/tx/tx.ts index 56d4bbffc3fd..6c52fffcb051 100644 --- a/yarn-project/circuit-types/src/tx/tx.ts +++ b/yarn-project/circuit-types/src/tx/tx.ts @@ -1,6 +1,7 @@ -import { ClientIvcProof, ContractClassLog, Fr, type GasSettings, PrivateLog, ScopedLogHash } from '@aztec/circuits.js'; +import { ClientIvcProof, Fr, type GasSettings, PrivateLog, ScopedLogHash } from '@aztec/circuits.js'; import { siloContractClassLog } from '@aztec/circuits.js/hash'; import { PrivateKernelTailCircuitPublicInputs } from '@aztec/circuits.js/kernel'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { Buffer32 } from '@aztec/foundation/buffer'; import { arraySerializedSizeOfNonEmpty } from '@aztec/foundation/collection'; import { BufferReader, serializeArrayOfBufferableToVector, serializeToBuffer } from '@aztec/foundation/serialize'; diff --git a/yarn-project/circuit-types/src/tx_effect.ts b/yarn-project/circuit-types/src/tx_effect.ts index acf08c645dc7..bcdbfd4d07f9 100644 --- a/yarn-project/circuit-types/src/tx_effect.ts +++ b/yarn-project/circuit-types/src/tx_effect.ts @@ -1,4 +1,5 @@ -import { ContractClassLog, Fr, PrivateLog, PublicDataWrite, PublicLog, RevertCode } from '@aztec/circuits.js'; +import { Fr, PrivateLog, PublicDataWrite, PublicLog, RevertCode } from '@aztec/circuits.js'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { CONTRACT_CLASS_LOGS_PREFIX, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, diff --git a/yarn-project/circuits.js/src/hash/hash.ts b/yarn-project/circuits.js/src/hash/hash.ts index 573aed1e7b57..aea95291d919 100644 --- a/yarn-project/circuits.js/src/hash/hash.ts +++ b/yarn-project/circuits.js/src/hash/hash.ts @@ -3,8 +3,8 @@ import { poseidon2Hash, poseidon2HashWithSeparator, sha256Trunc } from '@aztec/f import { Fr } from '@aztec/foundation/fields'; import { type AztecAddress } from '../aztec-address/index.js'; -import { type ContractClassLog } from '../index.js'; import { type ScopedL2ToL1Message } from '../structs/l2_to_l1_message.js'; +import { type ContractClassLog } from '../structs/logs/index.js'; /** * Computes a hash of a given verification key. diff --git a/yarn-project/circuits.js/src/structs/index.ts b/yarn-project/circuits.js/src/structs/index.ts index 0acab15e712c..d7e87bf03c93 100644 --- a/yarn-project/circuits.js/src/structs/index.ts +++ b/yarn-project/circuits.js/src/structs/index.ts @@ -4,7 +4,6 @@ export * from './client_ivc_proof.js'; export * from './complete_address.js'; export * from './content_commitment.js'; export * from './context/private_context_inputs.js'; -export * from './contract_class_log.js'; export * from './contract_storage_read.js'; export * from './contract_storage_update_request.js'; export * from './function_data.js'; diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.test.ts b/yarn-project/circuits.js/src/structs/logs/contract_class_log.test.ts similarity index 96% rename from yarn-project/circuits.js/src/structs/contract_class_log.test.ts rename to yarn-project/circuits.js/src/structs/logs/contract_class_log.test.ts index 27fd6038937b..08aed69a852b 100644 --- a/yarn-project/circuits.js/src/structs/contract_class_log.test.ts +++ b/yarn-project/circuits.js/src/structs/logs/contract_class_log.test.ts @@ -1,7 +1,7 @@ import { CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; -import { AztecAddress } from '../aztec-address/index.js'; +import { AztecAddress } from '../index.js'; import { ContractClassLog } from './contract_class_log.js'; describe('PublicLog', () => { diff --git a/yarn-project/circuits.js/src/structs/contract_class_log.ts b/yarn-project/circuits.js/src/structs/logs/contract_class_log.ts similarity index 98% rename from yarn-project/circuits.js/src/structs/contract_class_log.ts rename to yarn-project/circuits.js/src/structs/logs/contract_class_log.ts index c6dffdd7453d..533b14c2cd42 100644 --- a/yarn-project/circuits.js/src/structs/contract_class_log.ts +++ b/yarn-project/circuits.js/src/structs/logs/contract_class_log.ts @@ -7,7 +7,7 @@ import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/ import { inspect } from 'util'; import { z } from 'zod'; -import { AztecAddress } from './index.js'; +import { AztecAddress } from '../index.js'; export class ContractClassLog { static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * CONTRACT_CLASS_LOG_SIZE_IN_FIELDS; diff --git a/yarn-project/circuits.js/src/structs/logs/index.ts b/yarn-project/circuits.js/src/structs/logs/index.ts index 1c0333af575c..d5466e2e0ad2 100644 --- a/yarn-project/circuits.js/src/structs/logs/index.ts +++ b/yarn-project/circuits.js/src/structs/logs/index.ts @@ -1 +1,2 @@ +export * from './contract_class_log.js'; export * from './log_with_tx_data.js'; diff --git a/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts b/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts index 009615796078..e5c11ed9351a 100644 --- a/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts +++ b/yarn-project/circuits.js/src/structs/rollup/base_rollup_hints.ts @@ -6,7 +6,7 @@ import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; import { MembershipWitness } from '@aztec/foundation/trees'; import { type FieldsOf } from '@aztec/foundation/types'; -import { ContractClassLog } from '../contract_class_log.js'; +import { ContractClassLog } from '../logs/contract_class_log.js'; import { PartialStateReference } from '../partial_state_reference.js'; import { PublicDataHint } from '../public_data_hint.js'; import { ConstantRollupData } from './constant_rollup_data.js'; diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index 5c7d6b89eb28..3f07c151ed3d 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -121,7 +121,6 @@ import { GasFees } from '../structs/gas_fees.js'; import { GasSettings } from '../structs/gas_settings.js'; import { GlobalVariables } from '../structs/global_variables.js'; import { - ContractClassLog, CountedPublicCallRequest, PrivateLog, PrivateLogData, @@ -144,6 +143,7 @@ import { TxConstantData, } from '../structs/kernel/index.js'; import { PrivateToRollupKernelCircuitPublicInputs } from '../structs/kernel/private_to_rollup_kernel_circuit_public_inputs.js'; +import { ContractClassLog } from '../structs/logs/contract_class_log.js'; import { AvmProofData } from '../structs/rollup/avm_proof_data.js'; import { BaseOrMergeRollupPublicInputs } from '../structs/rollup/base_or_merge_rollup_public_inputs.js'; import { PrivateBaseRollupHints, PublicBaseRollupHints } from '../structs/rollup/base_rollup_hints.js'; diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts index 9505a29078a8..6e1f8896d3e4 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts @@ -1,7 +1,6 @@ import { BlobPublicInputs, BlockBlobPublicInputs, Poseidon2Sponge, SpongeBlob } from '@aztec/blob-lib'; import { type BaseParityInputs, - type ContractClassLog, Fr, ParityPublicInputs, type PublicDataHint, @@ -22,6 +21,7 @@ import { PrivateToRollupKernelCircuitPublicInputs, TxConstantData, } from '@aztec/circuits.js/kernel'; +import { type ContractClassLog } from '@aztec/circuits.js/logs'; import { type AvmProofData, BaseOrMergeRollupPublicInputs, diff --git a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts index c8600a85a9fa..1d85c3f8e291 100644 --- a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts +++ b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts @@ -1,6 +1,7 @@ import { type Tx } from '@aztec/circuit-types'; import { mockTx } from '@aztec/circuit-types/testing'; -import { AztecAddress, ContractClassLog, Fr, FunctionSelector, ScopedLogHash } from '@aztec/circuits.js'; +import { AztecAddress, Fr, FunctionSelector, ScopedLogHash } from '@aztec/circuits.js'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { MAX_CONTRACT_CLASS_LOGS_PER_TX } from '@aztec/constants'; import { timesParallel } from '@aztec/foundation/collection'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts index a199a825725b..596e53481252 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts @@ -1,4 +1,4 @@ -import { ContractClassLog } from '@aztec/circuits.js'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { getSampleContractClassRegisteredEventPayload } from '../tests/fixtures.js'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts index fe02911d1c9b..69157e0332de 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts @@ -1,11 +1,11 @@ import { - type ContractClassLog, type ContractClassPublic, type PublicFunction, computeContractClassId, computePublicBytecodeCommitment, } from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/circuits.js/abi'; +import { type ContractClassLog } from '@aztec/circuits.js/logs'; import { PUBLIC_DISPATCH_SELECTOR } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; import { FieldReader } from '@aztec/foundation/serialize'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts index 3b51c36db20c..179909dc446f 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts @@ -1,4 +1,4 @@ -import { ContractClassLog } from '@aztec/circuits.js'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { getSamplePrivateFunctionBroadcastedEventPayload } from '../tests/fixtures.js'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts index 4240267924af..598029b7e461 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts @@ -1,9 +1,6 @@ -import { - ContractClassLog, - type ExecutablePrivateFunctionWithMembershipProof, - type PrivateFunction, -} from '@aztec/circuits.js'; +import { type ExecutablePrivateFunctionWithMembershipProof, type PrivateFunction } from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/circuits.js/abi'; +import { type ContractClassLog } from '@aztec/circuits.js/logs'; import { ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, FUNCTION_TREE_HEIGHT, diff --git a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts index d81575c5c285..00c54a35a9b4 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts @@ -1,5 +1,5 @@ -import { ContractClassLog } from '@aztec/circuits.js'; import { FunctionSelector } from '@aztec/circuits.js/abi'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { randomBytes } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { type Tuple } from '@aztec/foundation/serialize'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts index efbcbd5b696e..d129cef6a2a4 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts @@ -1,9 +1,6 @@ -import { - ContractClassLog, - type UnconstrainedFunction, - type UnconstrainedFunctionWithMembershipProof, -} from '@aztec/circuits.js'; +import { type UnconstrainedFunction, type UnconstrainedFunctionWithMembershipProof } from '@aztec/circuits.js'; import { FunctionSelector, bufferFromFields } from '@aztec/circuits.js/abi'; +import { type ContractClassLog } from '@aztec/circuits.js/logs'; import { ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS, diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index 5a12d56b1b0c..bbb3d7826032 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -1,8 +1,7 @@ import { MerkleTreeId } from '@aztec/circuit-types'; -import { ContractClassLog } from '@aztec/circuits.js'; import { FunctionSelector, NoteSelector } from '@aztec/circuits.js/abi'; import { AztecAddress } from '@aztec/circuits.js/aztec-address'; -import { LogWithTxData } from '@aztec/circuits.js/logs'; +import { ContractClassLog, LogWithTxData } from '@aztec/circuits.js/logs'; import { Fr } from '@aztec/foundation/fields'; import { type ACVMField } from '../acvm_types.js'; diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index 25a4f7aceebb..3237098fa57e 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -8,14 +8,13 @@ import { import { type NullifierMembershipWitness } from '@aztec/circuit-types/interfaces/server'; import { type BlockHeader, - type ContractClassLog, type ContractInstance, type IndexedTaggingSecret, type KeyValidationRequest, } from '@aztec/circuits.js'; import { type FunctionSelector, type NoteSelector } from '@aztec/circuits.js/abi'; import { type AztecAddress } from '@aztec/circuits.js/aztec-address'; -import { type LogWithTxData } from '@aztec/circuits.js/logs'; +import { type ContractClassLog, type LogWithTxData } from '@aztec/circuits.js/logs'; import { type L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index 6028da9e4f85..5b435cd1cda0 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -9,7 +9,6 @@ import { import { type BlockHeader, CallContext, - ContractClassLog, FunctionSelector, PrivateContextInputs, type TxContext, @@ -17,6 +16,7 @@ import { import { type FunctionAbi, type FunctionArtifact, type NoteSelector, countArgumentsSize } from '@aztec/circuits.js/abi'; import { AztecAddress } from '@aztec/circuits.js/aztec-address'; import { computeUniqueNoteHash, siloNoteHash } from '@aztec/circuits.js/hash'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { PRIVATE_CONTEXT_INPUTS_LENGTH, PUBLIC_DISPATCH_SELECTOR } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; import { createLogger } from '@aztec/foundation/log'; diff --git a/yarn-project/simulator/src/public/public_tx_simulator.test.ts b/yarn-project/simulator/src/public/public_tx_simulator.test.ts index b3599d8949a7..e81e6d95c296 100644 --- a/yarn-project/simulator/src/public/public_tx_simulator.test.ts +++ b/yarn-project/simulator/src/public/public_tx_simulator.test.ts @@ -4,7 +4,6 @@ import { mockTx } from '@aztec/circuit-types/testing'; import { AztecAddress, BlockHeader, - ContractClassLog, type ContractDataSource, Fr, Gas, @@ -20,6 +19,7 @@ import { } from '@aztec/circuits.js'; import { bufferAsFields } from '@aztec/circuits.js/abi'; import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; +import { ContractClassLog } from '@aztec/circuits.js/logs'; import { fr, makeContractClassPublic } from '@aztec/circuits.js/testing'; import { AppendOnlyTreeSnapshot, PublicDataTreeLeaf } from '@aztec/circuits.js/trees'; import { diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index cdc70644ce5a..e97c112e531c 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -20,7 +20,6 @@ import { type CircuitWitnessGenerationStats } from '@aztec/circuit-types/stats'; import { BlockHeader, CallContext, - type ContractClassLog, type ContractInstance, type ContractInstanceWithAddress, Gas, @@ -50,7 +49,7 @@ import { siloNoteHash, siloNullifier, } from '@aztec/circuits.js/hash'; -import { LogWithTxData } from '@aztec/circuits.js/logs'; +import { type ContractClassLog, LogWithTxData } from '@aztec/circuits.js/logs'; import { makeAppendOnlyTreeSnapshot, makeContentCommitment, From edf15af2bec29ef82e8ea20de90044d3643f5edb Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Mon, 24 Feb 2025 18:20:04 +0000 Subject: [PATCH 12/21] chore: post merge fmt and fixes --- .../crates/types/src/abis/contract_class_log.nr | 1 - yarn-project/circuits.js/src/logs/contract_class_log.test.ts | 2 +- yarn-project/circuits.js/src/logs/contract_class_log.ts | 2 +- yarn-project/circuits.js/src/logs/index.ts | 1 + 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr index 67d9eab3b09e..2f2acd9e6925 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/contract_class_log.nr @@ -42,4 +42,3 @@ pub fn validate_and_silo_contract_class_log( // Silo log silo_contract_class_log(log) } - diff --git a/yarn-project/circuits.js/src/logs/contract_class_log.test.ts b/yarn-project/circuits.js/src/logs/contract_class_log.test.ts index 08aed69a852b..27fd6038937b 100644 --- a/yarn-project/circuits.js/src/logs/contract_class_log.test.ts +++ b/yarn-project/circuits.js/src/logs/contract_class_log.test.ts @@ -1,7 +1,7 @@ import { CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; -import { AztecAddress } from '../index.js'; +import { AztecAddress } from '../aztec-address/index.js'; import { ContractClassLog } from './contract_class_log.js'; describe('PublicLog', () => { diff --git a/yarn-project/circuits.js/src/logs/contract_class_log.ts b/yarn-project/circuits.js/src/logs/contract_class_log.ts index 533b14c2cd42..190afae5e2a5 100644 --- a/yarn-project/circuits.js/src/logs/contract_class_log.ts +++ b/yarn-project/circuits.js/src/logs/contract_class_log.ts @@ -7,7 +7,7 @@ import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/ import { inspect } from 'util'; import { z } from 'zod'; -import { AztecAddress } from '../index.js'; +import { AztecAddress } from '../aztec-address/index.js'; export class ContractClassLog { static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * CONTRACT_CLASS_LOG_SIZE_IN_FIELDS; diff --git a/yarn-project/circuits.js/src/logs/index.ts b/yarn-project/circuits.js/src/logs/index.ts index 5a37eb403eb1..310aa3a9c634 100644 --- a/yarn-project/circuits.js/src/logs/index.ts +++ b/yarn-project/circuits.js/src/logs/index.ts @@ -1,4 +1,5 @@ export * from './log_with_tx_data.js'; export * from './indexed_tagging_secret.js'; +export * from './contract_class_log.js'; export * from './public_log.js'; export * from './private_log.js'; From 36edf5a1afcbe548a77ee44e6aeb295bf38fb0f1 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Mon, 24 Feb 2025 20:29:06 +0000 Subject: [PATCH 13/21] chore: aaa lint --- yarn-project/circuit-types/src/tx/tx.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/yarn-project/circuit-types/src/tx/tx.ts b/yarn-project/circuit-types/src/tx/tx.ts index 5ae4ff9f45c2..9b21a5adc209 100644 --- a/yarn-project/circuit-types/src/tx/tx.ts +++ b/yarn-project/circuit-types/src/tx/tx.ts @@ -1,10 +1,6 @@ import type { GasSettings } from '@aztec/circuits.js/gas'; import { siloContractClassLog } from '@aztec/circuits.js/hash'; -import { - PrivateKernelTailCircuitPublicInputs, - type PrivateToPublicAccumulatedData, - ScopedLogHash, -} from '@aztec/circuits.js/kernel'; +import { PrivateKernelTailCircuitPublicInputs, ScopedLogHash } from '@aztec/circuits.js/kernel'; import { ContractClassLog, PrivateLog } from '@aztec/circuits.js/logs'; import { ClientIvcProof } from '@aztec/circuits.js/proofs'; import { Buffer32 } from '@aztec/foundation/buffer'; From 5bc9634ebd9b38a07e8454074846828389c6fd2e Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Tue, 25 Feb 2025 13:15:14 +0000 Subject: [PATCH 14/21] chore: post merge fmt --- .../p2p/src/msg_validators/tx_validator/data_validator.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts index bc5186105a79..5e1188665d80 100644 --- a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts +++ b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts @@ -5,8 +5,7 @@ import { AztecAddress } from '@aztec/circuits.js/aztec-address'; import { computeVarArgsHash } from '@aztec/circuits.js/hash'; import { ScopedLogHash } from '@aztec/circuits.js/kernel'; import { ContractClassLog } from '@aztec/circuits.js/logs'; -import { MAX_CONTRACT_CLASS_LOGS_PER_TX } from '@aztec/constants'; -import { MAX_FR_ARGS_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants'; +import { MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_FR_ARGS_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants'; import { timesParallel } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; From 9764a0e9e899dbefbb9e6a37b632fdfb68e333d9 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Wed, 26 Feb 2025 09:36:10 +0000 Subject: [PATCH 15/21] chore: post merge fixes, fmt --- yarn-project/archiver/src/archiver/archiver.ts | 2 +- .../circuit-types/src/logs/extended_unencrypted_l2_log.ts | 0 yarn-project/end-to-end/scripts/docker-compose.yml | 1 - yarn-project/noir-bb-bench/src/index.ts | 2 +- .../contract_class_registered_event.test.ts | 3 +++ .../class-registerer/contract_class_registered_event.ts | 4 ++-- .../private_function_broadcasted_event.test.ts | 2 +- .../private_function_broadcasted_event.ts | 6 +++--- .../unconstrained_function_broadcasted_event.test.ts | 1 + .../unconstrained_function_broadcasted_event.ts | 4 +++- yarn-project/simulator/src/acvm/oracle/oracle.ts | 2 +- yarn-project/simulator/src/acvm/oracle/typed_oracle.ts | 2 +- yarn-project/stdlib/src/hash/hash.ts | 6 +++--- yarn-project/stdlib/src/interfaces/archiver.test.ts | 1 + yarn-project/stdlib/src/interfaces/aztec-node.test.ts | 1 + yarn-project/stdlib/src/interfaces/get_logs_response.ts | 8 ++++---- yarn-project/stdlib/src/interfaces/pxe.test.ts | 1 + .../stdlib/src/logs/extended_contract_class_log.ts | 2 +- .../stdlib/src/logs/extended_unencrypted_l2_log.ts | 0 yarn-project/stdlib/src/tx/private_execution_result.ts | 1 + yarn-project/stdlib/src/tx/simulated_tx.ts | 2 ++ yarn-project/stdlib/src/tx/tx.ts | 3 +++ yarn-project/stdlib/src/tx/tx_effect.ts | 3 ++- 23 files changed, 36 insertions(+), 21 deletions(-) delete mode 100644 yarn-project/circuit-types/src/logs/extended_unencrypted_l2_log.ts delete mode 100644 yarn-project/stdlib/src/logs/extended_unencrypted_l2_log.ts diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index bb1d680f792d..1b305b0fa116 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -39,7 +39,7 @@ import { } from '@aztec/stdlib/epoch-helpers'; import type { GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client'; import type { L2LogsSource } from '@aztec/stdlib/interfaces/server'; -import { type LogFilter, type PrivateLog, type PublicLog, TxScopedL2Log, UnencryptedL2Log } from '@aztec/stdlib/logs'; +import { ContractClassLog, type LogFilter, type PrivateLog, type PublicLog, TxScopedL2Log } from '@aztec/stdlib/logs'; import type { InboxLeaf, L1ToL2MessageSource } from '@aztec/stdlib/messaging'; import { type BlockHeader, TxEffect, TxHash, TxReceipt } from '@aztec/stdlib/tx'; import { Attributes, type TelemetryClient, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client'; diff --git a/yarn-project/circuit-types/src/logs/extended_unencrypted_l2_log.ts b/yarn-project/circuit-types/src/logs/extended_unencrypted_l2_log.ts deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/yarn-project/end-to-end/scripts/docker-compose.yml b/yarn-project/end-to-end/scripts/docker-compose.yml index 52def77ebea8..d3762961efc6 100644 --- a/yarn-project/end-to-end/scripts/docker-compose.yml +++ b/yarn-project/end-to-end/scripts/docker-compose.yml @@ -26,7 +26,6 @@ services: ARCHIVER_VIEM_POLLING_INTERVAL_MS: 500 HARDWARE_CONCURRENCY: ${HARDWARE_CONCURRENCY:-} - end-to-end: image: aztecprotocol/build:3.0 cpus: 4 diff --git a/yarn-project/noir-bb-bench/src/index.ts b/yarn-project/noir-bb-bench/src/index.ts index b14877a23d22..83b837bd8b98 100644 --- a/yarn-project/noir-bb-bench/src/index.ts +++ b/yarn-project/noir-bb-bench/src/index.ts @@ -1,6 +1,6 @@ /* eslint-disable camelcase */ import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; -import { type InputValue } from '@noir-lang/noirc_abi'; +import type { InputValue } from '@noir-lang/noirc_abi'; import createDebug from 'debug'; // these files are generated diff --git a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts index f266d0983759..ff57600b19a4 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.test.ts @@ -1,3 +1,6 @@ +import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; +import { ContractClassLog } from '@aztec/stdlib/logs'; + import { getSampleContractClassRegisteredEventPayload } from '../tests/fixtures.js'; import { ContractClassRegisteredEvent } from './contract_class_registered_event.js'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts index 83206cfb01a4..e93058174433 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/contract_class_registered_event.ts @@ -1,5 +1,6 @@ import { PUBLIC_DISPATCH_SELECTOR } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; +import { FieldReader } from '@aztec/foundation/serialize'; import { FunctionSelector, bufferFromFields } from '@aztec/stdlib/abi'; import { type ContractClassPublic, @@ -7,8 +8,7 @@ import { computeContractClassId, computePublicBytecodeCommitment, } from '@aztec/stdlib/contract'; - -import chunk from 'lodash.chunk'; +import type { ContractClassLog } from '@aztec/stdlib/logs'; import { REGISTERER_CONTRACT_CLASS_REGISTERED_TAG } from '../protocol_contract_data.js'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts index 179909dc446f..18e0fc995e00 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.test.ts @@ -1,5 +1,5 @@ -import { ContractClassLog } from '@aztec/circuits.js/logs'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; +import { ContractClassLog } from '@aztec/stdlib/logs'; import { getSamplePrivateFunctionBroadcastedEventPayload } from '../tests/fixtures.js'; import { PrivateFunctionBroadcastedEvent } from './private_function_broadcasted_event.js'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts index 8a3efa23da55..7bb147365fe1 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/private_function_broadcasted_event.ts @@ -4,11 +4,11 @@ import { MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS, } from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; -import { type Tuple } from '@aztec/foundation/serialize'; +import type { Tuple } from '@aztec/foundation/serialize'; +import { FieldReader } from '@aztec/foundation/serialize'; import { FunctionSelector, bufferFromFields } from '@aztec/stdlib/abi'; import type { ExecutablePrivateFunctionWithMembershipProof, PrivateFunction } from '@aztec/stdlib/contract'; - -import chunk from 'lodash.chunk'; +import type { ContractClassLog } from '@aztec/stdlib/logs'; import { REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG } from '../protocol_contract_data.js'; diff --git a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts index d1cec39a9b27..ae87730a175c 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.test.ts @@ -3,6 +3,7 @@ import { Fr } from '@aztec/foundation/fields'; import type { Tuple } from '@aztec/foundation/serialize'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { FunctionSelector } from '@aztec/stdlib/abi'; +import { ContractClassLog } from '@aztec/stdlib/logs'; import { getSampleUnconstrainedFunctionBroadcastedEventPayload } from '../tests/fixtures.js'; import { diff --git a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts index 09c615c8f5cc..e4c613102fd7 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/unconstrained_function_broadcasted_event.ts @@ -4,9 +4,11 @@ import { } from '@aztec/constants'; import { removeArrayPaddingEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; -import { type Tuple } from '@aztec/foundation/serialize'; +import type { Tuple } from '@aztec/foundation/serialize'; +import { FieldReader } from '@aztec/foundation/serialize'; import { FunctionSelector, bufferFromFields } from '@aztec/stdlib/abi'; import type { UnconstrainedFunction, UnconstrainedFunctionWithMembershipProof } from '@aztec/stdlib/contract'; +import type { ContractClassLog } from '@aztec/stdlib/logs'; import { REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG } from '../protocol_contract_data.js'; diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index 9f0ce4bf17ac..6311ad8c2c15 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -1,7 +1,7 @@ import { Fr } from '@aztec/foundation/fields'; import { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi'; import { AztecAddress } from '@aztec/stdlib/aztec-address'; -import { LogWithTxData, UnencryptedL2Log } from '@aztec/stdlib/logs'; +import { ContractClassLog, LogWithTxData } from '@aztec/stdlib/logs'; import { MerkleTreeId } from '@aztec/stdlib/trees'; import type { ACVMField } from '../acvm_types.js'; diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index 561d459ea6c8..b88498fe4daf 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -4,7 +4,7 @@ import type { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi'; import type { AztecAddress } from '@aztec/stdlib/aztec-address'; import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract'; import type { KeyValidationRequest } from '@aztec/stdlib/kernel'; -import { type IndexedTaggingSecret, type LogWithTxData } from '@aztec/stdlib/logs'; +import type { IndexedTaggingSecret, LogWithTxData } from '@aztec/stdlib/logs'; import type { Note, NoteStatus } from '@aztec/stdlib/note'; import { type MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees'; import type { BlockHeader } from '@aztec/stdlib/tx'; diff --git a/yarn-project/stdlib/src/hash/hash.ts b/yarn-project/stdlib/src/hash/hash.ts index 28bb740795ef..9da47a3250cb 100644 --- a/yarn-project/stdlib/src/hash/hash.ts +++ b/yarn-project/stdlib/src/hash/hash.ts @@ -2,9 +2,9 @@ import { GeneratorIndex } from '@aztec/constants'; import { poseidon2Hash, poseidon2HashWithSeparator, sha256Trunc } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { type AztecAddress } from '../aztec-address/index.js'; -import { type ContractClassLog } from '../logs/index.js'; -import { type ScopedL2ToL1Message } from '../messaging/l2_to_l1_message.js'; +import type { AztecAddress } from '../aztec-address/index.js'; +import type { ContractClassLog } from '../logs/index.js'; +import type { ScopedL2ToL1Message } from '../messaging/l2_to_l1_message.js'; /** * Computes a hash of a given verification key. diff --git a/yarn-project/stdlib/src/interfaces/archiver.test.ts b/yarn-project/stdlib/src/interfaces/archiver.test.ts index 0e49e7a2c3ae..aaa2f97499f4 100644 --- a/yarn-project/stdlib/src/interfaces/archiver.test.ts +++ b/yarn-project/stdlib/src/interfaces/archiver.test.ts @@ -19,6 +19,7 @@ import { } from '../contract/index.js'; import { EmptyL1RollupConstants, type L1RollupConstants } from '../epoch-helpers/index.js'; import { PublicKeys } from '../keys/public_keys.js'; +import { ExtendedContractClassLog } from '../logs/extended_contract_class_log.js'; import { ExtendedPublicLog } from '../logs/extended_public_log.js'; import type { LogFilter } from '../logs/log_filter.js'; import { PrivateLog } from '../logs/private_log.js'; diff --git a/yarn-project/stdlib/src/interfaces/aztec-node.test.ts b/yarn-project/stdlib/src/interfaces/aztec-node.test.ts index d5950853bba3..d91cab0fa129 100644 --- a/yarn-project/stdlib/src/interfaces/aztec-node.test.ts +++ b/yarn-project/stdlib/src/interfaces/aztec-node.test.ts @@ -29,6 +29,7 @@ import { } from '../contract/index.js'; import { GasFees } from '../gas/gas_fees.js'; import { PublicKeys } from '../keys/public_keys.js'; +import { ExtendedContractClassLog } from '../logs/extended_contract_class_log.js'; import { ExtendedPublicLog } from '../logs/extended_public_log.js'; import type { LogFilter } from '../logs/log_filter.js'; import { PrivateLog } from '../logs/private_log.js'; diff --git a/yarn-project/stdlib/src/interfaces/get_logs_response.ts b/yarn-project/stdlib/src/interfaces/get_logs_response.ts index 5cc92881fdf7..3bdab68cf3f2 100644 --- a/yarn-project/stdlib/src/interfaces/get_logs_response.ts +++ b/yarn-project/stdlib/src/interfaces/get_logs_response.ts @@ -1,19 +1,19 @@ import { z } from 'zod'; +import { ExtendedContractClassLog } from '../logs/extended_contract_class_log.js'; import { ExtendedPublicLog } from '../logs/extended_public_log.js'; -import { ExtendedUnencryptedL2Log } from '../logs/extended_unencrypted_l2_log.js'; import type { ZodFor } from '../schemas/index.js'; /** Response for the getContractClassLogs archiver call. */ export type GetContractClassLogsResponse = { - /** An array of ExtendedUnencryptedL2Log elements. */ - logs: ExtendedUnencryptedL2Log[]; + /** An array of ExtendedContractClassLog elements. */ + logs: ExtendedContractClassLog[]; /** Indicates if a limit has been reached. */ maxLogsHit: boolean; }; export const GetContractClassLogsResponseSchema: ZodFor = z.object({ - logs: z.array(ExtendedUnencryptedL2Log.schema), + logs: z.array(ExtendedContractClassLog.schema), maxLogsHit: z.boolean(), }); diff --git a/yarn-project/stdlib/src/interfaces/pxe.test.ts b/yarn-project/stdlib/src/interfaces/pxe.test.ts index 729919fef90f..8ec3c17a1585 100644 --- a/yarn-project/stdlib/src/interfaces/pxe.test.ts +++ b/yarn-project/stdlib/src/interfaces/pxe.test.ts @@ -29,6 +29,7 @@ import { import { GasFees } from '../gas/gas_fees.js'; import { PrivateKernelTailCircuitPublicInputs } from '../kernel/private_kernel_tail_circuit_public_inputs.js'; import { PublicKeys } from '../keys/public_keys.js'; +import { ExtendedContractClassLog } from '../logs/extended_contract_class_log.js'; import { ExtendedPublicLog } from '../logs/extended_public_log.js'; import type { LogFilter } from '../logs/log_filter.js'; import { UniqueNote } from '../note/index.js'; diff --git a/yarn-project/stdlib/src/logs/extended_contract_class_log.ts b/yarn-project/stdlib/src/logs/extended_contract_class_log.ts index 90fbd633a80b..425ee5bbb6f5 100644 --- a/yarn-project/stdlib/src/logs/extended_contract_class_log.ts +++ b/yarn-project/stdlib/src/logs/extended_contract_class_log.ts @@ -1,4 +1,3 @@ -import { ContractClassLog } from '@aztec/circuits.js/logs'; import type { ZodFor } from '@aztec/foundation/schemas'; import { BufferReader } from '@aztec/foundation/serialize'; import { bufferToHex, hexToBuffer } from '@aztec/foundation/string'; @@ -7,6 +6,7 @@ import type { FieldsOf } from '@aztec/foundation/types'; import isEqual from 'lodash.isequal'; import { z } from 'zod'; +import { ContractClassLog } from './contract_class_log.js'; import { LogId } from './log_id.js'; /** diff --git a/yarn-project/stdlib/src/logs/extended_unencrypted_l2_log.ts b/yarn-project/stdlib/src/logs/extended_unencrypted_l2_log.ts deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/yarn-project/stdlib/src/tx/private_execution_result.ts b/yarn-project/stdlib/src/tx/private_execution_result.ts index c817f4680f75..0788c91b8da2 100644 --- a/yarn-project/stdlib/src/tx/private_execution_result.ts +++ b/yarn-project/stdlib/src/tx/private_execution_result.ts @@ -9,6 +9,7 @@ import { NoteSelector } from '../abi/note_selector.js'; import { PrivateCircuitPublicInputs } from '../kernel/private_circuit_public_inputs.js'; import type { IsEmpty } from '../kernel/utils/interfaces.js'; import { sortByCounter } from '../kernel/utils/order_and_comparison.js'; +import { ContractClassLog } from '../logs/contract_class_log.js'; import { Note } from '../note/note.js'; import { type ZodFor, mapSchema, schemas } from '../schemas/index.js'; import { PublicExecutionRequest } from './public_execution_request.js'; diff --git a/yarn-project/stdlib/src/tx/simulated_tx.ts b/yarn-project/stdlib/src/tx/simulated_tx.ts index 50b651bba175..7c4d1ae8e881 100644 --- a/yarn-project/stdlib/src/tx/simulated_tx.ts +++ b/yarn-project/stdlib/src/tx/simulated_tx.ts @@ -9,6 +9,8 @@ import { type PrivateKernelProverProfileResult, PrivateKernelProverProfileResultSchema, } from '../kernel/private_kernel_prover_profile_result.js'; +import { PrivateKernelTailCircuitPublicInputs } from '../kernel/private_kernel_tail_circuit_public_inputs.js'; +import { ClientIvcProof } from '../proofs/client_ivc_proof.js'; import { PrivateCallExecutionResult, PrivateExecutionResult, diff --git a/yarn-project/stdlib/src/tx/tx.ts b/yarn-project/stdlib/src/tx/tx.ts index d660d20f0694..3d5ddf34c46f 100644 --- a/yarn-project/stdlib/src/tx/tx.ts +++ b/yarn-project/stdlib/src/tx/tx.ts @@ -8,9 +8,12 @@ import type { FieldsOf } from '@aztec/foundation/types'; import { z } from 'zod'; import type { GasSettings } from '../gas/gas_settings.js'; +import { siloContractClassLog } from '../hash/hash.js'; import type { GetPublicLogsResponse } from '../interfaces/get_logs_response.js'; import type { L2LogsSource } from '../interfaces/l2_logs_source.js'; +import type { ScopedLogHash } from '../kernel/log_hash.js'; import { PrivateKernelTailCircuitPublicInputs } from '../kernel/private_kernel_tail_circuit_public_inputs.js'; +import { ContractClassLog } from '../logs/contract_class_log.js'; import { PrivateLog } from '../logs/private_log.js'; import { Gossipable } from '../p2p/gossipable.js'; import { TopicType, createTopicString } from '../p2p/topic_type.js'; diff --git a/yarn-project/stdlib/src/tx/tx_effect.ts b/yarn-project/stdlib/src/tx/tx_effect.ts index 0e3795af00d6..c753044b8b8f 100644 --- a/yarn-project/stdlib/src/tx/tx_effect.ts +++ b/yarn-project/stdlib/src/tx/tx_effect.ts @@ -23,7 +23,6 @@ import { toBufferBE } from '@aztec/foundation/bigint-buffer'; import { padArrayEnd } from '@aztec/foundation/collection'; import { sha256Trunc } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { jsonStringify } from '@aztec/foundation/json-rpc'; import { type ZodFor, schemas } from '@aztec/foundation/schemas'; import { BufferReader, @@ -38,8 +37,10 @@ import { z } from 'zod'; import { PublicDataWrite } from '../avm/public_data_write.js'; import { RevertCode } from '../avm/revert_code.js'; +import { ContractClassLog } from '../logs/contract_class_log.js'; import { PrivateLog } from '../logs/private_log.js'; import { PublicLog } from '../logs/public_log.js'; +import { TxHash } from './tx_hash.js'; // This will appear as 0x74785f7374617274 in logs export const TX_START_PREFIX = 8392562855083340404n; From 6a4a0dad396d9328947797e4289a154cac94de4c Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Wed, 26 Feb 2025 09:40:06 +0000 Subject: [PATCH 16/21] chore: remove docker fmt i guess --- yarn-project/end-to-end/scripts/docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn-project/end-to-end/scripts/docker-compose.yml b/yarn-project/end-to-end/scripts/docker-compose.yml index d3762961efc6..52def77ebea8 100644 --- a/yarn-project/end-to-end/scripts/docker-compose.yml +++ b/yarn-project/end-to-end/scripts/docker-compose.yml @@ -26,6 +26,7 @@ services: ARCHIVER_VIEM_POLLING_INTERVAL_MS: 500 HARDWARE_CONCURRENCY: ${HARDWARE_CONCURRENCY:-} + end-to-end: image: aztecprotocol/build:3.0 cpus: 4 From 7593562adc2bed6f817919016a0e49a06e690073 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Wed, 26 Feb 2025 11:27:24 +0000 Subject: [PATCH 17/21] chore: more fixes (bootstrap no longer full build) --- .../src/archiver/kv_archiver_store/log_store.ts | 11 ++++++++++- .../memory_archiver_store/memory_archiver_store.ts | 2 ++ yarn-project/end-to-end/scripts/docker-compose.yml | 1 - .../src/conversion/server.ts | 4 +++- .../tx_validator/data_validator.test.ts | 4 +++- .../src/orchestrator/block-building-helpers.ts | 1 + .../simulator/src/acvm/oracle/typed_oracle.ts | 2 +- .../simulator/src/client/client_execution_context.ts | 1 + .../simulator/src/public/public_tx_simulator.test.ts | 9 ++++++++- yarn-project/txe/src/oracle/txe_oracle.ts | 2 +- 10 files changed, 30 insertions(+), 7 deletions(-) diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts index 5b94c0cacf14..3fab13064d3c 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts @@ -5,7 +5,16 @@ import { BufferReader, numToUInt32BE } from '@aztec/foundation/serialize'; import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store'; import type { L2Block } from '@aztec/stdlib/block'; import type { GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client'; -import { ExtendedPublicLog, type LogFilter, LogId, PrivateLog, PublicLog, TxScopedL2Log } from '@aztec/stdlib/logs'; +import { + ContractClassLog, + ExtendedContractClassLog, + ExtendedPublicLog, + type LogFilter, + LogId, + PrivateLog, + PublicLog, + TxScopedL2Log, +} from '@aztec/stdlib/logs'; import type { BlockStore } from './block_store.js'; diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index c221f72520f3..632f48cf1bd3 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -19,6 +19,8 @@ import type { } from '@aztec/stdlib/contract'; import type { GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client'; import { + ContractClassLog, + ExtendedContractClassLog, ExtendedPublicLog, type LogFilter, LogId, diff --git a/yarn-project/end-to-end/scripts/docker-compose.yml b/yarn-project/end-to-end/scripts/docker-compose.yml index 52def77ebea8..d3762961efc6 100644 --- a/yarn-project/end-to-end/scripts/docker-compose.yml +++ b/yarn-project/end-to-end/scripts/docker-compose.yml @@ -26,7 +26,6 @@ services: ARCHIVER_VIEM_POLLING_INTERVAL_MS: 500 HARDWARE_CONCURRENCY: ${HARDWARE_CONCURRENCY:-} - end-to-end: image: aztecprotocol/build:3.0 cpus: 4 diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts index b990799e264e..f2b55fb59297 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts @@ -4,6 +4,7 @@ import { AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, AZTEC_MAX_EPOCH_DURATION, BLOBS_PER_BLOCK, + CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, HONK_VERIFICATION_KEY_LENGTH_IN_FIELDS, type NESTED_RECURSIVE_PROOF_LENGTH, type NULLIFIER_TREE_HEIGHT, @@ -13,7 +14,7 @@ import { } from '@aztec/constants'; import { toHex } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; -import { mapTuple } from '@aztec/foundation/serialize'; +import { type Tuple, mapTuple } from '@aztec/foundation/serialize'; import type { MembershipWitness } from '@aztec/foundation/trees'; import { type AvmAccumulatedData, type AvmCircuitPublicInputs, PublicDataHint, RevertCode } from '@aztec/stdlib/avm'; import { @@ -24,6 +25,7 @@ import { PrivateToRollupKernelCircuitPublicInputs, RollupValidationRequests, } from '@aztec/stdlib/kernel'; +import type { ContractClassLog } from '@aztec/stdlib/logs'; import { BaseParityInputs, ParityPublicInputs, type RootParityInput, RootParityInputs } from '@aztec/stdlib/parity'; import type { RecursiveProof } from '@aztec/stdlib/proofs'; import { diff --git a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts index 64be55855598..87e30a11e690 100644 --- a/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts +++ b/yarn-project/p2p/src/msg_validators/tx_validator/data_validator.test.ts @@ -1,9 +1,11 @@ -import { MAX_FR_ARGS_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants'; +import { MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_FR_ARGS_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants'; import { timesParallel } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; import { FunctionSelector } from '@aztec/stdlib/abi'; import { AztecAddress } from '@aztec/stdlib/aztec-address'; import { computeVarArgsHash } from '@aztec/stdlib/hash'; +import { ScopedLogHash } from '@aztec/stdlib/kernel'; +import { ContractClassLog } from '@aztec/stdlib/logs'; import { mockTx } from '@aztec/stdlib/testing'; import type { Tx } from '@aztec/stdlib/tx'; diff --git a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts index 9f75e071bf0b..3b500db9a6fc 100644 --- a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts +++ b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts @@ -25,6 +25,7 @@ import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-ju import { PublicDataHint } from '@aztec/stdlib/avm'; import { Body } from '@aztec/stdlib/block'; import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server'; +import { ContractClassLog } from '@aztec/stdlib/logs'; import type { ParityPublicInputs } from '@aztec/stdlib/parity'; import { type BaseOrMergeRollupPublicInputs, diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index b88498fe4daf..fc04c1e1d1dd 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -4,7 +4,7 @@ import type { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi'; import type { AztecAddress } from '@aztec/stdlib/aztec-address'; import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract'; import type { KeyValidationRequest } from '@aztec/stdlib/kernel'; -import type { IndexedTaggingSecret, LogWithTxData } from '@aztec/stdlib/logs'; +import type { ContractClassLog, IndexedTaggingSecret, LogWithTxData } from '@aztec/stdlib/logs'; import type { Note, NoteStatus } from '@aztec/stdlib/note'; import { type MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees'; import type { BlockHeader } from '@aztec/stdlib/tx'; diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index 655a6b5cdec2..1553d845a0de 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -13,6 +13,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address'; import { computeUniqueNoteHash, siloNoteHash } from '@aztec/stdlib/hash'; import type { AztecNode } from '@aztec/stdlib/interfaces/client'; import { PrivateContextInputs } from '@aztec/stdlib/kernel'; +import type { ContractClassLog } from '@aztec/stdlib/logs'; import { Note, type NoteStatus } from '@aztec/stdlib/note'; import { type BlockHeader, diff --git a/yarn-project/simulator/src/public/public_tx_simulator.test.ts b/yarn-project/simulator/src/public/public_tx_simulator.test.ts index dd266d12cd7e..c8d8b11877c6 100644 --- a/yarn-project/simulator/src/public/public_tx_simulator.test.ts +++ b/yarn-project/simulator/src/public/public_tx_simulator.test.ts @@ -1,4 +1,10 @@ -import { NULLIFIER_SUBTREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, REGISTERER_CONTRACT_ADDRESS } from '@aztec/constants'; +import { + CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, + NULLIFIER_SUBTREE_HEIGHT, + PUBLIC_DATA_TREE_HEIGHT, + REGISTERER_CONTRACT_ADDRESS, + REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE, +} from '@aztec/constants'; import { Fr } from '@aztec/foundation/fields'; import type { AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/lmdb'; @@ -14,6 +20,7 @@ import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas'; import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash'; import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server'; import { ScopedLogHash, countAccumulatedItems } from '@aztec/stdlib/kernel'; +import { ContractClassLog } from '@aztec/stdlib/logs'; import { fr, makeContractClassPublic, mockTx } from '@aztec/stdlib/testing'; import { AppendOnlyTreeSnapshot, MerkleTreeId, PublicDataTreeLeaf } from '@aztec/stdlib/trees'; import { diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index d9c17785e489..d8b0372a33dd 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -63,7 +63,7 @@ import { import type { MerkleTreeReadOperations, MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server'; import { type KeyValidationRequest, PrivateContextInputs } from '@aztec/stdlib/kernel'; import { computeTaggingSecretPoint, deriveKeys } from '@aztec/stdlib/keys'; -import { LogWithTxData } from '@aztec/stdlib/logs'; +import { ContractClassLog, LogWithTxData } from '@aztec/stdlib/logs'; import { IndexedTaggingSecret, type PrivateLog, type PublicLog } from '@aztec/stdlib/logs'; import type { NoteStatus } from '@aztec/stdlib/note'; import type { CircuitWitnessGenerationStats } from '@aztec/stdlib/stats'; From 81920fd10f90bb125bc9279dca38345fb2a69aa4 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Wed, 26 Feb 2025 18:11:34 +0000 Subject: [PATCH 18/21] feat: address some comments --- .../contract_class_registerer_contract/src/main.nr | 2 +- .../components/tail_output_composer/meter_gas_used.nr | 2 +- .../tail_to_public_output_composer/meter_gas_used.nr | 2 +- .../crates/types/src/utils/arrays.nr | 9 +++++---- yarn-project/stdlib/src/logs/contract_class_log.ts | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index 88cb2299925b..bdc6a08ab275 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -223,7 +223,7 @@ pub contract ContractClassRegisterer { let log_to_emit: [Field; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS] = array_concat(log, [0; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - N]); // Safety: The below length is constrained in the base rollup. - let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; + let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) } + 1; // TODO: We will eventually remove this hash. let log_hash = poseidon2_hash_subarray_variable(log_to_emit, length); // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr index eb095284331e..31405f4a95ea 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_output_composer/meter_gas_used.nr @@ -34,7 +34,7 @@ pub fn meter_gas_used(data: PrivateToRollupAccumulatedData) -> Gas { let num_contract_class_logs = array_length(data.contract_class_logs_hashes); let contract_class_log_emitted_fields = data.contract_class_logs_hashes.fold( 0, - // TODO(MW): log_size is constrained to be correct in the base rollup + // NOTE: log_size is constrained to be correct in the base rollup |len, l: ScopedLogHash| len + l.log_hash.length, ); metered_da_fields += contract_class_log_emitted_fields; diff --git a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr index 4ec6c7dec500..bf09671c2641 100644 --- a/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr +++ b/noir-projects/noir-protocol-circuits/crates/private-kernel-lib/src/components/tail_to_public_output_composer/meter_gas_used.nr @@ -35,7 +35,7 @@ fn meter_accumulated_data_gas_used(data: PrivateToPublicAccumulatedData) -> Gas let num_contract_class_logs = array_length(data.contract_class_logs_hashes); let contract_class_log_emitted_fields = data.contract_class_logs_hashes.fold( 0, - // TODO(MW): log_size is constrained to be correct in the base rollup + // NOTE: log_size is constrained to be correct in the base rollup |len, l: ScopedLogHash| len + l.log_hash.length, ); metered_da_fields += contract_class_log_emitted_fields; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr index f1e20ecb1422..7f51a75e0fe7 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr @@ -81,7 +81,9 @@ pub unconstrained fn find_index_hint( index } -// As above, but counts from the end of the array. +// Helper function to find the index of the last element in an array that satisfies a given predicate, counting +// from the end of the array. If the element is not found, the function returns 0 as the index, since that +// will be checked last. // Useful for finding trailing zeroes in arrays which may have valid empty values. // e.g. removing trailing 0s from [1, 0, 2, 0, 0, 0] -> [1, 0, 2] pub unconstrained fn find_index_hint_from_end( @@ -93,8 +95,7 @@ pub unconstrained fn find_index_hint_from_end( let j = N - i - 1; // We check `index == 0` to ensure that we only update the index if we haven't found a match yet. if (index == 0) & find(array[j]) { - // Since we are looking from the end of the array, the index at which find() is false is the next one: - index = j + 1; + index = j; } } index @@ -127,7 +128,7 @@ where T: Empty + Eq, { // Safety: this value is constrained in the below loop. - let length = unsafe { find_index_hint_from_end(array, |elem: T| !is_empty(elem)) }; + let length = unsafe { find_index_hint_from_end(array, |elem: T| !is_empty(elem)) } + 1; // Check the elt just before length is non-zero: if length != 0 { assert(!is_empty(array[length - 1]), "invalid array"); diff --git a/yarn-project/stdlib/src/logs/contract_class_log.ts b/yarn-project/stdlib/src/logs/contract_class_log.ts index 190afae5e2a5..faea090e93ad 100644 --- a/yarn-project/stdlib/src/logs/contract_class_log.ts +++ b/yarn-project/stdlib/src/logs/contract_class_log.ts @@ -64,7 +64,7 @@ export class ContractClassLog { } static async random() { - // TODO(MW): Lazily used /2 instead of CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, because this keeps overfilling block blobs + // NB: Using half the maximum number of fields per log because max fields keeps overfilling blobs in tests. // Below line gives error 'Type instantiation is excessively deep and possibly infinite. ts(2589)' // makeTuple(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, Fr.random); const fields = Array.from({ length: Math.ceil(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS / 2) }, () => Fr.random()); From 530f0135c60d6a2be9a1a387e1150b639ec08af2 Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Wed, 26 Feb 2025 18:16:47 +0000 Subject: [PATCH 19/21] chore: post merge fixes --- l1-contracts/src/core/RollupCore.sol | 2 +- l1-contracts/src/core/libraries/RollupLibs/ExtRollupLib.sol | 4 +--- l1-contracts/src/core/libraries/RollupLibs/ProposeLib.sol | 2 -- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/l1-contracts/src/core/RollupCore.sol b/l1-contracts/src/core/RollupCore.sol index f761317d47f5..7f23565318c2 100644 --- a/l1-contracts/src/core/RollupCore.sol +++ b/l1-contracts/src/core/RollupCore.sol @@ -317,7 +317,7 @@ contract RollupCore is Signature[] memory _signatures, bytes calldata _blobInput ) external override(IRollupCore) { - ExtRollupLib.propose(_args, _signatures, _body, _blobInput, checkBlob); + ExtRollupLib.propose(_args, _signatures, _blobInput, checkBlob); } function setupEpoch() public override(IValidatorSelectionCore) { diff --git a/l1-contracts/src/core/libraries/RollupLibs/ExtRollupLib.sol b/l1-contracts/src/core/libraries/RollupLibs/ExtRollupLib.sol index c94ab46fb0d2..c7cd5013d3f1 100644 --- a/l1-contracts/src/core/libraries/RollupLibs/ExtRollupLib.sol +++ b/l1-contracts/src/core/libraries/RollupLibs/ExtRollupLib.sol @@ -19,12 +19,10 @@ library ExtRollupLib { function propose( ProposeArgs calldata _args, Signature[] memory _signatures, - // TODO(#9101): Extract blobs from beacon chain => remove below body input - bytes calldata _body, bytes calldata _blobInput, bool _checkBlob ) external { - ProposeLib.propose(_args, _signatures, _body, _blobInput, _checkBlob); + ProposeLib.propose(_args, _signatures, _blobInput, _checkBlob); } function initializeValidatorSelection(uint256 _targetCommitteeSize) external { diff --git a/l1-contracts/src/core/libraries/RollupLibs/ProposeLib.sol b/l1-contracts/src/core/libraries/RollupLibs/ProposeLib.sol index 1f2e5f3d5a0f..1f6c0a00b99d 100644 --- a/l1-contracts/src/core/libraries/RollupLibs/ProposeLib.sol +++ b/l1-contracts/src/core/libraries/RollupLibs/ProposeLib.sol @@ -74,8 +74,6 @@ library ProposeLib { function propose( ProposeArgs calldata _args, Signature[] memory _signatures, - // TODO(#9101): Extract blobs from beacon chain => remove below body input - bytes calldata, bytes calldata _blobInput, bool _checkBlob ) internal { From a9f842459719d6e48be3e9c793ff7f44a957906b Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Thu, 27 Feb 2025 18:52:10 +0000 Subject: [PATCH 20/21] chore: fix merges and empty array lens --- .../contracts/contract_class_registerer_contract/src/main.nr | 3 ++- .../noir-protocol-circuits/crates/types/src/utils/arrays.nr | 3 ++- yarn-project/stdlib/src/tx/processed_tx.ts | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index bdc6a08ab275..2d3f79413d95 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -223,7 +223,8 @@ pub contract ContractClassRegisterer { let log_to_emit: [Field; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS] = array_concat(log, [0; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - N]); // Safety: The below length is constrained in the base rollup. - let length = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) } + 1; + let index = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; + let length = if index == 0 { 0 } else { index + 1 }; // TODO: We will eventually remove this hash. let log_hash = poseidon2_hash_subarray_variable(log_to_emit, length); // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr index 7f51a75e0fe7..e6532bfc5349 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr @@ -128,7 +128,8 @@ where T: Empty + Eq, { // Safety: this value is constrained in the below loop. - let length = unsafe { find_index_hint_from_end(array, |elem: T| !is_empty(elem)) } + 1; + let index = unsafe { find_index_hint_from_end(array, |elem: T| !is_empty(elem)) }; + let length = if index == 0 { 0 } else { index + 1 }; // Check the elt just before length is non-zero: if length != 0 { assert(!is_empty(array[length - 1]), "invalid array"); diff --git a/yarn-project/stdlib/src/tx/processed_tx.ts b/yarn-project/stdlib/src/tx/processed_tx.ts index 3c896d2279a6..142cc64a2f1f 100644 --- a/yarn-project/stdlib/src/tx/processed_tx.ts +++ b/yarn-project/stdlib/src/tx/processed_tx.ts @@ -144,7 +144,7 @@ export async function makeProcessedTxFromTxWithPublicCalls( const contractClassLogs = [ ...(await tx.getSplitContractClassLogs(false, true)), - ...(revertCode.isOK() ? await tx.getSplitContractClassLogs(false, true) : []), + ...(revertCode.isOK() ? await tx.getSplitContractClassLogs(true, true) : []), ].filter(l => !l.isEmpty()); const txEffect = new TxEffect( From 3e70e8a7d00386997631af9f5375c34184ba10cb Mon Sep 17 00:00:00 2001 From: MirandaWood Date: Thu, 27 Feb 2025 19:08:25 +0000 Subject: [PATCH 21/21] fix: i am stupid --- .../contract_class_registerer_contract/src/main.nr | 2 +- .../crates/types/src/utils/arrays.nr | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr index 2d3f79413d95..5a68ab9c671c 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/main.nr @@ -224,7 +224,7 @@ pub contract ContractClassRegisterer { array_concat(log, [0; CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - N]); // Safety: The below length is constrained in the base rollup. let index = unsafe { find_index_hint_from_end(log_to_emit, |elem| !is_empty(elem)) }; - let length = if index == 0 { 0 } else { index + 1 }; + let length = if index == N { 0 } else { index + 1 }; // TODO: We will eventually remove this hash. let log_hash = poseidon2_hash_subarray_variable(log_to_emit, length); // Safety: the below only exists to broadcast the raw log, so we can provide it to the base rollup later to be constrained. diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr index e6532bfc5349..032345e721b7 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr @@ -82,19 +82,18 @@ pub unconstrained fn find_index_hint( } // Helper function to find the index of the last element in an array that satisfies a given predicate, counting -// from the end of the array. If the element is not found, the function returns 0 as the index, since that -// will be checked last. +// from the end of the array. If the element is not found, the function returns N as the index. // Useful for finding trailing zeroes in arrays which may have valid empty values. // e.g. removing trailing 0s from [1, 0, 2, 0, 0, 0] -> [1, 0, 2] pub unconstrained fn find_index_hint_from_end( array: [T; N], find: fn[Env](T) -> bool, ) -> u32 { - let mut index = 0; + let mut index = N; for i in 0..N { let j = N - i - 1; - // We check `index == 0` to ensure that we only update the index if we haven't found a match yet. - if (index == 0) & find(array[j]) { + // We check `index == N` to ensure that we only update the index if we haven't found a match yet. + if (index == N) & find(array[j]) { index = j; } } @@ -129,7 +128,7 @@ where { // Safety: this value is constrained in the below loop. let index = unsafe { find_index_hint_from_end(array, |elem: T| !is_empty(elem)) }; - let length = if index == 0 { 0 } else { index + 1 }; + let length = if index == N { 0 } else { index + 1 }; // Check the elt just before length is non-zero: if length != 0 { assert(!is_empty(array[length - 1]), "invalid array");