@aztec/accounts 0.54.0 → 0.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"transpiled":true,"noir_version":"0.33.0+8ac81b15cd2a3b57493bfbfe444086deac8f3dc8","name":"EcdsaKAccount","functions":[{"name":"constructor","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(initializer)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_contract_instance_internal","get_public_data_witness","lt_32_hint","decompose_hint","lte_16_hint","key_registry_get_stored_keys_hint","get_public_keys_and_partial_address","notify_created_note","get_key_validation_request","unsafe_rand","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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mjntSac1d1oLp7V02lNOa+W01k5r47S2TmvntPZO6+C0jk7r5LTOTuvitK5O6+a07k7r4bSnndbTab2c1ttpfZzW12n9nNbfaQOcNtBpg5w22GlDnDbUacOcNtxpzzhthNNGOm2U05512minjXHaWKc957RxThvvtAlOe95pE502yWmTnTbFaVOdNs1p0532gtNmOG2m01502ktOe9lps5z2itNmO+1Vp81x2mtOm+u01502z2lvOG2+09502gKnveW0hU5b5LTFTlvitKVOW+a05U5b4bSVTlvltNVOe9tpa5z2jtPWOm2d09Y7bYPTNjptk9M2O22L07Y67V2nbXPadqftcNp7TtvptPedtstpHzhtt9M+dNoep33ktL1O+9hp+5z2idM+ddpnTtvvtM+ddsBpXzjtoNMOOe1Lpx122hGnfeW0r5121GnHnHbcad847YTTTjrtlNO+ddppp51x2lmnfee0c04777TvnfaD0y447aLTLjntR6f95LTLTrvitJ+ddtVp15z2i9N+ddp1p91w2k2n/ea0W0677bQ7TvvdaXedds9pbiEQw2kRTovptFhOi+20OE6L67R4TovvtAROS+i0RE5L7LQkTkvqtGROS+60FE5L6bRUTkvttDROS+u0dE5L77QMTsvotEeclslpmZ2WxWlep2V1WjanZXdaDqfldFoup+V2Wh6n5XVaPqfld9qjTivgtIJOK+S0wk4zTivitKJOc9/N7r5v2n1nsvsOYfeduu47Zt13rrrvIHXfyem+79J9l+Qf72l0mvt+Qffdfe578dx3zrnvc3Pflea+h8x9x5f7/iz33VTue5/cdyq57yty3wXkvmfHfe+M+04X9x0n7vtD3HdzuO+9cN8p4b6vwX0XgvueAfcZ/u7z8d1nz7vPdXefme4+j7yN09znaLvPqHaf/+w+W9l9brH7TGD3ebvus2zd58S6z2B1n2/qPjvUfS6n+8xL93mS7rMa3ecgus8YdJ/f5z4bz33unPtMN/d5ae6zyNznfLnP0HKfT+U++8l9rpL7zCL3eUCjnOY+x8Z9Roz7/BX32Sbuc0Pc2sd93oX7LAn3OQ3uMxDc5wu49+6798W795y793O790q79yG79/i698+696a6932691S69yu69wK699m597C594e591659zW59wy59+O84TT3PhL3Hg33/gf3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","debug_symbols":"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ikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikkzikkzikkzikkzinnBkjppRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRrFoRrFoRrFoRrFoRrEuWFIXzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSg2zSg2zSg2zSg2zSj2BUvqphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFoRnFoRnFoRnFoRnFuWBJPTSjODSjODSjODSjODSjODSjOPc3ilPxVNBMvfPSdv7Xv19tk/F8tfobF7vl00u7tb28+G+t6p5WbU+rvqfV2NNq7mm19rTae1qdNa3eX/N+XKt7piXdMy3pnmnp/mr641rdMy3pnmlJ90xLumda0j3Tku2ZlmzPtGR7piXbMy3df3PBx7W6Z1qyPdOS7ZmWbM+0ZHumJd8zLfmeacn3TEu+Z1q6//aQj2t1z7Tke6Yl3zMt+Z5pyfdMS7FnWoo901LsmZZiz7R0/w0+H9fqnmkp9kxLsWdaij3TUuyZlu6+3ckuv56Kvyr+9NJ/K0juXlA/HZBJ9euCfu/k8bf/iVt84pf48/+Eza97lqrni/uSHxfHWxfHPP3rJin+ow61P6r3T119fOrq897Vd+rzS1/1TvVT+lz+lOfz5SL2Vgzapc85aFf4n67/W7+1rN9e1u/s6vcmK7t+Y78dTx/Wel15va5f7ly/nhd8qkj9ei89u+1HfF5vnL9+8voNXf/5yNIf9ee8rt8/ef3xyevPT17/snmgls0DtWweaPg8cPN+ZVm/uqxfW9avL+s3lvW77H5LL5uv+u7zVVk+Xxzxst+/1TOseuaC1QO//1DX079v559TXv37dv/liV5PF2u8uKHw9ktry/PVHT9+PJJ+85eUeP6vy+LlzSKdN64evfr71aMa//J/uvdf+/h1j9IfR3mro2TfIHr3BuOwbxC9X3998vphA8mwBhK5LtZEcgqSR3jeJjzPWT7Go9ud5WM+ut1Z+qqvxafhXfd5TsO7bvSchnfd6TkN7/op7TS867c0uYQ2GorSCjJaQf6p7+edBoJ2op/7C/xpoB5z663m1vvvnv3CZzmf/D8svT57AwLLWqV9nN5k0+lNC6J/j+znl572641/55J2oo+Px5tFuj4+Hm93lvf/oeB2rkouuz53+fK5y9/1Z5Kn4V1/J3ka9m0Nb7uDbvA76O/QttMA+o64npp/NJB2vfOOZT/PkflyePg+Rhr6bvitm0XfCb9xs44mJbduFu1Jbt0sekr6x5vtp283Ode8ahY9Id26Wd/ULHoyunWz6Kno1s1+sQnq181+sQnq181+sQnql83GF5ugft3sF5ugft3spgkqNk1QN9ks+mma3TRBxaYJKjZNULFpgopNE1RumqBy0wSVmyao3DRB3X+t60c2u2mCYi+NvXWzmyYo9rrYWze7aYJiL4q9dbObJqjaNEHVpgnq7sttP7TZTRNUbZqg2Dt2b93spgmKvV33xs2yV+veutlNExR7qe6tm900QbHX6d662U0TFHuR7q2b3TRB9aYJqjdNULNpgppNE9RsmqBm0wR1k1W+n6bZTRPUbJqgZtMENZsmqFk0Qcm1aIKSa9EEJdeiCUquRROUXL6p2UUTlLB3/N662UUTlLB3+9662U0TlGyaoGTTBCWbJijZNEHdfanzhza7aYKSTROUbJqgZNMEJZsmKN00QemmCUo3TVC6aYK6/x7vj2x20wSlmyYo3TRB6aYJSjdNULZpgrJNExR77/itm900QbH3jd+62U0TFHvP+K2b3TRBfbWd5L9udtME9dV2kv+62U0T1Kad5LJpJ7ls2kkum3aSy6ad5PLFdpKPPj8hYux1s19rgnqn2a81Qf262fjkD2+Vu+8Zv3kDim4gzyj2o4GcNxqwz96Af/YG4rM3wH64fF3y4lms3u9ODr963JLcfRf3hzbbm5plP8r9ts0me3K4cbPsKeMfbvaXX22SPZHcuFn29HLjZn1Ts+yp6MbNfrEJ6tfNfrEJ6tfNfrEJ6tfNfrEJ6pfN1heboH7d7KYJqjZNULVpgrr7Lu4PbXbTBFWbJqjaNEHVpgmqNk1QvWmC6k0TVG+aoHrTBHX3Xdwf2uymCao3TVC9aYLqTRNUb5qgZtMENZsmqNk0Qc2mCeruu7g/tNlNE9RsmqBm0wQ1myaoWTRB6bVogtJr0QSl16IJSq9FE5RevqnZRROUXosmKL0WTVB6LZqg9No0QcmmCUo2TVCyaYKSTRPU3Xdxf2izmyYo2TRByaYJSjZNULJpgtJNE5RumqB00wSlmyaou+/i/tBmN01QummC0k0TlG6aoHTTBGWbJijbNEHZpgnKNk1Qd9/F/aHNbpqgbNMEZZsmKNs0QdmmCco3TVC+aYLyTROUb5qg7r6L+0Ob/VoT1C/3+qp/rQnqnWa/1gT1TrPoXdwypfN8dXm+0+y58aLxdJR2xesFycrex/0bGg70U01+R8PoJ5v8jobRTzf5HQ2jn3DyOxr2bQ2jn3TyOxpGP+3kdzSMfuLJ72h426R19/3lUvV8cV/ysuG/FXT3HePvFiS0gpRWkNEKclpBd/+krOfd9lIRrwtKWkFFK6hpBQ2soLpoBQmtIKUVZLSCnFZQwD46KmkFFa2gphXE/g046nr6UnD+OeX1lwL4jtW/owH4EwLfb4D9++vf0QD7N9W/owGHpUrTPpma9snUtE+mpn0yNe1uz012UWa8+K1V34kJr6eLz49u/s5Lnw+S56tfPiJO+q3Xtni+22aRL57Sq/PG1aNXf796VOOv//KtvJusunyc5R9nqY+zvNlZ2uMsb3aW/jjLm51lPM7yZmeZj7O82VnW4yxvdpb9OMubneU8zvJGZ2kX7Fduu2C/cht8E2t029NLp1xvvcXwO2DvN+CfvQH2X///HQ2w/6L/72iA/Vf6f0cDbLv4dzQA/y3q3Qbgm0L/jgbgv0W93wDs781MYH9vZnffjPluQbDfikxgvxWZwH4rMoH9VmQC+63IlPadSWnfmZSW1EpLaqUltdKSWmlJrbSkVlpSKy2pjZbURktqoyW10ZLaaElttKQ2WlIbLamNltRGS2qnJbXTktppSe20pHZaUjstqZ2W1E5LaqcltdOSOmhJHbSkDlpSBy2pg5bUQUvqoCV10JI6aElN22BhtA0WRttgYbQNFkbbYGG0DRaWtKROWlInLamTltRJS+qiJXXRkrpoSV20pC5aUtM2WBhtg4XRNlgYbYOFFS2pm5bUTUvqpiV105KattHBaBsdjLbRwWgbHYy20cFoGx1saEk9tKQeWlIPLamHltRDS+qhJfXQknpoST1f68lgv3xiiV9f68lg7zT7tZ4M9k6zX+vJYO80+7WeDPZOs76p2djU7KIngzncHN+42a/1bNV3mt00QQnse7QL7Hu001yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yy01yyDyypg/Zs3KA9GzcuWFLHBUvquGBJHRcsqeOCJXVcsKSOC5bUcdGSmmYUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUg2YUk2YUk2YUk2YUk2YU84IlddKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtKMYtGMYtGMYtGMYtGMYl2wpC6aUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUSyaUWyaUWyaUWyaUWyaUewLltRNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pNM4pDM4pDM4pDM4pDM4pzwZJ6aEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxlJbUNKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4NKM4MKOoF8wonoJYSX0KYiX1KYiV1KcgVlKfglhJfQpiJfUpiJXUpyBWUp+CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW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TjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKTjOKQTOKQTOKQTOKQTOKccGSOmhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWhGMWlGMWlGMWlGMWlGMS9YUifNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKCbNKBbNKBbNKBbNKBbNKNYFS+qiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWiGcWmGcWmGcWmGcWmGcW+YEndNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKPYNKM4NKM4NKM4NKM4NKM4Fyyph2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUh2YUB2YU/YIZxVMQK6lPQaykPgWxkvoUxErqUxArqU9BrKQ+BbGS+hTESupTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFARLaqEZRaEZRaEZRaEZRblgSS00oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0o6g0o6g0o6g0o6g0o6gXLKmVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSVZhSNZhSNZhSNZhSNZhTtgiW10Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi0Yyi04yi04yi04yi04yiX7CkdppRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRdJpRDJpRDJpRDJpRDJpRjAuW1EEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikEzikkzikkzikkzikkzinnBkjppRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRjFpRrFoRrFoRrFoRrFoRrEuWFIXzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSgWzSg2zSg2zSg2zSg2zSj2BUvqphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFphnFoRnFoRnFoRnFoRnFuWBJPTSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjODSjOHc3inpZf79Yr7aXBb11cV7X89Vp1/PlIm9dn6P5/fIc+1F3fG+2NjXbm5qdNc3GdXcT+qHNyqZmdVOztqlZ39RsbGoWPUGdoU/nxwDo+U6zapfG06vbFf6n6/9oGD1F/Y6G0ZPU72gYPU39hoYFPVH9jobRU9XvaPgmk5X409X14oPg7S/eZfl8ccSPi79/bNzGnt+yIKcVFHcvqJ4v7kteF5S0gopWUNP+HRpYQbex57csSGgF0ZJaaUmttKTWoBWUtIJoSa1NK2hgBdlFK+jeSa3nBZ+mavXrZUFvvHLU9TSDn39OeT2Dm372BuyzN+CfvQHaJ43RPmmsaAU1+9+5bnt66ZTrjVsHNp+8Ab8+ewO3+OTLeL5bVdd7d6u8ni7WeFHR2y+tLc9Xd/y4t3Xuir1xtcXzvSqLfPHjg84bV8+5W/b96lGNv/7LN8JusobgcZZ/nKU9zvJmZ+mPs7zZWcbjLG92lvk4y5udZX32QeSzz7L+2WfZ+OyzbMDv4rzfAPwuzvsNGOzG3m22qdyyINovr0H75TVo9/ODdj8/aPfzk3Y/P4VWkNIKoiV10pI6aUmdtKROWlInLamTltRFS+qiJXXRkrpoSV20pC5aUhctqYuW1EVL6qIlddOSumlJ3bSkblpSNy2pm5bUTUvqpiV105K6aUk9tKQeWlIPLamHltRDS+qhJfXQknpoST20pB5YUssFS2q5YEktFyyp5YIl9fnZk1YQLKnlgiW1XLCklguW1HLRklpoSS20pBZaUgstqYWW1DR1LzR1LzR1L0JLaqEltdKSWmlJrbSkVlpSKy2plZbUSktqmroXmroXmroXmroXoyW10ZLaaElttKQ2WlIbLamNltRGS2qjJbXTktppSe20pHZaUjstqZ2W1E5LaqcltdOS2mlJHbSkDlpSBy2paUZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZRaEZR7v7Ed7V6fjSUy4/njrz9mJK65MVeL+/ny/+ZB0nJ3Z8m/6HN9qZmZ1GzfW1qVjY1y3re9CmI9bzpU5DTCmI9b/oUlLSCilZQ0woaWEFz0QoSWkG0pB5aUg8tqYeW1ENL6qEl9dCSemBJrRcsqfWCJbVesKTWC5bUesGSWi9YUusFS2q9YEmtFyyp9aIltdCSWmhJLbSkFlpSCy2phZbUQktqoSW10JJaaEmttKRWWlIrLamVltRKS2qlJbXSklppSa20pFZaUhstqY2W1EZLaqMltdGS2mhJbbSkNlpSGy2pjZbUTktqpyW105LaaUnttKR2WlI7LamdltROS2qnJXXQkjpoSR20pA5aUgctqYOW1EFL6qAlddCSOmhJnbSkTlpSJy2pk5bUSUvqpCV10pI6aUmdtKROWlIXLamLltRFS+qiJXXRkrpoSV20pC5aUhctqYuW1E1L6qYlNc0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oKs0oGs0oGs0oGs0oGs0o2gVLaqMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRacZRacZRacZRacZRb9gSe00o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0oxg0oxg0oxg0oxg0oxgXLKmDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSTZhSTZhSTZhSTZhTzgiV10oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0Yxi0Yxi0Yxi0YxiXbCkLppRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRbJpRbJpRbJpRbJpR7AuW1E0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zikMzikMzikMzikMzinPBknpoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFgRjEvmFE8BbGS+hTESupTECupT0GspD4FsZL6FMRK6lMQK6lPQaykPgXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVT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otKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotKMotGMotGMotGMotGMol2wpDaaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUTSaUXSaUXSaUXSaUXSaUfQLltROM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pOM4pBM4pBM4pBM4pBM4pxwZI6aEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaEYxaUYxaUYxaUYxaUYxL1hSJ80oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oJs0oFs0oFs0oFs0oFs0o1gVL6qIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaIZxaYZxaYZxaYZxaYZxb5gSd00o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0o9g0ozg0ozg0ozg0ozg0ozgXLKmHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhSHZhQHZhT7ghnFUxArqU9BrKQ+BbGS+hTESupTECupT0GspD4FsZL6FMRK6lMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUBEtqoRlFoRlFoRlFoRlFuWBJLTSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjKDSjqDSjqDSjqDSjqDSjqBcsqZVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFJVmFI1mFI1mFI1mFI1mFO2CJbXRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLRjKLTjKLTjKLTjKLTjKJfsKR2mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlF0mlEMmlEMmlEMmlEMmlGMC5bUQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKQTOKSTOKSTOKSTOKSTOKecGSOmlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlGMWlG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GUWhGUWlGUWlGUWlGUWlGUW9YEmtNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKNoNKNoNKNoNKNoNKNoFyypjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUnWYUnWYUnWYUnWYU/YIltdOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMYtCMYtCMYtCMYtCMYlywpA6aUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUUyaUUyaUUyaUUyaUcwLltRJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pFM4pFM4pFM4pFM4p1wZK6aEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaUaxaUaxaUaxaUaxL1hSN80oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oDs0oDs0oDs0oDs0ozgVL6qEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxbm7UdTL+vvFerW9LOiti/O6nq9Ou54vF3nr+jwH/P3yHPtRd3xvtjc1O4uavbvb/NBmZVOzuqlZ0Cf6GxfHzNPFKf6jDv3+YUKSr/9M+aBp4Z8pP8n/pci3JxL/aNbznf9S1C6Np1e3K/xP1//RMHp2+R0No+eX39Eweob5DQ07eo6Rb5jv+erz0fdGA19rNml7/rjusH/7ce1fazZ5p1nb1KxvajY2NYuekv7xZruev09cr75P+Ne6u/NOs1/r7s47zX6tuzu/bja+1t2dd5r9YhPUr5v9YhPUr5v9YhPUr5v1Tc1+sQnq181umqBi0wQVmyao2DRB5aYJKjdNULlpgspNE9TdN6l8aLObJqjcNEHlpgkqN01QuWmCqk0TVG2aoGrTBFWbJqi7bzj60GY3TVC1aYKqTRNUbZqgatME1ZsmqN40QfWmCao3TVB33zz2oc1umqB60wTVmyao3jRB9aYJajZNULNpgppNE9RsmqDuvhHwQ5vdNEHNpglqNk1Qs2mCmj0TlFzXtWeE+tbtnhnqW7d7hqhv3e6Zor5166u63TNHfet2zyD1rds9k9S3bveMUt+6XTVLyapZSlbNUrJqlpJVs9TdF+p+bLerZilZNUvJqllKVs1SsmqW0lWzlK6apXTVLKWrZqm7r7z+2G5XzVK6apb6YpvA3+t21Sz1xXaBv9PtF1sG/l63q2apL7YO/L1uV81Sd18f/rHdrpql2MvJb97tqlmKvZb85t2umqXYC8lv3u2qWeqrrS9/p9tVs9RXW2D+TrerZqlFK8y/dbtqllq0xPxbt6tmqUVrzL91u2qWWrTI/Fu3q2apRavMv3W7apZatMz8W7erZqlF68y/dbtqllq00Pxbt6tmqUUrzb91u2qWWrTU/Fu3q2apRWvNv3W7apZatNj8W7erZqlFq82/dbtqllq03Pxbt6tmqUXrzb91u2qWWrTg/Fu3q2apRSvOv3W7apZatOT8W7erZqlFa86/dbtqllq06Pxbt6tmqUWrzr91u2qWWrTs/Fu3q2apRevOv3W7apZatPD8W7erZqlFK8+/dbtqllq09Pxbt6tmqUVrz791u2mWklV7z2XV3nNZtfdcVu09l8tXdbtplpJVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zWbX3XFbtPZdVe89l1d5zXbX3XFftPddVe8911d5zvXxVt5tmKV2191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvPddXec12191xX7T3XVXvP9YvtPR/N527tjW6/1iz1Xrd3n6Wsnut3yV93K9FtTy+dcvmfuv3eQX/6DgbdQYrrjw5y3ujg/jvHb96BfPoO9NN3YOgO6pLnl67L+91PVXtO3g57lbz33/f9od3Gqm5zVbfsGeLW3bLnjX+421/P/sOeTW7brV3sOebW3bJnnlt3y56Pbt3tF5ul3unWV3X7xWapd7r9YrPUO91+sVnqnW43zVJ2rZqlZNUsJatmKVk1S8mqWer++74/tNtVs5SsmqVk1Swlq2YpWTVL6apZSlfNUrpqltJVs9T9931/aLerZildNUvpqllKV81SumqWslWzlK2apWzVLGWrZqn77/v+0G5XzVK2apayVbOUrZqlbNUs5atmKV81S/mqWcpXzVL33/f9od2umqV81Szlq2YpXzVL+apZKlbNUrFqlopVs1SsmqXuv+/7Q7tdNUvFqlkqVs1SsWqWilWzVK6apXLVLJWrZqlcNUvdf9/3h3a7apbKVbNUrpqlctUslatmqVo1S9WqWapWzVK1apa6/77vD+121SxVq2apWjVL1apZqlbNUr1qlupVs1SvmqV61Sx1/33fH9rtqlmqV81S8H3ft+521SwF3yN+427hO8dv3e2qWQq+y/zW3a6apb7a3vN3ul01S321vefvdLtqllq199xW7T33VXvPfdXec1+199xX7T33y1d1u2mW8lV7z33V3nNftffcV+0991V7z33V3nNftffcV+0991V7z33V3nNftffcV+0991V7z33V3nNftffcV+0991V7z33V3nNftffcV+0991V7z33V3nNftffcV+0991V7z33V3nNftffcV+0991V7z33V3nP/YnvPR/O5W3uj2681S73X7d1nqcv6qdur7Z1up3SeCynPd7pVuzSeXt2u8D9d/73j2dbx/feff3jHsq5jXdexrevY13Uc6zrOdR3Xuo7XzVx335EuE9ePHuplx39UdPc95u9XJLiKFFfRTT7zxZ+/QL34RvR2RWX5fHHEj4ufvj/dZq/2TSsKXEWJq6hwFTWuoqFVdJt9yTetSHAV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FecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgDecgDecgDecgDecg7aJltuEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOMcpOMcpOMcpOMcpF+0zHacg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scgwycgwycgwycgwycg4yLltmBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CJc5CJc5CJc5CJc5B50TI7cQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ6ycA6ycA6ycA6ycA6yLlpmF85BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BNs5BNs5BNs5BNs5B9kXL7MY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5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5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAV5yAN5yAN5yAN5yAN5yDtomW24Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4Ryk4xyk4xyk4xyk4xykX7TMdpyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDdJyDDJyDDJyDDJyDDJyDjIuW2YFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIFzkIlzkIlzkIlzkIlzkHnRMjtxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjJxDjLv7iD1sv5+sV5tLyt66+Jzg+v56vOGPl8u8tb1OZrfL8+xH3XHU7e2qltf1W2s6jZXdVurugV9tr9x8fkV5OnicwviRx36/JkCmgT+mfpJFvefql/I/7WcDnV+dOv5zn8tapfG06vbFf6n6793jJ5ifkvH6Enmt3Ts6zpGTzQyHT8+9c5H4FsdfK0ppe35c7vDXn1u+9eaUt7rtld1O5u6vbts/9hu0fPSP95t1/O3i+v1t4v4Wnd83uv2a93xea9bX9Xt17rj8163X2yWeqfbLzZLvdPtF5ul3un2i81Sv+42v9gs9U63q2apXDVL5apZ6u4bPj6221WzVK6apXLVLJWrZqlcNUvVqlmqVs1StWqWqlWz1N0373xst6tmqVo1S9WqWapWzVK1apbqVbNUr5qletUs1atmqbtvxPrYblfNUr1qlupVs1SvmqV61Sw1q2apWTVLzapZalbNUnffVPex3a6apWbVLDWrZqlZNUvNplmqrk2zVF2bZqm6Ns1SdW2aperyVd1umqXq2jRL1bVplqpr0yxV16pZSlbNUrJqlpJVs5SsmqXuvtn1Y7tdNUvJqllKVs1SsmqWklWzlK6apXTVLKWrZildNUvdfePyx3a7apbSVbOUrpqldNUspatmKVs1S9mqWeqLbRR/r9tVs9QX2yj+XrerZqkvtlH8vW5XzVK2apayVbOUr5ql2LvNb97tqlmKvdP85t36qm5XzVJfbe/5O92umqW+2t7zd7pdNUt9tb3n73S7apZatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNetfe8V+0971V7z3vV3vO+fFW3m2apXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPZ9Ve89n1d7zWbX3fFbtPZ/LV3W7aZaaVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvP///27nY3kiQ77/gt5Xk/52oMSTCMBRaSIa0N+IPu3dG9TbJnyW1O11QF/5zoL4sZbFXlEzUZD4PJ/EXOUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfuez1H7ns9R+57PUfue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zkEWzkEWzkEWzkEWzkHWRevswjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIwjnIxjnIxjnIxjnIxjnIvmid3TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgH2TgHOTgHOTgHOTgHOTgHORetswfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIAfnIIfmIOOiOciVCNbZKxGss1ciWGevRLDOXolgnb0SwTp7JYJ19koE6+yVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGtswXnIAXnIAXnIAXnIOWidbbgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTgHKTiHKTiHKTiHKTiHKRetM5WnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnINUnIM0nIM0nIM0nIM0nIO0i9bZhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQhnOQjnOQjnOQjnOQjnOQftE623EO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEO0nEOMnAOMnAOMnAOMnAOMi5aZwfOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQQbOQSbOQSbOQSbOQSbOQeZF6+zEOcjEOcjEOci8aJ2dOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAdZOAdZOAdZOAdZOAdZF62zC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgG+cgG+cgG+cgG+cg+6J1duMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMc5OAc5OAc5OAc5OAc5Fy0zh6cgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxyag8yL5iBXIlhnr0Swzl6JYJ29EsE6eyWCdfZKBOvslQjW2SsRrLNXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa6zaQ5yJdrd2XpZf3uxrpXH94neil86L/k9n18u8tbr1S6Np0+39SeW37z+24j7uBHPYSOW7U7040csx41YjxvxXX7miz+9umze+elRls8vjnh5cTwlclyiwCXK7Ynq+cV9yRuJCpeocYmGdh7dx9HeNZHgEikuEa6zBdfZgutsSVyiwiXCdbYMLZFeuESCS7S7s3V94NNKW/36PtEbnxx1Pa3L1z+nvLEuV/v0I/BPP4L49CPA/cxR3M8cbVyiYZ933fb00V9+XX/jvLPr049APv0I7vEzMOP5WlZd713L8np6scZ3kd7+aG15fnXHy5Wvdc3sjVdbPF/JssiXb2fNlTdePeta2rdXj2r89x+/THYXUv3ry/z2ZfqvL/N+X2b8+jLv92Xmry/zfl9m/foy7/dl9qdfj3z6Va1/+lWtf/pVrcOv7PyOEcCv7PyOETjtep8HLhHuL7SO+wut4672O+5qf+Cu9gfuan8oLpHhEuE6O3CdHbjODlxnB66zA9fZievsxHV24jo7cZ2duM5OXGcnrrMT19mJ6+zEdXbhOrtwnV24zi5cZxeuswvX2YXr7MJ1duE6u3Cd3bjOblxnN66zG9fZjevsxnV24zq7cZ3duM5uXGcPrrMH19mD6+zBdfbgOntwnT24zh5cZw+us4fW2XrROlsvWmfrRetsvWidrRets/WidbbiZL/iZL/iZL9euM4WXGcLrrMF19mC62zBdbbgOltwnS24zsbJfsXJfsXJfsXJflVcZyuusxXX2YrrbMV1tuI6W3GdrbjONlxnG66zDdfZhutsw3W24TrbcJ1tuM42XGcbrrMd19mO62zHdbbjOhvnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBXnIBX3hGzFPSFbcU/IVtwTshX3hGzFPSFbcU/IVtwTshX3hGzFPSFbcU/IVtwTshX3hGzFPSFbcU/IVtwTshX3hGzFPSFbcU/IVtwTshX3hGzFPSFbcU/IVtwTshX3hGzFPSFbcU/IVtwTshX3hGzFPSFbB9fZg+vsoXW2XbTOtovW2XbROtsuWmfbRetsu2idbRets+2idbZdtM62C9fZgutswXW24DpbcJ0tuM4WXGcLrrMF19mC62zBdbbiOltxna24zlZcZyuusxXX2YrrbMV1tuI6W3GdbbjONlxnG66zDdfZhutsw3W24TrbcJ1tuM42XGc7rrMd19mO62zHdbbjOttxne24znZcZzuusx3X2YHr7MB1duA6O3CdHbjODlxnB66zA9fZgevswHV24jo7cZ2duM5OXGcnrrMT19mJ62ycgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScg3Scg3Scg3Scg3Scg/SL1tmOc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5CBc5CBc5CBc5CBc5Bx0To7cA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycQ4ycQ4ycQ4ycQ4yL1pnJ85BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BJs5BFs5BFs5BFs5BFs5B1kXr7MI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMI5yMY5yMY5yMY5yMY5yL5ond04B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4B9k4Bzk4Bzk4Bzk4Bzk4BzkXrbMH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yAH5yCH5iDr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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]},{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)","aztec(view)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","pack_returns","directive_invert","directive_integer_quotient"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"00000000000000000000000000000000000000000000000000000000906cb9c3"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaKAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaKAccount::constructor_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_abi"}]}},"file_map":{"107":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\nuse crate::oracle::{\n execution::{get_chain_id, get_version, get_contract_address, get_block_number},\n storage::{raw_storage_read, storage_read}\n};\n\nstruct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n fn block_number(self) -> u32 {\n self.block_number\n }\n\n fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n fn version(self) -> Field {\n self.version\n }\n\n fn chain_id(self) -> Field {\n self.chain_id\n }\n\n unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n unconstrained fn storage_read<T, let N: u32>(\n self,\n storage_slot: Field\n ) -> T where T: Deserialize<N> {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"},"113":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, public_call_stack_item::PublicCallStackItem,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n let call_request = PublicCallRequest { item, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n self.public_teardown_call_request = PublicCallRequest {\n item,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"121":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let NB: u32, let MB: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<NB, MB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> [u8; M] where Note: NoteInterface<N, NB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n\n let log: [u8; 448] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n for i in 0..encrypted_note_log_from_typescript.len() {\n assert_eq(log[i], encrypted_note_log_from_typescript[i]);\n }\n assert_eq(encrypted_note_log_from_typescript.len(), log.len());\n }\n}\n"},"122":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::get_current_public_keys, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{\n hash::sha256_to_field, address::AztecAddress, point::Point, abis::note_hash::NoteHash,\n constants::MAX_NOTE_HASHES_PER_CALL\n};\n\nunconstrained fn compute_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n )\n}\n\nfn compute<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n let log_hash = sha256_to_field(encrypted_log);\n (encrypted_log, log_hash)\n}\n\nfn emit_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Note) -> ([u8; M], Field)\n) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (encrypted_log, log_hash) = inner_compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute_unconstrained);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute_unconstrained);\n }\n}\n"},"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\nstruct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{\n address::AztecAddress, traits::Empty, constants::GENERATOR_INDEX__NOTE_NULLIFIER,\n scalar::Scalar, point::Point, hash::poseidon2_hash_with_separator\n };\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n use crate::context::PrivateContext;\n\n #[test]\n fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n for i in 0..outgoing_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], outgoing_body_ciphertext_from_typescript[i]);\n }\n assert_eq(outgoing_body_ciphertext_from_typescript.len(), ciphertext.len());\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\nstruct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nfn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar, point::Point};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\nstruct EncryptedLogIncomingBody<let M: u32> {\n plaintext: [u8; M]\n}\n\nimpl<let M: u32> EncryptedLogIncomingBody<M> {\n pub fn from_note<T, let N: u32>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N, M> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T, let MR: u32>(\n event: T,\n randomness: Field\n ) -> Self where T: EventInterface<M, MR> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::NoteInterface},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: Field = 3;\n global ADDRESS_NOTE_BYTES_LEN = 32 * 3 + 64;\n\n impl NoteInterface<ADDRESS_NOTE_LEN, ADDRESS_NOTE_BYTES_LEN> for AddressNote {\n fn compute_note_hiding_point(_self: Self) -> Point {\n crate::generators::Ga1\n }\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader { self.header}\n\n fn set_header(&mut self, header: NoteHeader) {self.header = header; }\n\n fn compute_nullifier(_self: Self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field {\n 1\n }\n\n fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] { [self.address.to_field(), self.owner.to_field(), self.randomness]}\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote { address: AztecAddress::from_field(fields[0]), owner: AztecAddress::from_field(fields[1]), randomness: fields[2], header: NoteHeader::empty() }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_BYTES_LEN] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_BYTES_LEN] = [0; ADDRESS_NOTE_BYTES_LEN];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: Field = 3;\n global TEST_EVENT_BYTES_LEN = 32 * 3 + 64;\n global TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS = 32 * 3 + 32;\n\n impl EventInterface<TEST_EVENT_BYTES_LEN, TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime { EventSelector::from_signature(\"TestEvent(Field,Field,Field)\") }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_BYTES_LEN] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN] = [0; TEST_EVENT_BYTES_LEN];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] = [0; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 185, 29, 14, 152, 216, 130, 219, 151, 80, 185, 43, 223, 167, 8, 89, 189, 88, 188, 101, 137, 255, 136, 84, 252, 79, 18, 52, 3, 110, 54, 54, 206, 244, 209, 246, 226, 207, 247, 143, 253, 211, 75, 160, 224, 172, 41, 45, 7, 208, 137, 90, 56, 59, 4, 234, 48, 53, 23, 130, 230, 49, 249, 142, 243, 170, 72, 183, 242, 49, 124, 46, 52, 198, 75, 55, 102, 56, 89, 254, 67, 59, 157, 249, 120, 184, 67, 154, 16, 148, 227, 93, 37, 120, 199, 93, 166, 80, 127, 173, 52, 80, 135, 87, 1, 168, 164, 51, 48, 126, 120, 47, 102, 211, 227, 234, 170, 208, 99, 111, 198, 170, 226, 156, 244, 241, 174, 206, 30\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"129":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, MAX_NOTES_PER_PAGE, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::NoteInterface, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N, M> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N, M> {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32, let M: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N, M> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N, M> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32, let M: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N, M>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N, M> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"131":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{context::PrivateContext, note::{note_header::NoteHeader, note_interface::NoteInterface}};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32, let M: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N, M> {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32, let M: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N, M> {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the \n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the \n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from \n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let M: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N, M> {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::NoteInterface,\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N, M>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, N, M>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, N, M>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, N, M>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N, M> {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"133":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\nstruct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting \n * a change note in a token's transfer function only when there is \"change\" left).\n */\nstruct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"141":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH\n},\n point::Point, traits::Hash, hash::{sha256_to_field, poseidon2_hash_with_separator}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"142":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let instance = get_contract_instance_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"144":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"146":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"147":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{constants::PUBLIC_DATA_TREE_HEIGHT, data::PublicDataTreeLeafPreimage, utils::arr_copy_slice};\n\nglobal LEAF_PREIMAGE_LENGTH: u32 = 4;\nglobal PUBLIC_DATA_WITNESS: Field = 45;\n\nstruct PublicDataWitness {\n index: Field,\n leaf_preimage: PublicDataTreeLeafPreimage,\n path: [Field; PUBLIC_DATA_TREE_HEIGHT],\n}\n\n#[oracle(getPublicDataTreeWitness)]\nunconstrained fn get_public_data_witness_oracle(\n _block_number: u32,\n _public_data_tree_index: Field\n) -> [Field; PUBLIC_DATA_WITNESS] {}\n\nunconstrained pub fn get_public_data_witness(\n block_number: u32,\n public_data_tree_index: Field\n) -> PublicDataWitness {\n let fields = get_public_data_witness_oracle(block_number, public_data_tree_index);\n PublicDataWitness {\n index: fields[0],\n leaf_preimage: PublicDataTreeLeafPreimage { slot: fields[1], value: fields[2], next_index: fields[3] as u32, next_slot: fields[4] },\n path: arr_copy_slice(fields, [0; PUBLIC_DATA_TREE_HEIGHT], 1 + LEAF_PREIMAGE_LENGTH)\n }\n}\n"},"148":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"151":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\n#[oracle(storageRead)]\nunconstrained fn storage_read_oracle<let N: u32>(address: Field, storage_slot: Field, block_number: Field, length: Field) -> [Field; N] {}\n\nunconstrained pub fn raw_storage_read<let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> [Field; N] {\n storage_read_oracle(\n address.to_field(),\n storage_slot,\n block_number as Field,\n N as Field\n )\n}\n\nunconstrained pub fn storage_read<T, let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> T where T: Deserialize<N> {\n T::deserialize(raw_storage_read(address, storage_slot, block_number))\n}\n\nmod tests {\n use crate::oracle::storage::{raw_storage_read, storage_read};\n use dep::protocol_types::address::AztecAddress;\n\n use std::test::OracleMock;\n use crate::test::mocks::mock_struct::MockStruct;\n\n global address = AztecAddress::from_field(29);\n global slot = 7;\n global block_number = 17;\n\n #[test]\n fn test_raw_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: [Field; 2] = raw_storage_read(address, slot, block_number);\n assert_eq(read[0], 13);\n assert_eq(read[1], 42);\n }\n\n #[test]\n fn test_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: MockStruct = storage_read(address, slot, block_number);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n}\n"},"152":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"154":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"155":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"157":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let NB: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N, NB> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"158":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr","source":"use dep::protocol_types::{\n address::AztecAddress, contract_instance::ContractInstance, utils::arr_copy_slice,\n constants::CONTRACT_INSTANCE_LENGTH, utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// Returns a ContractInstance plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstance)]\nunconstrained fn get_contract_instance_oracle_avm(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {}\n\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\nunconstrained pub fn get_contract_instance_internal_avm(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {\n get_contract_instance_oracle_avm(address)\n}\n\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\npub fn get_contract_instance_avm(address: AztecAddress) -> Option<ContractInstance> {\n let mut reader = Reader::new(get_contract_instance_internal_avm(address));\n let found = reader.read();\n if found == 0 {\n Option::none()\n } else {\n Option::some(reader.read_struct(ContractInstance::deserialize))\n }\n}\n"},"159":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/execution.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n#[oracle(getContractAddress)]\nunconstrained fn get_contract_address_oracle() -> AztecAddress {}\n\n#[oracle(getBlockNumber)]\nunconstrained fn get_block_number_oracle() -> u32 {}\n\n#[oracle(getChainId)]\nunconstrained fn get_chain_id_oracle() -> Field {}\n\n#[oracle(getVersion)]\nunconstrained fn get_version_oracle() -> Field {}\n\nunconstrained pub fn get_contract_address() -> AztecAddress {\n get_contract_address_oracle()\n}\n\nunconstrained pub fn get_block_number() -> u32 {\n get_block_number_oracle()\n}\n\nunconstrained pub fn get_chain_id() -> Field {\n get_chain_id_oracle()\n}\n\nunconstrained pub fn get_version() -> Field {\n get_version_oracle()\n}\n"},"164":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{storage::map::derive_storage_slot_in_map, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V, Context> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T, Context> Storage<T> for Map<K, T, Context> {}\n\nimpl<K, V, Context> Map<K, V, Context> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n\n"},"166":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\nuse crate::oracle::storage::storage_read;\nuse dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:public_mutable_struct\nstruct PublicMutable<T, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_mutable_struct\n\nimpl<T, Context> Storage<T> for PublicMutable<T, Context> {}\n\nimpl<T, Context> PublicMutable<T, Context> {\n // docs:start:public_mutable_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicMutable { context, storage_slot }\n }\n // docs:end:public_mutable_struct_new\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, &mut PublicContext> where T: Serialize<T_SERIALIZED_LEN> + Deserialize<T_SERIALIZED_LEN> {\n // docs:start:public_mutable_struct_read\n pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write(self, value: T) {\n self.context.storage_write(self.storage_slot, value);\n }\n // docs:end:public_mutable_struct_write\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, UnconstrainedContext> where T: Deserialize<T_SERIALIZED_LEN> {\n unconstrained pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n}\n"},"182":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{\n address::AztecAddress, constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes}, note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions, note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\nstruct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor. \n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<N, M>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"186":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_positive_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_positive_sign[i]);\n }\n }\n\n #[test]\n fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_negative_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_negative_sign[i]);\n }\n }\n}\n"},"2":{"path":"std/array.nr","source":"use crate::cmp::Ord;\nuse crate::convert::From;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n pub fn sort(self) -> Self where T: Ord {\n self.sort_via(|a: T, b: T| a <= b)\n }\n\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n let sorted_index = unsafe {\n // Safety: These indices are asserted to be the sorted element indices via `find_index`\n let sorted_index: [u32; N] = self.get_sorting_index(ordering);\n\n for i in 0..N {\n let pos = find_index(sorted_index, i);\n assert(sorted_index[pos] == i);\n }\n\n sorted_index\n };\n\n // Sort the array using the indexes\n let mut result = self;\n for i in 0..N {\n result[i] = self[sorted_index[i]];\n }\n // Ensure the array is sorted\n for i in 0..N - 1 {\n assert(ordering(result[i], result[i + 1]));\n }\n\n result\n }\n\n /// Returns the index of the elements in the array that would sort it, using the provided custom sorting function.\n unconstrained fn get_sorting_index<Env>(self, ordering: fn[Env](T, T) -> bool) -> [u32; N] {\n let mut result = [0; N];\n let mut a = self;\n for i in 0..N {\n result[i] = i;\n }\n for i in 1..N {\n for j in 0..i {\n if ordering(a[i], a[j]) {\n let old_a_j = a[j];\n a[j] = a[i];\n a[i] = old_a_j;\n let old_j = result[j];\n result[j] = result[i];\n result[i] = old_j;\n }\n }\n }\n result\n }\n\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n // Apply a function to each element of an array, returning a new array\n // containing the mapped elements.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. This function is also sometimes\n // called `foldl`, `fold_left`, `reduce`, or `inject`.\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given array as its starting accumulator value.\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n // Returns true if all elements in the array satisfy the predicate\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n // Returns true if any element in the array satisfies the predicate\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Convert a sequence of bytes as-is into a string.\n /// This function performs no UTF-8 validation or similar.\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\n// helper function used to look up the position of a value in an array of Field\n// Note that function returns 0 if the value is not found\nunconstrained fn find_index<let N: u32>(a: [u32; N], find: u32) -> u32 {\n let mut result = 0;\n for i in 0..a.len() {\n if a[i] == find {\n result = i;\n }\n }\n result\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"203":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{constants::KEY_VALIDATION_REQUEST_LENGTH, traits::{Empty, Serialize, Deserialize}, point::Point};\n\nstruct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m))\n & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest {\n pk_m: Point::empty(),\n sk_app: 0,\n }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app,\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self {\n pk_m: Point { x:fields[0], y: fields[1], is_infinite: fields[2] as bool},\n sk_app: fields[3],\n }\n }\n}\n\n"},"22":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\nstruct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint { \n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint { \n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint { \n EmbeddedCurvePoint {\n x: self.x,\n y: -self.y,\n is_infinite: self.is_infinite\n }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite) | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\nstruct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n// This is a hack as returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\nfn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint\n) -> EmbeddedCurvePoint\n// docs:end:embedded_curve_add\n{\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n EmbeddedCurvePoint { x, y, is_infinite: point_array[2] == 1 }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n"},"23":{"path":"std/field/bn254.nr","source":"use crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\nglobal TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n\n let mut low: Field = 0;\n let mut high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n low += (x_bytes[i] as Field) * offset;\n high += (x_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n\n (low, high)\n}\n\nunconstrained pub(crate) fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nfn compute_lt(x: Field, y: Field, num_bytes: u32) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i];\n let y_byte = y_bytes[num_bytes - 1 - i];\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nfn compute_lte(x: Field, y: Field, num_bytes: u32) -> bool {\n if x == y {\n true\n } else {\n compute_lt(x, y, num_bytes)\n }\n}\n\nunconstrained fn lt_32_hint(x: Field, y: Field) -> bool {\n compute_lt(x, y, 32)\n}\n\nunconstrained fn lte_16_hint(x: Field, y: Field) -> bool {\n compute_lte(x, y, 16)\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n unsafe {\n let borrow = lte_16_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size(128);\n rhi.assert_max_bit_size(128);\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size(128);\n xhi.assert_max_bit_size(128);\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(compute_lt(b, a, 32));\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n compute_lt(b, a, 32)\n } else if a == b {\n false\n } else {\n // Take a hint of the comparison and verify it\n unsafe {\n if lt_32_hint(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{decompose, compute_lt, assert_gt, gt, TWO_POW_128, compute_lte, PLO, PHI};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n fn check_compute_lt() {\n assert(compute_lt(0, 1, 16));\n assert(compute_lt(0, 0x100, 16));\n assert(compute_lt(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lt(0, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_compute_lte() {\n assert(compute_lte(0, 1, 16));\n assert(compute_lte(0, 0x100, 16));\n assert(compute_lte(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lte(0, TWO_POW_128, 16));\n\n assert(compute_lte(0, 0, 16));\n assert(compute_lte(0x100, 0x100, 16));\n assert(compute_lte(TWO_POW_128 - 1, TWO_POW_128 - 1, 16));\n assert(compute_lte(TWO_POW_128, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"},"24":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"249":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr","source":"use crate::{merkle_tree::leaf_preimage::IndexedTreeLeafPreimage, traits::{Empty, Hash}};\n\nstruct PublicDataTreeLeafPreimage {\n slot : Field,\n value: Field,\n next_slot :Field,\n next_index : u32,\n}\n\nimpl Empty for PublicDataTreeLeafPreimage {\n fn empty() -> Self {\n Self {\n slot: 0,\n value: 0,\n next_slot: 0,\n next_index: 0,\n }\n }\n}\n\nimpl Hash for PublicDataTreeLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash([self.slot, self.value, (self.next_index as Field), self.next_slot])\n }\n }\n}\n\nimpl IndexedTreeLeafPreimage for PublicDataTreeLeafPreimage {\n fn get_key(self) -> Field {\n self.slot\n }\n\n fn get_next_key(self) -> Field {\n self.next_slot\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl PublicDataTreeLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.slot == 0) & (self.value == 0) & (self.next_slot == 0) & (self.next_index == 0)\n }\n}\n"},"256":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr","source":"use crate::{hash::pedersen_hash, traits::ToField};\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f);\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript = 0x2499880e2b1b831785c17286f99a0d5122fee784ce7b1c04e380c4a991da819a;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"},"262":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u1 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u8 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u32 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u64 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool { fn from_field(value: Field) -> Self { value as bool } }\nimpl FromField for u1 { fn from_field(value: Field) -> Self { value as u1 } }\nimpl FromField for u8 { fn from_field(value: Field) -> Self { value as u8 } }\nimpl FromField for u32 { fn from_field(value: Field) -> Self { value as u32 } }\nimpl FromField for u64 { fn from_field(value: Field) -> Self { value as u64 } }\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"263":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"267":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"27":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n __pedersen_hash_with_separator(input, separator)\n}\n\nfn pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let value = __pedersen_commitment_with_separator(input, separator);\n if (value[0] == 0) & (value[1] == 0) {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n } else {\n EmbeddedCurvePoint { x: value[0], y: value[1], is_infinite: false }\n }\n}\n\n#[no_predicates]\nfn pedersen_commitment_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n#[no_predicates]\nfn pedersen_hash_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: Vec<EmbeddedCurveScalar> = Vec::from_slice([EmbeddedCurveScalar { lo: 0, hi: 0 }; N].as_slice()); //Vec::new();\n\n for i in 0..N {\n scalars.set(i, from_field_unsafe(input[i]));\n }\n scalars.push(EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\n let length_generator : [EmbeddedCurvePoint; 1] = derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n vec_generators.push(length_generator[0]);\n multi_scalar_mul_slice(vec_generators.slice, scalars.slice)[0]\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n __pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\nfn __pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {}\n\n#[foreign(pedersen_commitment)]\nfn __pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\n#[field(bn254)]\nfn derive_generators<let N: u32, let M: u32>(domain_separator_bytes: [u8; M], starting_index: u32) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n // Same as from_field but:\n // does not assert the limbs are 128 bits\n // does not assert the decomposition does not overflow the EmbeddedCurveScalar\n fn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\ntrait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\ntrait Hasher{\n fn finish(self) -> Field;\n \n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\ntrait BuildHasher<H> where H: Hasher{\n fn build_hasher(self) -> H;\n}\n\nstruct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn build_hasher(_self: Self) -> H{\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn default() -> Self{\n BuildHasherDefault{}\n } \n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H) where H: Hasher {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B) where A: Hash, B: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1), 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1), EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false\n }\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2), 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2), EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3), 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3), EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4), 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4), EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5), 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5), EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6), 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6), EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7), 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7), EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false\n }\n );\n}\n\n"},"273":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: Field = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point {\n x: 0,\n y: 0,\n is_infinite: false\n }\n }\n}\n"},"274":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::CONTRACT_INSTANCE_LENGTH,\n traits::{Deserialize, Hash, Serialize}\n};\n\nstruct ContractInstance {\n salt : Field,\n deployer: AztecAddress,\n contract_class_id : ContractClassId,\n initialization_hash : Field,\n public_keys_hash : PublicKeysHash,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys_hash.eq(other.public_keys_hash) &\n self.initialization_hash.eq(other.initialization_hash) &\n self.contract_class_id.eq(other.contract_class_id) &\n self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys_hash.to_field()\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys_hash: PublicKeysHash::from_field(serialized[4]),\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys_hash,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer\n )\n )\n }\n}\n"},"286":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr","source":"use crate::{hash::merkle_hash, merkle_tree::merkle_tree::MerkleTree};\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like\n// this because it means we never even need to consider cases where\n// the index is greater than p.\npub fn root_from_sibling_path<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N]\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\npub fn calculate_subtree_root<let N: u32>(leaves: [Field; N]) -> Field {\n MerkleTree::new(leaves).get_root()\n}\n\n// These values are precomputed and we run tests to ensure that they\n// are correct. The values themselves were computed from the cpp code.\n//\n// Would be good if we could use width since the compute_subtree\n// algorithm uses depth.\npub fn calculate_empty_tree_root(depth: u32) -> Field {\n if depth == 0 {\n 0\n } else if depth == 1 {\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1\n } else if depth == 2 {\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290\n } else if depth == 3 {\n 0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20\n } else if depth == 4 {\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e\n } else if depth == 5 {\n 0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf\n } else if depth == 6 {\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76\n } else if depth == 7 {\n 0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b\n } else if depth == 8 {\n 0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1\n } else if depth == 9 {\n 0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972\n } else if depth == 10 {\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686\n } else {\n assert(false, \"depth should be between 0 and 10\");\n 0\n }\n}\n\n#[test]\nfn test_merkle_root_interop_test() {\n // This is a test to ensure that we match the cpp implementation.\n // You can grep for `TEST_F(root_rollup_tests, noir_interop_test)`\n // to find the test that matches this.\n let root = calculate_subtree_root([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n assert(0x1a09d935ae110b4c861fcec8f9099ec30b4485022aeb3d3cf9d7168e38fdc231 == root);\n\n let empty_root = calculate_subtree_root([0; 16]);\n assert(0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e == empty_root);\n}\n\n#[test]\nfn test_empty_subroot() {\n assert(calculate_empty_tree_root(0) == 0);\n\n let expected_empty_root_2 = calculate_subtree_root([0; 2]);\n assert(calculate_empty_tree_root(1) == expected_empty_root_2);\n\n let expected_empty_root_4 = calculate_subtree_root([0; 4]);\n assert(calculate_empty_tree_root(2) == expected_empty_root_4);\n\n let expected_empty_root_8 = calculate_subtree_root([0; 8]);\n assert(calculate_empty_tree_root(3) == expected_empty_root_8);\n\n let expected_empty_root_16 = calculate_subtree_root([0; 16]);\n assert(calculate_empty_tree_root(4) == expected_empty_root_16);\n\n let expected_empty_root_32 = calculate_subtree_root([0; 32]);\n assert(calculate_empty_tree_root(5) == expected_empty_root_32);\n\n let expected_empty_root_64 = calculate_subtree_root([0; 64]);\n assert(calculate_empty_tree_root(6) == expected_empty_root_64);\n\n let expected_empty_root_128 = calculate_subtree_root([0; 128]);\n assert(calculate_empty_tree_root(7) == expected_empty_root_128);\n\n let expected_empty_root_256 = calculate_subtree_root([0; 256]);\n assert(calculate_empty_tree_root(8) == expected_empty_root_256);\n\n let expected_empty_root_512 = calculate_subtree_root([0; 512]);\n assert(calculate_empty_tree_root(9) == expected_empty_root_512);\n\n let expected_empty_root_1024 = calculate_subtree_root([0; 1024]);\n assert(calculate_empty_tree_root(10) == expected_empty_root_1024);\n}\n"},"290":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"308":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<let N: u32>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes: [u8; 31] = field.to_be_bytes();\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2: [u8; 31] = field.to_be_bytes();\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n // Tests the hardcoded value in constants.nr vs underlying modulus\n // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n let max_value = crate::constants::MAX_FIELD_VALUE;\n assert_eq(max_value, 0 - 1);\n // modulus == 0 is tested elsewhere, so below is more of a sanity check\n let max_bytes: [u8; 32] = max_value.to_be_bytes();\n let mod_bytes = std::field::modulus_be_bytes();\n for i in 0..31 {\n assert_eq(max_bytes[i], mod_bytes[i]);\n }\n assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n"},"310":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"32":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field)*18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field){\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher {\n _state: &[],\n }\n }\n}\n"},"323":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"325":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH = 1;\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"326":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\nstruct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"387":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on the same curve as Ethereum.\n// The signing key is stored in an immutable private note and should be different from the signing key.\ncontract EcdsaKAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_current_public_keys\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n public_key: PrivateImmutable<EcdsaPublicKeyNote>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_current_public_keys(&mut context, this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[aztec(private)]\n #[aztec(noinitcheck)]\n #[aztec(view)]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n"},"388":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteInterface, NoteGetterOptions, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}\n};\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5;\n// ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN: Field = 5 * 32 + 64;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[aztec(note)]\nstruct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN, ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n\n fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret,\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"5":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiller can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n \n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"55":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\nstruct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::mem::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else {\n if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n"},"70":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"71":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `keccak256(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0xabf64ad4; // 4 first bytes of keccak256(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"72":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\nstruct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: Field = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: Field = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS = 2;\n\n// docs:start:fee-payload-struct\nstruct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__FEE_PAYLOAD\n )\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"81":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nfn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"82":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr","source":"use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH};\nuse dep::protocol_types::traits::{Serialize, Deserialize};\n\n// This struct represents how public keys are stored in the key registry. We store not just the keys themselves but also\n// their hash, so that when reading in private we can perform a historical read for the hash and then show that it\n// corresponds to a preimage obtained from an unconstrained hint. We do store the keys keys regardless as they might be\n// needed during public execution, and since we need to broadcast and produce hints in some standardized way.\n// While it might seem odd to create a struct for what is effectively some data and a pure function called on it, state\n// variables rely on serializable structs in order to persist data to storage, so we must use this abstraction.\nstruct StoredKeys {\n public_keys: PublicKeys,\n hash: Field,\n}\n\nimpl StoredKeys {\n // Instances of StoredKeys are expected to only be created by calling this function so that we guarantee that the\n // hash field does indeed correspond to the hash of the keys. Ideally we'd forbid direct access to the struct, but \n // Noir doesn't yet support private members.\n fn new(public_keys: PublicKeys) -> Self {\n Self { public_keys, hash: public_keys.hash().inner }\n }\n}\n\n// Our serialization is the concatenation of the public keys serialization plush the hash, so we need one extra field.\nglobal STORED_KEYS_LENGTH: u32 = PUBLIC_KEYS_LENGTH + 1;\n\nimpl Serialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn serialize(self) -> [Field; STORED_KEYS_LENGTH] {\n // The code below is equivalent to:\n // [ ...self.public_keys.serialize(), self.hash ]\n\n let mut array = [0; STORED_KEYS_LENGTH];\n\n let serialized_keys = self.public_keys.serialize();\n for i in 0..serialized_keys.len() {\n array[i] = serialized_keys[i];\n }\n\n array[PUBLIC_KEYS_LENGTH] = self.hash;\n\n array\n }\n}\n\nimpl Deserialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn deserialize(array: [Field; STORED_KEYS_LENGTH]) -> Self {\n // The code below is equivalent to:\n // Self { public_keys: PublicKeys::deserialize(array[0 : PUBLIC_KEYS_LENGTH]), hash: array[PUBLIC_KEYS_LENGTH] }\n\n let mut serialized_keys = [0; PUBLIC_KEYS_LENGTH];\n for i in 0..serialized_keys.len() {\n serialized_keys[i] = array[i];\n }\n\n let hash = array[PUBLIC_KEYS_LENGTH];\n\n Self { public_keys: PublicKeys::deserialize(serialized_keys), hash }\n }\n}\n"},"83":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\nuse crate::keys::constants::{NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\nstruct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\ntrait ToPoint {\n fn to_point(self) -> Point;\n}\n\nstruct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nstruct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m : NpkM { inner: Point::empty() },\n ivpk_m : IvpkM { inner: Point::empty() },\n ovpk_m : OvpkM { inner: Point::empty() },\n tpk_m : TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n ( self.npk_m.inner == other.npk_m.inner ) &\n ( self.ivpk_m.inner == other.ivpk_m.inner ) &\n ( self.ovpk_m.inner == other.ovpk_m.inner ) &\n ( self.tpk_m.inner == other.tpk_m.inner )\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x:serialized[0], y:serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x:serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x:serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x:serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, abis::validation_requests::KeyValidationRequest, address::AztecAddress,\n constants::CANONICAL_KEY_REGISTRY_ADDRESS, point::Point, storage::map::derive_storage_slot_in_map,\n traits::is_empty\n};\nuse crate::{\n context::{PrivateContext, UnconstrainedContext},\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{\n public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}, stored_keys::StoredKeys,\n constants::{NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX, TAGGING_INDEX}\n},\n state_vars::{\n shared_mutable::shared_mutable_private_getter::SharedMutablePrivateGetter,\n public_mutable::PublicMutable, map::Map\n}\n};\n\nmod test;\n\n// This is the number of blocks that must pass after a key rotation event until the old keys are fully phased out and\n// become invalid.\nglobal KEY_REGISTRY_UPDATE_BLOCKS = 5;\n\nglobal KEY_REGISTRY_STORAGE_SLOT = 1;\n\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// Returns all current public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys {\n // We're going to perform historical reads from public storage, and so need to constrain the caller so that they\n // cannot use very old blocks when constructing proofs, and hence e.g. read very old keys. We are lax and allow\n // _any_ recent block number to be used, regardless of whether there may have been a recent key rotation. This means\n // that multiple sets of keys are valid for a while immediately after rotation, until the old keys become phased\n // out. We *must* be lax to prevent denial of service and transaction fingerprinting attacks by accounts that rotate\n // their keys frequently.\n // Note that we constrain the max block number even if the registry ends up being empty: this ensures that proof of\n // an empty registry is also fresh.\n let current_header = context.get_header();\n context.set_tx_max_block_number(current_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS);\n\n get_historical_public_keys(current_header, account)\n}\n\n// Returns historical public keys for a given account at some block determined by a block header. We read all keys at\n// once since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys\n// that are not required by the caller can simply be discarded.\n// WARNING: if called with a historical header created from a fixed block this function will explicitly ignore key\n// rotation! This means that callers of this may force a user to use old keys, potentially leaking privacy (e.g. if the\n// old keys were leaked). Only call this function with a header from a fixed block if you understand the implications of\n// breaking key rotation very well.\npub fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys {\n // TODO: improve this so that we always hint the correct set of keys (either registry or canonical) and hash them\n // once instead of having two different hints and twice as many constraints due to the double hashing.\n\n // The key registry is the primary source of information for keys, as that's where accounts store their new keys\n // when they perform rotation. The key registry conveniently stores a hash of each user's keys, so we can read that\n // single field and then prove that we know its preimage (i.e. the current set of keys).\n let key_registry_hash = key_registry_hash_public_historical_read(historical_header, account);\n if key_registry_hash != 0 {\n let hinted_registry_public_keys = key_registry_get_stored_keys_hint(\n account,\n historical_header.global_variables.block_number as u32\n );\n assert_eq(hinted_registry_public_keys.hash().to_field(), key_registry_hash);\n\n hinted_registry_public_keys\n } else {\n // If nothing was written to the registry, we may still be able to produce the correct keys if we happen to know\n // the canonical set (i.e. the ones that are part of the account's preimage).\n let (hinted_canonical_public_keys, partial_address) = get_public_keys_and_partial_address(account);\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n }\n}\n\nfn key_registry_hash_public_historical_read(historical_header: Header, account: AztecAddress) -> Field {\n // The keys are stored in a Map that is keyed with the address of each account, so we first derive the corresponding\n // slot for this account.\n let keys_storage_slot = derive_storage_slot_in_map(KEY_REGISTRY_STORAGE_SLOT, account);\n\n // The keys are stored as [ ...serialized_keys, hash ], and since arrays get allocated sequential storage slots\n // (prior to siloing!), we simply add the length to the base slot to get the last element.\n let hash_storage_slot = keys_storage_slot + PUBLIC_KEYS_LENGTH as Field;\n\n historical_header.public_storage_historical_read(hash_storage_slot, CANONICAL_KEY_REGISTRY_ADDRESS)\n}\n\nunconstrained fn key_registry_get_stored_keys_hint(account: AztecAddress, block_number: u32) -> PublicKeys {\n // This is equivalent to the key registry contract having an unconstrained getter that we call from an oracle, but\n // PXE does not yet support that functionality so we do this manually instad. Note that this would be a *historical*\n // call!\n\n // TODO (#7524): call the unconstrained KeyRegistry.get_current_keys() function instead\n\n let context = UnconstrainedContext::at_historical(CANONICAL_KEY_REGISTRY_ADDRESS, block_number);\n let keys_storage = Map::new(\n context,\n KEY_REGISTRY_STORAGE_SLOT,\n |context, slot| { PublicMutable::new(context, slot) }\n );\n\n let stored_keys: StoredKeys = keys_storage.at(account).read();\n stored_keys.public_keys\n}\n"},"99":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/history/public_storage.nr","source":"use dep::protocol_types::{\n constants::GENERATOR_INDEX__PUBLIC_LEAF_INDEX, hash::poseidon2_hash_with_separator,\n address::AztecAddress, header::Header, utils::field::full_field_less_than\n};\nuse dep::protocol_types::merkle_tree::root::root_from_sibling_path;\n\nuse crate::{context::PrivateContext, oracle::get_public_data_witness::get_public_data_witness};\n\ntrait PublicStorageHistoricalRead {\n fn public_storage_historical_read(header: Header, storage_slot: Field, contract_address: AztecAddress) -> Field;\n}\n\nimpl PublicStorageHistoricalRead for Header {\n fn public_storage_historical_read(self, storage_slot: Field, contract_address: AztecAddress) -> Field {\n // 1) Compute the leaf index by siloing the storage slot with the contract address\n let public_data_tree_index = poseidon2_hash_with_separator(\n [contract_address.to_field(), storage_slot],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n );\n\n // 2) Get the membership witness for the tree index.\n let witness = unsafe {\n get_public_data_witness(\n self.global_variables.block_number as u32,\n public_data_tree_index\n )\n };\n\n // 3) The witness is made up of two parts: the preimage of the leaf and the proof that it exists in the tree.\n // We first prove that the witness is indeed valid for the public data tree, i.e. that the preimage is of a\n // value present in the tree. Note that `hash` returns not just the hash of the value but also the metadata\n // (slot, next index and next slot).\n assert(\n self.state.partial.public_data_tree.root\n == root_from_sibling_path(witness.leaf_preimage.hash(), witness.index, witness.path), \"Proving public value inclusion failed\"\n );\n\n // 4) Now that we know the preimage is valid, we determine the value that's represented by this tree entry. Here\n // we have two scenarios:\n // 1. The tree entry is initialized, and the value is the same as the one in the witness\n // 2. The entry was never initialized, and the value is default zero (the default)\n // The code below is based on the same checks in `validate_public_data_reads` in `base_rollup_inputs`.\n let preimage = witness.leaf_preimage;\n\n let is_less_than_slot = full_field_less_than(preimage.slot, public_data_tree_index);\n let is_next_greater_than = full_field_less_than(public_data_tree_index, preimage.next_slot);\n let is_max = ((preimage.next_index == 0) & (preimage.next_slot == 0));\n let is_in_range = is_less_than_slot & (is_next_greater_than | is_max);\n\n let value = if is_in_range {\n 0\n } else {\n assert_eq(preimage.slot, public_data_tree_index, \"Public data tree index doesn't match witness\");\n preimage.value\n };\n\n value\n }\n}\n"}}}
1
+ {"transpiled":true,"noir_version":"0.34.0+e0185e75e65df08b5334856f8bf63fa3aed7049a","name":"EcdsaKAccount","functions":[{"name":"constructor","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(initializer)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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684i0s7WurOJtHO07hwi7VytO5dIO0/rziPSzte684m0C7TuAiLtQq27kEi7SOsuItLWad06Iu1irbuYSLtE6y4h0i7VukuJtMu07jIibb3WrSfSLte6y4m0K7TuCiLtSq27kki7SuuuItKu1rqribRrtO4aIu1arbuWSLtO664j0q7XuuuJtBu07gYibYPWbSDSbtS6G4m0m7TuJiLtZq27mUi7RetuIdJu1bpbibTbtO42Iu12rbudSLtD6+4g0u7UujuJtLu07i4i7W6tu5tIu0fr7iHS7tW6e4m0+7TuPiLtfq27n0jbqHUbibQHtO4BIu1BrXuQSNukdZuItM1at5lIe0jrHiLSHta6h4m0R7TuESLtUa17lEh7TOseI9K2aN0WIu1xrXucSHtC654g0p7UuieJtKe07iki7Wmte5pIe0brniHSntW6Z4m057TuOSLtea17nkh7QeteINK2at1WIu1FrXuRSHtJ614i0l7WupeJtFe07hUi7VWte5VIe03rXiPStmndNiLtda17nUh7Q+veINLe1Lo3ibTtWredSHtL694i0t7WureJtHe07h0i7V2te5dIe0/r3iPS3te694m0D7TuAyLtQ637kEj7SOs+ItI+1rqPibRPtO4TIu1TrfuUSPtM6z4j0j7Xus+JtC+07gsi7Uut+5JI+0rrviLSvta6r4m0b7TuGyLtW637lkj7Tuu+I9K+17rvibQftO4HIu1HrfuRSPtJ634i0n7Wup+JtF+07hci7Vet+5VI+03rfiPSfte634m0P7TuDyJth9btINJ2at1OIu1PrfuTSPtL6/4i0v7Wur+JtL2ebRmVVsnREWlpWpdGpKVrXTqRlqF1GURaptZlEmlZWpdFpGVrXTaRlqN1OURaZa2rTKRV0boqRFpVratKpOVqXS6RVk3rqhFp1bWuOpFWQ+tqEGk1ta4mkVZL62oRabW1rjaRVkfr6hBpdbWuLpFWT+vqEWn7ad1+RFp9ratPpDXQugZE2v5atz+R1lDrGhJpjbSuEZF2gNYdQKQ11rrGRNqBWncgkXaQ1h1EpOVpXR6R1kTrmhBpTbWuKZF2sNYdTKQ107pmRFpzrWtOpB2idYcQaS20rgWRdqjWHUqkHaZ1hxFph2vd4URaS61rSaS10rpWRFprrWtNpLXRujZEWluta0ukWVpnEWnO5pki0rxa5yXSfFrnI9L8Wucn0vK1Lp9IK9C6AiItoHUBIi2odUEirVDrCom0I7TuCCKtnda1I9Laa117Iq2D1nUg0jpqXUcirZPWdSLSOmtdZyKti9Z1IdK6al1XIq2b1nUj0rprXXcirYfW9SDSempdTyKtl9b1ItJ6a11vIq2P1vUh0vpqXV8irZ/W9SPS+mtdfyJtgNYNINIGat1AIm2Q1g0i0gZr3WAibYjWDSHShmrdUCJtmNYNI9KGa91wIm2E1o0g0kZq3UgibZTWjSLSRmvdaCJtjNaNIdLGat1YIm2c1o0j0sZr3XgibYLWTSDSJmrdRCJtktZNItIma91kIi2kdSEirUjrioi0Yq0rJtLCWhcm0kq0roRIi2hdhEibonVTiLSpWjeVSJumddOItOlaN51Im6F1M4i0mVo3k0ibpXWziLTZWjebSJujdXOItLlaN5dIm6d184i0+Vo3n0hboHULiLSFWreQSFukdYuItMVat5hIW6J1S4i0I7XuSCJtqdYtJdKO0rqjiLSjte5oIu0YrTuGSFumdcuItGO17lgibbnWLSfSVmjdCiLtOK07jkg7XuuOJ9JWat1KIu0ErTuBSDtR604k0k7SupOItFVat4pIO1nrTibSVmvdaiLtFK07hUhbo3VriLRTte5UIu00rTuNSDtd604n0tZq3Voi7QytO4NIO1PrziTSztK6s4i0s7XubCLtHK07h0g7V+vOJdLO07rziLTzte58Iu0CrbuASLtQ6y4k0i7SuouItHVat45Iu1jrLibSLtG6S4i0S7XuUiLtMq27jEhbr3XribTLte5yIu0KrbuCSLtS664k0q7SuquItKu17moi7Rqtu4ZIu1brriXSrtO664i067XueiLtBq27gUjboHUbiLQbte5GIu0mrbuJSLtZ624m0m7RuluItFu17lYi7Tatu41Iu13rbifS7tC6O4i0O7XuTiLtLq27i0i7W+vuJtLu0bp7iLR7te5eIu0+rbuPSLtf6+4n0jZq3UYi7QGte4BIe1DrHiTSNmndJiJts9ZtJtIe0rqHiLSHte5hIu0RrXuESHtU6x4l0h7TuseItC1at4VIe1zrHifSntC6J4i0J7XuSSLtKa17ikh7WuueJtKe0bpniLRnte5ZIu05rXuOSHte654n0l7QuheItK1at5VIe1HrXiTSXtK6l4i0l7XuZSLtFa17hUh7VeteJdJe07rXiLRtWreNSHtd614n0t7QujeItDe17k0ibbvWbSfS3tK6t4i0t7XubSLtHa17h0h7V+veJdLe07r3iLT3te59Iu0DrfuASPtQ6z4k0j7Suo+ItI+17mMi7ROt+4RI+1TrPiXSPtO6z4i0z7XucyLtC637gkj7Uuu+JNK+0rqviLSvte5rIu0brfuGSPtW674l0r7Tuu+ItO+17nsi7Qet+4FI+1HrfiTSftK6n4i0n7XuZyLtF637hUj7Vet+JdJ+07rfiLTfte53Iu0PrfuDSNuhdTuItJ1at5NI+1Pr/iTS/tK6v4i0v7XubyJtr8cGRKVVcnREWprWpRFp6VqXTqRlaF0GkZapdZlEWpbWZRFp2VqXTaTlaF0OkVZZ6yoTaVW0rgqRVlXrqhJpuVqXS6RV07pqRFp1ratOpNXQuhpEWk2tq0mk1dK6WkRaba2rTaTV0bo6RFpdratLpNXTunpE2n5atx+RVl/r6hNpDbSuAZG2v9btT6Q11LqGRFojrWtEpB2gdQcQaY21rjGRdqDWHUikHaR1BxFpeVqXR6Q10bomRFpTrWtKpB2sdQcTac20rhmR1lzrmhNph2jdIURaC61rQaQdqnWHEmmHad1hRNrhWnc4kdZS61oSaa20rhWR1lrrWhNpbbSuDZHWVuvaEmmW1llEmtI6RaR5tc5LpPm0zkek+bXOT6Tla10+kVagdQVEWkDrAkRaUOuCRFqh1hUSaUdo3RFEWjuta0ektde69kRaB63rQKR11LqORFonretEpHXWus5EWhet60KkddW6rkRaN63rRqR117ruRFoPretBpPXUup5EWi+t60Wk9da63kRaH63rQ6T11bq+RFo/retHpPXXuv5E2gCtG0CkDdS6gUTaIK0bRKQN1rrBRNoQrRtCpA3VuqFE2jCtG0akDde64UTaCK0bQaSN1LqRRNoorRtFpI3WutFE2hitG0OkjdW6sUTaOK0bR6SN17rxRNoErZtApE3UuolE2iStm0SkTda6yURaSOtCRFqR1hURacVaV0ykhbUuTKSVaF0JkRbRugiRNkXrphBpU7VuKpE2TeumEWnTtW46kTZD62YQaTO1biaRNkvrZhFps7VuNpE2R+vmEGlztW4ukTZP6+YRafO1bj6RtkDrFhBpC7VuIZG2SOsWEWmLtW4xkbZE65YQaUdq3ZFE2lKtW0qkHaV1RxFpR2vd0UTaMVp3DJG2TOuWEWnHat2xRNpyrVtOpK3QuhVE2nFadxyRdrzWHU+krdS6lUTaCVp3Akor7UmBlT2GngKhn15h6NkDFn4inXPZn5dj5vN2PQkHX/gJQ85nVvEYex7Crs/Pifr86N8Wwk8FxA+0cp4+l4N0zhPx8FN5RqWhe7Se+u0fp17Z9xTpe+yndpyo9c5l+8PtT/sLpe3Ru/Fpf6P1P87T/sr7hQf7SSnOU2lLZk1b2GN28fylc/XT/vrPmeKJutIJGX9O57Q96ZnEPY5fK2lgfVrU/c57bVv0Mtmu17pR6Z31/1Zy164jofXM5G3h2OPwr4dsQmazfSYue/yQujSkc9JzEJdK/FwUynLXZ0bHR/wU6koEpyoojfuBhlXN5L2Xzx3+VQk/ZBC2YzkNvZdKp3TViM+pQ+j+B+oaD7ToiQwA","debug_symbols":"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","brillig_names":["get_contract_instance_internal","get_public_data_witness","lt_32_hint","decompose_hint","lte_16_hint","key_registry_get_stored_keys_hint","get_public_keys_and_partial_address","notify_created_note","get_key_validation_request","unsafe_rand","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]},{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)","aztec(view)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","pack_returns","directive_invert","directive_integer_quotient"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/+x9CbxO5fr2xt7bPA+Z53ncz57YMoeiCEUZy8YuijIPRRkLEUIIIWQuQhmLQsZQFEJkzjzPvrX+vc5ZZ/ee83WO63qt67fX+/s9n7Xfzn99677v67qv63metdabKOjPz5HqQUHnav55nMgaSXz/JrZG3njf3f/XeRzs57tQP/+3qfx8l8bPd+n8fJfBz3ePWKNKvO/y+Pnf5fXzXT4/3+X3811hP98V9fNdcT85KOHnu1J+/m/L+Pnfhfn5LtzP/22kn/9dlJ/vyvr5v43x878r7+e7in7+byv7+d9V8fNdNT//t9X9/O9q+PnucT/fPeH71/m5/3cV378RYdGRkW3KhrcxEaZlWHhMbLmosMio2OhyppyJKhfVOrxcRESbcpHlysbExpQNizGREW1MXFRMRFzYn58fEv/zXGEP9AlvxbzO7f/zdYZHxP/mPp+CHddq5+Gu77hI0D+PizqOt/v+N/f/73ZYf++0xo/W+CnxP7+//0kSLwdhD/YxxYDn2pEYV5tdMAyFhTHzVxx4rp3A/O0WyV8J4Ll+BObvZ2D+/PWGXY7esNtx/LPj+Kd4veEX6+891thrjX0B6A0lgef6BVibX0WwXQp4rj3A/O0XyV9p4Ln2AvN3gNwbfnX0gP2O4wOO433xesNB6+/frHHIGocD0BvKAM91EFib30WwHQY812/A/B0RyZ8BnusQMH9Hyb3hd0cPOOI4Puo4PhyvNxyz/j5ujRPWOBmA3hAOPNcxYG1OiWA7Aniu48D8/SGSv0jguU4A83ea3BtOOXrAH47j047jk/F6wxnr77PWOGeN8wHoDVHAc50B1uaCCLajgec6C8zfRZH8lQWe6xwwf5fIveGCowdcdBxfchyfj9cbLlt/X7HGVWtcC0BvKAc812Vgba6LYDsGeK4rwPzdEMlfeeC5rgLzd5PcG647esANx/FNx/G1eL3hlvX3bWvcsb8PQG94FHiuW8Da3BPBdgXguW4D82cHqpC/isBz3QHmL1ESbm+45+gBdlLvHydyHN+N1xsSW/8tiTWCrRGShN8bKgHPlTgJrjahItiuDDxXEmD+korkrwrwXMHA/CUj94ZQRw9I6jhO5jgOSfKvvSG59XcKa6S0RqoA9IaqwHMlB9YmtQi2qwHPlQKYvzQi+XsMeK6UwPylJfeG1I4ekMZxnNZxnCpeb0hn/Z3eGhmskTEAvaE68FzpgLXJJILtGsBzpQfmL7NI/moCz5UBmL8s5N6QydEDMjuOsziOM8brDY9Yf2e1RjZrZA9Ab3gceK5HgLXJIYLtJ4DnygrMX04ytnM4MJzTcZzNcZw9HrZzWX/ntkYea+T1g+3E4NoUDsLlMx8un8Z5n7p93rzkPOQD4io/KQ/5/eQBfR98Adi1h4czr7Pg/3ydJjr+N/64WyDJ//9+/YLxuFvI+ruwNYpYo2gAdAl5v34hIP6LiegS8n79wsD8FRfJH/J+/SLA/JUg63oxR28o7jgu4TguGq83lLT+LmWN0tYoE4DegLxfvySwNmEi2Eber18KmD8jkj/k/fqlgfkLJ/eGMEcPMI7jcMdxmXi9IcL6O9IaUdaIDkBvQN6vHwGsTVkRbCPv148E5q+cSP6Q9+tHAfMXQ+4NZR09oJzjOMZxHB2vN5S3/n7UGhWsUTEAvQF5v355YG0qiWAbeb/+o8D8VRbJH/J+/QrA/FUh94ZKjh5Q2XFcxXFcMV5vqGr9Xc0aj1mjegB6A/J+/arA2tQQwTbyfv1qwPzVFMkf8n79x4D5e5zcG2o4ekBNx/HjjuPq8XrDE9bftaxR2xpPBqA3IO/XfwJYm6dEsI28X78WMH91RPKHvF+/NjB/dcm94SlHD6jjOK7rOH4yXm942vq7njXqW6NBAHoD8n79p4G1eYZcm2ccNajnOK7vOG4QrzbPWn83tEYjazznpzbofbTnYTkwbZjX2fh/v87WYX+jVs87amI/H/EPz+04bhyvVk2sv5tao5k1mgeAR5WA52oC5FELEY1A3tveFJi/F0TyVwV4rmbA/L1I7uMtHL3hBcfxi47j5vF6Q0vr71hrtLJG6wD0hqrAc7UE1qaNCLarAc8VC8xfnEj+HgOeqxUwfy+Re0MbRw+Icxy/5DhuHa83vGz93dYa7azxSgB6A/Le9peBtXlVBNvIe9vbAvPXXiR/yHvb2wHz14HcG1519ID2juMOjuNX4vWG16y/X7dGR2t0CkBvQN7b/hqwNp3JtensqMHrjuOOjuNO8WrTxfq7qzW6WaN7AObmPXBz8zjmdfb836/zb707u4ejJs86jrs4jnvGq1Uv6+83rPGmNXr7ahUSL35/nyqQfIeZpI7/v/L6jvtY1/GWNd62Rl9r9LNGf2sMsMZAawyyxjvWeNcag60xxBpDrfGeNYZZY7g13rfGCGuMtMYoa3xgjdHWGGONsdb40BrjrDHeGhOs8ZE1JlpjUpJ/vZbJ1t8fW2OKNaZaY5o1PrHGdGvMsMZMa3xqjVnWmG2NOdaYa4151phvjQXW+Mwan1tjoTUWWeMLayy2xhJrLLXGl9b4yhrLrLHcGiussdIaq3xNbLXv3699/37j+3eN79+1SYL+9YX1dgKTxfvuLT/fve3nu75+vuvn57v+fr4b4Oe7gX6+G+Tnu3f8fPeun+8G+/luiJ/vhvr57j0/3w3z891wP9+97+e7EX6+G+nnu1F+vvvAz3ej/Xw3xs93Y/1896Gf78b5+W68n+8m+PnuIz/fTfTz3SQ/3032893Hfr6b4ue7qX6+m+bnu0/8fDfdz3cz/Hw30893n/r5bpaf72b7+W6On+/m+vlunp/v5vv5boGf7z7z893nfr5b6Oe7RX6++8LPd4v9fLfEz3dL/Xz3pZ/vvvLz3TI/3y33890KP9+t9PPdKj/f2Q0xb9C/fhL7/q3i+/eBXyIThBNBu7GDzvUvE5RE8WIOe7CPWZMElz/ndQb/9TpN2AN8+sTP5wOc7a2/1uZ/PtvbwPz1L8bBjJ9ahD1I1H39Y/t/Olu/f8eT/+Fs/YG1GBDoWoT9b1EP+E995r8828D/3LP+q7MNAtZi4MOpRdh/G/U7//+e/7fP9u7f0Y+/ebbBwFoMepi1CPv7UQ/5u/r7N8429O9r+f/3bO8Ba/HOw69F2N+Jeth/54X+49mG/7e+6j+c7X1gLd51Sy3C/nPUI/4XX/pvzjbyf/O4fs82CliLwe6qRdi/i/qD/32O8JezjX6Q+Ua8s40B1mKIG2sR9teoxz7ofM1xtg8ffO73j7ONA9ZiqHtrEeaMejxm7vx/Z5uAmodbZ/sIWIv33F6LPz9mIm4dwwDnt8Y5P3vQWgwTqQVwHmSAPt68A6zFcJFaAP2eAfoVMwRYi/dFagHUNQPsy2YYsBYjAlSLB73Ob4F6AewFBohlMyJwvHigNfPJwDXzj4Fr5lOAPupjkTXzqcA182nANfNPgLWYIrJmPh24Zj4DuGY+E1iLqSJr5p8C18xnAdfMZwNrMU1kzXwOcM18LnDNfB6wFp+IrJnPB66ZLwCumX8GrMV0kTXzz4Fr5guBa+aLgLWYIbJm/gVwzXwxcM18CbAWM0XWzJcC18y/BK6ZfwWsxacia+bLgGvmy4Fr5iuAtZglsh61ErgGApzfminA9ajZIrUAzoMM0MebT4C1mCNSC6DfM0C/YmYCazFXpBZAXTPAvmxmA2sxT2TN/DugXgB7gQFi2SBrYd8Dbz8f4Hyozd53uP9A3CTH8XeO41WO49W+Y/vFhOus4/VJ/jxf0qB/3mPv/KDvu1+XBJuP+58NSYgXbJ8cfd7vwQ8gMOL+Psk/Eww6b1ggwbaeBLaNSYgXvJEAtk0uB5sd9yYC2Pxd64PG/73vWtHn3QxUQ/vaUgX989UB/5LTSBMeHmEiy1qXFmZdY+tW5cLblGsZFdUyJiq8dWTruPCw8KjouDZh1rW1jomMsb6ONK1ahoXFhbWMjTNRd+Ofr2W5VlbU0WGtw6z/Jy6qdTkr7MiY1pHl4iLCIiNbh0WbyLDYmHJtWpc1ZVvGxEZFhLeMi44Ia2WiIsLKxpi74JrbsSf2F/cD5hR9nfb5tlgF2mqNbT4VThbv2u9/0HzbRnpKD5zzcGcufvCBefv9RyPv/2v/hzvxvtue5K8Kk4SYxP+V/G3i/vz8AGzQ20nFTQzOHzLmHY5zmXIR4eFlI+z/XbnWYSaydavwcuHhrWMjw1qFtWwV3iYm0sTERYZHRrRq3SrWOmdLExcW17JVTFy5P68rkA5lB8mh7ExCvOCdBIfyo8sdih33jyIOZbvvWtHn/QkM1vvN2j5vYhJe7WnMZkIudiXhYiDswT7/56gZce92edwsd/4zGPupfbHvcqzN7HYc/+yLwR5bHN9vdRzfNzm/WP/uscbeAK/lrCWJ174kxAveRxCvX10uXnbcv5LE69+B60HzsB8Hrgj72uK/YWy/g0jfOI5/SfLv3zB2wPr7oDV+s8ahJPxf6s4PxNVh8PLCffG2z5s36M/GkzgoMI2nF6HxOF+C87t1/iPWOGqNY9Y4bo0T1jhpjVPW+MMap61xxhpnrXHOGuetccEaF61xyRqXrXHFGletcc0a161xwxo3rXHLGrftWauNL2vcS/InyBJZI7E1klgj2Boh1gi1RlJrJLNGcmuksEZKa6SyRmprpLFGWmuks0Z6a2SwRkZrZLJGZmtkscYj1shqjWzWyG6NHNbIaY1c1shtjTzWyGuNfNbIf/+1eYFai/hdYS3ChIU5c1HAx/yCwUH/uu5g/4er8b6z/0fJ4l0Uei3id9haRJixY3jQc/3jN9uDNdYikDEX+pdzWf/bluGR0W2iwqLblLNWQWPKxkWVDWvVMi6uddmwyFaxYbGxkdFhESYiLrZseFhseIz1/21Mm6hW/3dHUkDXIgoF47uq/SkcTLxg++To8xYJdreds+Mu4vAeoPNS1iIK+q4Vfd6iYLDeb9b2eZMHBVYBjwgqYDEf/orHV8BifhSweAAU8AhQAYsBG0BxEQVExlxCVAFLkBSwZDDxgksSFLCUyxXQjruUiAIW910r+rylSQpY+iEo4FFBBSzjw19YfAUs40cBwwKggEeBClgG2ADCRBQQGbMRVUBDUsDwYOIFhxMUMMLlCmjHHSGigGG+a0WfN5KkgJEPQQGPCSpglA9/0fEVMMqPAkYHQAGPARUwCtgAokUUEBlzWVEFLEtSwHLBxAsuR1DAGJcroB13jIgCRvuuFX3e8iQFLP8QFPC4oAI+6sNfhfgK+KgfBawQAAU8DlTAR4ENoIKIAiJjriiqgBVJClgpmHjBlQgKWNnlCmjHXVlEASv4rhV93iokBazyEBTwhKACVvXhr1p8BazqRwGrBUABTwAVsCqwAVQTUUBkzI+JKuBjJAWsHky84OoEBazhcgW0464hooDVfNeKPm9NkgLWfAgKeFJQAR/34e+J+Ar4uB8FfCIACngSqICPAxvAEyIKiIy5lqgC1iIpYO1g4gXXJijgky5XQDvuJ0UU8AnftaLP+xRJAZ96CAp4SlAB6/jwVze+Atbxo4B1A6CAp4AKWAfYAOqKKCAy5qdFFfBpkgLWCyZecD2CAtZ3uQLacdcXUcC6vmtFn7cBSQEbPAQF/ENQAZ/x4e/Z+Ar4jB8FfDYACvgHUAGfATaAZ0UUEBlzQ1EFbEhSwEbBxAtuRFDA51yugHbcz4ko4LO+a0Wf93mSAj7/EBTwtKACNvbhr0l8BWzsRwGbBEABTwMVsDGwATQRUUBkzE1FFbApSQGbBRMvuBlBAZu7XAHtuJuLKGAT37Wiz9uCpIAtHoICnhFUwBd8+HsxvgK+4EcBXwyAAp4BKuALwAbwoogCImNuKaqALUkKGBtMvOBYggK2crkC2nG3ElHAF33Xij5va5ICtn4ICnhWUAHb+PAXF18B2/hRwLgAKOBZoAK2ATaAOBEFRMb8kqgCvkRSwJeDiRf8MkEB27pcAe2424ooYJzvWtHnbUdSwHYPQQHPCSrgKz78vRpfAV/xo4CvBkABzwEV8BVgA3hVRAGRMbcXVcD2JAXsEEy84A4EBXzN5Qpox/2aiAK+6rtW9HlfJyng6w9BAc8LKmBHH/46xVfAjn4UsFMAFPA8UAE7AhtAJxEFRMbcWVQBO5MUsEsw8YK7EBSwq8sV0I67q4gCdvJdK/q83UgK2O0hKOAFQQXs7sNfj/gK2N2PAvYIgAJeACpgd2AD6CGigMiYe4oqYE+SAvYKJl5wL4ICvuFyBbTjfkNEAXv4rhV93jdJCvjmQ1DAi4IK2NuHvz7xFbC3HwXsEwAFvAhUwN7ABtBHRAGRMb8lqoBvkRTw7WDiBb9NUMC+LldAO+6+IgrYx3et6PP2Iylgv4eggJcEFbC/D38D4itgfz8KOCAACngJqID9gQ1ggIgCImMeKKqAA0kKOCiYeMGDCAr4jssV0I77HREFHOC7VvR53yUp4LsPQQEvCyrgYB/+hsRXwMF+FHBIABTwMlABBwMbwBARBUTGPFRUAYeSFPC9YOIFv0dQwGEuV0A77mEiCjjEd63o8w4nKeDwh6CAVwQV8H0f/kbEV8D3/SjgiAAo4BWgAr4PbAAjRBQQGfNIUQUcSVLAUcHECx5FUMAPXK6AdtwfiCjgCN+1os87mqSAox+CAl4VVMAxPvyNja+AY/wo4NgAKOBVoAKOATaAsSIKiIz5Q1EF/JCkgOOCiRc8jqCA412ugHbc40UUcKzvWtHnnUBSwAkPQQGvCSrgRz78TYyvgB/5UcCJAVDAa0AF/AjYACaKKCAy5kmiCjiJpICTg4kXPJmggB+7XAHtuD8WUcCJvmtFn3cKSQGnPAQFvC6ogFN9+JsWXwGn+lHAaQFQwOtABZwKbADTRBQQGfMnogr4CUkBpwcTL3g6QQFnuFwB7bhniCjgNN+1os87k6SAMx+CAt4QVMBPffibFV8BP/WjgLMCoIA3gAr4KbABzBJRQGTMs0UVcDZJAecEEy94DkEB57pcAe2454oo4CzftaLPO4+kgPMeggLeFFTA+T78LYivgPP9KOCCACjgTaACzgc2gAUiCoiM+TNRBfyMpICfBxMv+HOCAi50uQLacS8UUcAFvmtFn3cRSQEXPQQFvCWogF/48Lc4vgJ+4UcBFwdAAW8BFfALYANYLKKAyJiXiCrgEpICLg0mXvBSggJ+6XIFtOP+UkQBF/uuFX3er0gK+NVDUMDbggq4zIe/5fEVcJkfBVweAAW8DVTAZcAGsFxEAZExrxBVwBUkBVwZTLzglQQFXOVyBbTjXiWigMt914o+72qSAq5+CAp4R1ABv/bh75v4Cvi1HwX8JgAKeAeogF8DG8A3IgqIjHmNqAKuISng2mDiBa8lKOC3LldAO+5vRRTwG9+1os/7HUkBv3sICnhXUAHX+fC3Pr4CrvOjgOsDoIB3gQq4DtgA1osoIDLmDaIKuIGkgN8HEy/4e4ICbnS5AtpxbxRRwPW+a0WfdxNJATc9BAW8J6iAm3342xJfATf7UcAtAVDAe0AF3AxsAFtEFBAZ81ZRBdxKUsBtwcQL3kZQwB9croB23D+IKOAW37Wiz7udpIDbH4ICBgXrKeAOH/52xlfAHX4UcGcAFDAoGKeAO4ANYKeIAiJj/lFUAX8kKeBPwcQL/omggLtcroB23LtEFHCn71rR591NUsDdD0EBEwkq4M8+/P0SXwF/9qOAvwRAARMBFfBnYAP4RUQBkTHvEVXAPSQF3BtMvOC9BAXc53IFtOPeJ6KAv/iuFX3eX0kK+OtDUMDEggq434e/A/EVcL8fBTwQAAVMDFTA/cAGcEBEAZExHxRVwIMkBfwtmHjBvxEU8JDLFdCO+5CIAh7wXSv6vIdJCnj4IShgEkEF/N2HvyPxFfB3Pwp4JAAKmASogL8DG8AREQVExnxUVAGPkhTwWDDxgo8RFPC4yxXQjvu4iAIe8V0r+rwnSAp44iEoYLCgAp704e9UfAU86UcBTwVAAYOBCngS2ABOiSggMuY/RBXwD5ICng4mXvBpggKecbkC2nGfEVHAU75rRZ/3LEkBzz4EBQwRVMBzPvydj6+A5/wo4PkAKGAIUAHPARvAeREFRMZ8QVQBL5AU8GIw8YIvEhTwkssV0I77kogCnvddK/q8l0kKePkhKGCooAJe8eHvanwFvOJHAa8GQAFDgQp4BdgAroooIDLma6IKeI2kgNeDiRd8naCAN1yugHbcN0QU8KrvWtHnvUlSwJsPQQGTCirgLR/+bsdXwFt+FPB2ABQwKVABbwEbwG0RBUTGfEdUAe+QFPBuMPGC7xIU8J7LFdCO+56IAt72XSv6vLZEIcF6v1nb5w20AiYTVMBEIX/+mzgk6F/Vzv4P8RXQ/h+xFTAZUAETheCAmjhEQwGRMScJ0VTAJCEcBQwOIV6wfXL4vkyIuxXQjjsk5J8JBp2XooCJfdeKPm8oSQFDH4ICJhdUwKQ+/CWLr4BJ/ShgsgAoYHKgAiYFNoBkIgqIjDm5qAImJylgihDiBacgKGBKlyugHXdKEQVM5rtW9HlTkRQw1UNQwBSCCpjah7808RUwtR8FTBMABUwBVMDUwAaQRkQBkTGnFVXAtCQFTBdCvOB0BAVM73IFtONOL6KAaXzXij5vBpICZngICphSUAEz+vCXKb4CZvSjgJkCoIApgQqYEdgAMokoIDLmzKIKmJmkgFlCiBechaCAj7hcAe24HxFRwEy+a0WfNytJAbM+BAVMJaiA2Xz4yx5fAbP5UcDsAVDAVEAFzAZsANlFFBAZcw5RBcxBUsCcIcQLzklQwFwuV0A77lwiCpjdd63o8+YmKWDuh6CAqQUVMI8Pf3njK2AePwqYNwAKmBqogHmADSCviAIiY84nqoD5SAqYP4R4wfkJCljA5Qpox11ARAHz+q4Vfd6CJAUs+BAUMI2gAhby4a9wfAUs5EcBCwdAAdMAFbAQsAEUFlFAZMxFRBWwCEkBi4YQL7goQQGLuVwB7biLiShgYd+1os9bnKSAxR+CAqYVVMASPvyVjK+AJfwoYMkAKGBaoAKWADaAkiIKiIy5lKgCliIpYOkQ4gWXJihgGZcroB13GREFLOm7VvR5w0gKGPYQFDCdoAIaH/7C4yug8aOA4QFQwHRABTTABhAuooDImCNEFTCCpICRIcQLjiQoYJTLFdCOO0pEAcN914o+bzRJAaMfggKmF1TAsj78lYuvgGX9KGC5AChgeqAClgU2gHIiCoiMOUZUAWNIClg+hHjB5QkK+KjLFdCO+1ERBSznu1b0eSuQFLDCQ1DADIIKWNGHv0rxFbCiHwWsFAAFzABUwIrABlBJRAGRMVcWVcDKJAWsEsK8YIICVnW5AtpxVxVRwEq+a0WftxpJAas9BAXMKKiAj/nwVz2+Aj7mRwGrB0ABMwIV8DFgA6guooDImGuIKmANkgLWDCFecE2CAj7ucgW0435cRAGr+64Vfd4nSAr4xENQwEyCCljLh7/a8RWwlh8FrB0ABcwEVMBawAZQW0QBkTE/KaqAT5IU8KkQ4gU/RVDAOi5XQDvuOiIKWNt3rejz1iUpYN2HoICZBRXwaR/+6sVXwKf9KGC9AChgZqACPg1sAPVEFBAZc31RBaxPUsAGIcQLbkBQwGdcroB23M+IKGA937Wiz/ssSQGffQgKmEVQARv68NcovgI29KOAjQKggFmACtgQ2AAaiSggMubnRBXwOZICPh9CvODnCQrY2OUKaMfdWEQBG/muFX3eJiQFbPIQFPARQQVs6sNfs/gK2NSPAjYLgAI+AlTApsAG0ExEAZExNxdVwOYkBWwRQrzgFgQFfMHlCmjH/YKIAjbzXSv6vC+SFPDFh6CAWQUVsKUPf7HxFbClHwWMDYACZgUqYEtgA4gVUUBkzK1EFbAVSQFbhxAvuDVBAdu4XAHtuNuIKGCs71rR540jKWDcQ1DAbIIK+JIPfy/HV8CX/CjgywFQwGxABXwJ2ABeFlFAZMxtRRWwLUkB24UQL7gdQQFfcbkC2nG/IqKAL/uuFX3eV0kK+OpDUMDsggrY3oe/DvEVsL0fBewQAAXMDlTA9sAG0EFEAZExvyaqgK+RFPD1EOIFv05QwI4uV0A77o4iCtjBd63o83YiKWCnh6CAOQQVsLMPf13iK2BnPwrYJQAKmAOogJ2BDaCLiAIiY+4qqoBdSQrYLYR4wd0ICtjd5Qpox91dRAG7+K4Vfd4eJAXs8RAUMKegAvb04a9XfAXs6UcBewVAAXMCFbAnsAH0ElFAZMxviCrgGyQFfDOEeMFvEhSwt8sV0I67t4gC9vJdK/q8fUgK2OchKGAuQQV8y4e/t+Mr4Ft+FPDtAChgLqACvgVsAG+LKCAy5r6iCtiXpID9QogX3I+ggP1droB23P1FFPBt37WizzuApIADHoIC5hZUwIE+/A2Kr4AD/SjgoAAoYG6gAg4ENoBBIgqIjPkdUQV8h6SA74YQL/hdggIOdrkC2nEPFlHAQb5rRZ93CEkBhzwEBcwjqIBDffh7L74CDvWjgO8FQAHzABVwKLABvCeigMiYh4kq4DCSAg4PIV7wcIICvu9yBbTjfl9EAd/zXSv6vCNICjjiIShgXkEFHOnD36j4CjjSjwKOCoAC5gUq4EhgAxglooDImD8QVcAPSAo4OoR4waMJCjjG5Qpoxz1GRAFH+a4Vfd6xJAUc+xAUMJ+gAn7ow9+4+Ar4oR8FHBcABcwHVMAPgQ1gnIgCImMeL6qA40kKOCGEeMETCAr4kcsV0I77IxEFHOe7VvR5J5IUcOJDUMD8ggo4yYe/yfEVcJIfBZwcAAXMD1TAScAGMFlEAZExfyyqgB+TFHBKCPGCpxAUcKrLFdCOe6qIAk72XSv6vNNICjjNp4DxlQ9dw15JcNef13eeT6xrn26NGdaYaY1PrTHLGrOtMccac60xzxrzrbHAGp9Z43NrLLTGImt8YY3F1lhijaXW+NIaX1ljmTWWW2OFNVZaY5U1Vlvja2t8Y4011ljrU0JnLj/xCZ/zu+l+vpvh57uZfr771M93s/x8N9vPd3P8fDfXz3fz/Hw33893C/x895mf7z73891CP98t8vPdF36+W+znuyV+vlvq57sv/Xz3lZ/vlvn5brmf71b4+W6ln+9W+flutZ/vvvbz3Td+vlvj57u1fkxWsO/fKr5/wx7s8y+cfdD+9UkIzrBNB+rVimIcwxa/Fg8Ss12LGZD8/VnXmQ9+rnBf/synwFqsdHMtIv9xnWbWg8Uc5ojZzH6Qc4X/S/7MHGAtVrmzFmHxrtPM/R9jjo77S8xm3v92rnJ+8mfmA2ux2m21KOf3Os2C/z7msv8mZvPZf3uusv82f+ZzYC2+dk8twv/DdZqF/03MZf9jzGbR3z9Xq/9P/swXwFp844ZalP3/XqdZ/PdiDvsbMZslf+dcYX8rf2YpsBZrHm4tov7mdZov/38xR/7tmM1X//FckXH/Rf7MMmAt1j6sWpT9r67TLP/3MZf7L2M2K/7NuWLi/uv8mZXAWnwb+FqE/Q/XaVb5iznsf4rZrP7rucz/mD/zNbAW3wWyFq3/5+s03/xrzBEPELNZ4zhXeNwD5c+sBdZiXYBqEfZgHwNcHzDA+a1xzs8etBbrRWoBnAcZoI833wBrsUGkFkC/Z4B+xXwLrMX3IrUA6poB9mWzHliLjaRaoG9MAPLXAPFnkPlL5MNwXt/5nPsR8fcrnPsZzv0O536Ic7/EuZ/i3G9x7sc492uc+znO/R7nfpBzv8i5n+Tcb3LuRzn3q5z7Wc79Lud+mHO/zLmf5txvc+7HOffrnPt5zv0+536gc7/QuZ94f7/xW+vf76yxzhrrrbHBGt9bY6M1NlljszW2WGOrNbZZ4wdrbLfGDmvstMaP1vjJGrussdsaP1vjF2vsscZea+yzxq/W2G+NA9Y4aI3frHHIGodD/ryWFL5r6pPkn9f3luP4bcdxX8dxP8dxf8fxAMfxQMfxIMfxO47jdx3Hgx3HQxzHQx3H7zmOhzmOhzuO33ccj3Acj3Qcj3Icf+A4Hu04HuM4Hus4/tBxPM5xPN5xPMFx/JHjeKLjeJLjeLLj+GPH8RTH8VTH8TTH8SeO4+mO4xmO45mO408dx7Mcx7Mdx3Mcx3Mdx/Mcx/Mdxwscx585jj93HC90HC9yHH/hOF7sOF7iOF7qOP7ScfyV43iZ43i543iF43il43iV47hg8D+PizuOwxzH0Y7jCo7jao7jJxzHdR3HzzqOmziOX3QcxzmOX3Ucd3Ic93Ac93EcD3AcD3Ecj3Acj3UcT3QcT3Mcz3IcL3AcL3YcL3ccf+M4Xu843uI43uk4/sVxfMBxfMRxfMpxfN5xfNVxfNtxnNjRW5M5jtM4jjM5jrM7jvM6jgs7jks6jsMdx+Ucx5Ucx9Udx7Udx/Ucx40cx80cx7GO45cdxx0cx10cx70cx287jgc5jt9zHI9yHI9zHE92HH/rOP7OcbzOcbzecbzBcfy943ij43iT43iz43iL43ir43ib4/gHx/F2x/EOx/FOx/GPjuOfHMe7HMe7Hcc/O45/cRzvcRzvdRzvcxz/6jje7zg+4Dg+6Dj+zXF8yHF82Hf8u/Wv85PI928V379hD/YxvwPXf+xLDdSNnpWCsN73/udICPGCj4Tgz3sUWEBW3EcdIAadl3on9WHgTVLHQnDX5a8+D3p9lX31QeewMvAaj4dgcYPGuF3j4yH42pwIwTa5+zca2ufNG/TnIzL2d6FBf/24uWEzr7OiyHVWELnOw0m43H1QjtnnsRe+0P0vGHiuKqRaB2FjDouPITiYkEIQ4iu81/z+eZ1e88Nep9f8Ek7zS+w450nfhOeUbQoZM77KfoqGmAmgznUUOOtxOteTPufq/KDBexI4o/6DPPsLe7CPuT/7SyKCpQc912mX18PGy2nCTPIMaSZ5xsFHlVn12RCOoKD7MRL351yOe7sm5wi1Pk/C/Xki7lk94ILLV9Hs+l8gxH2RhIGLRAyw+LCnWMLEwN4A3Wr2oNd5CdingbU2e4txOHSJyCF7MYPRRy8L9NHLhLivkProlf+AgQe95vsLEehbQlkLHA8a71WXY9NeEGNw8poAJ68R4r5O4uR1Yl8+SfK3NwQwcIMQ900SBm6StZkxt78lgIFbhLhvkzBwm4gBWwsYGLgjgIE7hLjvkjBw18+aO3recy+BzXvukXl1lIAve6eckQv7vHmD/jO+wh7sY5D4cubhQXOaiJTTRKE8fNk3MzD8W+JQd/ftRKS4k7g8btZ6QjAJ+8FE7Nv1v0rIRYjLMVCBhP1Ql8d9ijRXTSrAecZ6RTIS55MROc+atycn5SI5WfsZc7YUAtrPiDulQB9grFekImE/FRH7x0nan1pA+xnYTyOAfcY6TVoS9tOG/vOpnkA9hvlYEDaW+590ocQLtk+OPm964KIAK+70jkcdQOelPoaZCJjTDDjSUR7DrO6rDzqH1YHXmNHlDduuccZQfG0ykRp2ptDAP4aJbNjM66wmcp1VRa4zEZm7D8qxGkHufxKpBqnWQdiY+Y9hIoXAbn7Jgv71x6oYTv448B0UcX9+GEU09w+c+cjsU4Ysob7k3FeQzD61c36XhTwFPhcCe9ThH784kxno9LKEYguM7nQ2eTKTnDi43m2Ok25Df8TlTtKu0SMEJ5mV5CSzkpe/UxBykU1g+SclIe7soRwXgb7OHAL1SU2oT06BuNMQ4s4FjNt23YWs8ZvvfDbXbdzb/9pL9Da27Dzn8h37G2n/w3/zhje88ffHv9OIsAf70HxS7lBcL0ri60XxP6jzs3KLzAHrGvOgr5Gx3MlYEt5Pfo4WMcnMQ4j7gMjPZziB+aAx58WB3ABxY5C1IDdJc/98CbFJ5nV7k7yv4okJ560CImE+YBKdKyf2efOSCq+Q1/ye0zL5BZpIAbc3Eft8DKd1SMBpFSDEfVjEaRUANqOCQKcFxI057DktiSZZMIE6rXCkIyhEclqF9JwWNK+FPadlCgs0kSLsJoJwHEUIjuOoiOMoAiRlUZeu7Rz1HIdEsyiaQB1HBFIZi5EcRzE9xwHNa3HPcZjiAk2khNubSLUgztrOcYG1nRKEuE+IOK0SwGZUEui0gLgxJzynJdEkSyZQpxWJdASlSE6rlJ7Tgua1tOe0TGmBJlJGYW2nDGHLuAwQ7GE6YKcppgLYwxKoYkYhO7shKabRU0xoXsM9xTThAk0kwu2Kac95awS5+xceagDjjQQXhOFgIghrJn+4/JeL7LgjCXGfFlkrigCKQxRwrQiIG3PaWyuSEK2oBOp8o5EOLZrkfKP1nC80r2U952vKCjSRcm5vIlWDOLty5wR25coR4j4v4rTKAZtRDNBpAXFjzntOS6JJxiRQp1UW6QjKk5xWeT2nBc3ro57TMo8KNJEKCrtyFQi7chWAYK/o7cpJgL1iAlXMcsjOXomkmJX0FBOa18qeYprKAk2kioJiViEoZhUg2Kt6iikB9qoJVDFjkJ29Gkkxq+kpJjSvj3mKaR4TaCLVFRSzOkExqwPBXsNTTAmw10igitkS2dlrkhSzpp5iQvP6uKeY5nGBJvKEgmI+QVDMJ4Bgr+UppgTYayVQxYxFdvbaJMWsraeY0Lw+6SmmeVKgiTyloJhPERTzKSDY63iKKQH2OglUMVshO3tdkmLW1VNMaF6f9hTTPC3QROopKGY9gmLWA4K9vqeYEmCvn0AVszWyszcgKWYDPcWE5vUZTzHNMwJN5Fm3NxH7h+YZTyVdEngq6VlC3JdFnkp6FtiMGgKfSgLixlz2nkqSaJIN3d4kWb+r3igUCyCGE2pEaJLPkVzhcz5XaJXq/xpmaNBfP/AbTII4DZ/xUmCF66wqcp2JQjWuM5J0nUHY6wxL7Djn8z7iNrZ7Dzoh6e0794L+Or170KZWHXiu9EBhcDbI5x3T5vsf9FrZ80Bn2cTlAmnX3K5VEhEsPei5mrq8HjZemhIMSzOSYWnmMCzJHFxk5MY2sKdD/nn+Bz1v3J+fVkF+Pg94bnP/wJmP5j5RaBHqS879JDb3Fdz5XQvi+uBp32wAJCDhPpCZ5kCitgjFFhhNKJukzUNhgPnHh1DvlqdJs78XQl0dt7Fr9AKhmb5IaqYvEjn/f3wn5KKlyzFgx52EEHesQNwhhLhbCcQdSoi7tUDcSQlxtwHGba9oFbZGUd/57N5h88j+N9gaOaxh48vOtf3/bzJrJPd9/zDG/Y+KLsWB91QLB/31gzo/K7fIHLCu8SW3bxfYS8KMWeg1l++p2jG/RIj7usie6kvACdzLwJUWIG7M9WIyTZK2p6rQJF92e5O8r+KJCeetAiJhW9JMtS1xpqqQ13ae0zLtBJrIK66/ey2I47RuCTitVwhx3xZxWq8Am9GrQKcFxI257TktiSb5agJ1WuFIR9Ce5LTa6zktaF47eE7LdBBoIq+xmwjCcbxGcBz3RBzHa0BSvu7StZ17nuOQaBavJ1DHEYFUxo4kx9FRz3FA89rJcxymk0AT6ez2JlItiLO2k6i4+9d2OhPiTlwcD0r7g3ZanYHNqAvQaQFxY5C1UHVaCk2ySwJ1WpFIR9CV5LS66jktaF67eU7LdBNoIt0V1na6E7aMuwPB3kMH7DTFVAB7jwSqmFHIzt6TpJg99RQTmtdenmKaXgJN5A23NxH7oXrG2kSIwNrEG4S4Q0XWJt4ANqM3gWsTQNyYUG9tQqJJvplAnVY00hH0Jjmt3npOC5rXPp7TMn0Emshbbm8iVYM4Tiu5gNN6ixB3ChGn9RawGb0NdFpA3JgUntOSaJJvJ1CnVRbpCPqSnFZfPacFzWs/z2mZfgJNpL/bm0hj0ppWagGn1Z8QdxoRp9Uf2IwGAJ0WEDcmjee0JJrkgATqtMohHcFAktMaqOe0oHkd5DktM0igibzj9iaSiOS00gs4rXcIcWcQcVrvAJvRu0CnBcSNyeA5LYkm+W4CdVoxSEcwmOS0Bus5LWheh3hOywwRaCJD3d5Enic5rcwCTmsoIe4sIk5rKLAZvQd0WkDcmCye05Joku+5vUmyft9gWCgWQAwnNIzQJIeTXOFwoivMEMr5Gdj3CQS1P4nB14n8kaQRLse9XZMRhFqPJOF+JBH3rB+MGgXGPTpuu/6jCHF/QMLAB0QMsPiQrXjCxEB20iQB/SN7o4F9Glhrg8yfk0OjfRxSXRHJIWD2x5D8DpykY4HgVwXUWAFAfagCqHG4Cw1XBdQ4AUCNR16jaqH2J3H/NU5w+7pRMGnN4COBudNHhLgnkuZOE8m7iRMIuZgkgIFJhLgnkzAwmYgBFh9yCcyfGRjILTJ//hg4hQDW2uQmzZ8/dnAo6N9w6UFzOgWX00hVczZFwEVPZU3LwLflmBHAjY1pHjjNNAFwfuL2mYM9a2hFUM58LncMtlv+hBB3fhHHMB3oGIC1NvkFnOZ0Am5mkGYbMxzXev8DFrZopLDN9O43NTMFhO1TEddVFgnOWR44zSwBcM4WAWcUEpxzcEFHqIJzjgA457p9SpCMtJkwT2AheR4h7vkkazefvJkwl5CLBQIYWECI+zMSBj4jbyYw+FBIYIrHwEBhkaWBz4FLA8Bam8KkzYTP/WwmuHmKvNAzemahgNFb5Hajl5xk9L4QEPkvCHEvJon8YrLRW0TIxRIBDCwhxL2UhIGlZKPH4EMxAaPHwEBxEaP3JdDoAWttipOM3pd8o9cSafS+8pabzVcCRm+ZyHJzLBKcyz1wmuUC4FwhAs5WSHCu9MBpVgqAc5UIOKGyvtpbvzGrBcD5tdvXb+y5+9eE+cs3AnP3bwhxryHN3deIzTvWejcXm7UCDerbhDjv+M4Dp/lOAJzrNMBpwpDgXO/NO8x6AXBuEAEn9Jmh7z1wmu8FwLlRRNbjkODc5E2KzSYBcG5WmBRvJkwOtwhMircQ4t5KmhRvpU+KsdZum9egzDaBBvWDQoP6gUDU7QINajsh7h2kBrWD36AikQ1qp2fvzU6BBvWjyNwT+nDaTx44zU8C4NwlAk7oDfW7PXCa3QLg/FkEnFBZ/8Wbd5hfBMC5R2HesYfgv/cKzDv2EuLeR5p37BObd/zqbciaXwUa1P6EOO844IHTHBAA50ERcELvs/rNm3eY3wTAeUgEnND7rA574DSHBcD5uwg4Y5DgPOJNis0RAXAeVZgUHyVMDo8JTIqPEeI+TpoUH+dPiqHW7oTXoMwJgQZ1UqFBnSQQ9ZRAgzpFiPsPUoP6g9+g2iAb1GnP3pvTAg3qjIi9h94MfNYDpzkrAM5zGuAMh94Iet4DpzkvAM4LIp0TKusXvXmHuSgAzksK845LBP99WWDecZkQ9xXSvOOK2Lzjqrcha64KNKhrCXHecd0Dp7kuAM4bIvMO6H1WN715h7kpAM5bIuCE3md12wOnuS0Azjsi4IxAgvOuNyk2dwXAeU9hUnyPMDkMSur+SbF9jei4EwHjdk6K7fPmDfrXj5utXeKkXoNKnNT915gkqUCDSkIgarBAgwomxB1CalAhSXm/5nE6JCjoXAg+F6Eux4D9S0ahBAwkFcB+UkLcyUjYT0bEvt3/hhEMWnIBDCQnYCAFCQMpiBhg8aGUwK8ZMTBQWuTXjFLisGqAtTalSb9mlNLHIfvvQkF//aBrhsZrDoEViVTIvq9aqLEChUrtFSrMjBMoVBqvUGFmfxL3X2Nat6912PO9tAS/k07A66cjxJ2e5PXTE71+KisXTQnzvQwCGMhAwEBGEgYykud7DD4YgfkeAwPhIvO9TMD5HrDWJpw038skPt+bIuBOMyflYB9O0iy4C41SBVSWpO6/xkcUXPQjBBWJcrl65iQ5x2gR9cwKVE9grU20gOvKSuBLNpLzzua41vsf9LVnx117tKoYZRcQoxwq7iYn7kLLqgIqpwCgcqkAKjfuQsupAiq3AKDyKNjlPAT5zyuw4JiXEHc+ku2xz5ss6F8/6GvPj7v2GNWmkl+gqRRQaCoFCOQqKNBUChLiLkRqKoX8PFaAvvbCuGtvqdpUCgs0lSIKTaUIgVxFBZpKUULcxUhNpVgAmkpx3LXHqjaV4gJNpYRCUylBIFdJgaZSknFPOamplApAUymNu/ZWqk2ltEBTKaPQVMoQyBUm0FTCGDcukZqKCUBTCcdde2vVphIu0FQiFJpKBIFckQJNJZJxPwepqUQR7wxNy7rHQwAD0QQMlCVhoCz57mAGH2IE7lNhYKC8yP1N5YD3NwFrbcqT7g4uFwBzFoPLaRtVcxYjYM7Kq9yW8SjuQuNUAfWoAKAqsACVGHqhBvo7DxWBQauCs6IAOCtpgDMM+hr1yuA3ximCs7IAOKsorJNUIcwTqgrMkasS4q5GmiNXo7/SEtugHsPlIVK1QT0m0KCqi6gn9HceanjgNDUEwFlTZN4BfRnw4968wzwuAM4nRMAJ/Z2HWh44TS0BcNZOiJPiJ72nvMyTAuB8SmFS/BRhclhHYFJchxB3XdKkuK6fp7zcbO2e9lbtzNMCDaqeQoOqRyBqfYEGVZ8QdwNSg2pAX7XD2vtnvAZlnhFoUM8qNKhnCURtKNCgGhLibkRqUI34DSoa2aCe8xqUeU6gQT2v0KCeJxC1sUCDakyIuwmpQTXhN6iyyAbV1GtQpqlAg2qm0KCaEYjaXKBBNSfE3YLUoFrwG1Q5ZIN6wWtQ5gWBBvWiQoN6kUDUlgINqiUh7lhSg4rlN6hWyAbVyttiNq0EGlRrkfsfWiPB2cYDp2kjAM44EXBC7394yQOneUkAnC+LgBMq6229eYdpKwDOdgrzjnYE//2KwLzjFULcr5LmHa+KzTvaew8FmPYCDapDQpx3vOaB07wmAM7XNcAZHo4EZ0dv3mE6CoCzkwg4I5Dg7OyB03QWAGeXhDgp7uo9sWK6CoCzm8KkuBthcthdYFLcnRB3D9KkuAf9iRWstevprdqZngINqpdCg+pFIOobAg3qDULcb5Ia1Jv0VTusve/tNSjTW6BB9VFoUH0IRH1LoEG9RYj7bVKDepvfoKDP/Pb1GpTpK9Cg+ik0qH4EovYXaFD9CXEPIDWoAfwGBX3md6DXoMxAgQY1SKFBDSIQ9R2BBvUOIe53SQ3qXX6Dgj7zO9hrUGawQIMaotCghhCIOlSgQQ0lxP0eqUG9x29QLZENapi3xWyGCTSo4SL3P8Qiwfm+B07zvgA4R4iAE3r/w0gPnGakADhHiYATKusfePMO84EAOEcrzDtGE/z3GIF5xxhC3GNJ846xYvOOD72HAsyHAg1qXEKcd4z3wGnGC4BzggY4I6C/7fiRN+8wHwmAc6IIOA0SnJM8cJpJAuCcnBAnxR97T6yYjwXAOUVhUjyFMDmcKjApnkqIexppUjyN/sQK1tp94q3amU8EGtR0hQY1nUDUGQINagYh7pmkBjWTvmqHtfefeg3KfCrQoGYpNKhZBKLOFmhQswlxzyE1qDn8BgV95neu16DMXIEGNU+hQc0jEHW+QIOaT4h7AalBLeA3KOgzv595Dcp8JtCgPldoUJ8TiLpQoEEtJMS9iNSgFvEbFPSZ3y+8BmW+EGhQixUa1GICUZcINKglhLiXkhrUUn6Dgv4I1JfeFrP5UqBBfSVy/0MMEpzLPHCaZQLgXC4CTuj9Dys8cJoVAuBcKQJOqKyv8uYdZpUAOFcrzDtWE/z31wLzjq8JcX9Dmnd8IzbvWOM9FGDWCDSotQlx3vGtB07zrQA4vxMBJ/S3Hdd58w6zTgCc60XAGYcE5wYPnGaDADi/T4iT4o3eEytmowA4NylMijcRJoebBSbFmwlxbyFNirfwn1iBWrut3qqd2SrQoLYpNKhtBKL+INCgfiDEvZ3UoLbzV+2g9n6H16DMDoEGtVOhQe0kEPVHgQb1IyHun0gN6id6g4qEPvO7y2tQZpdAg9qt0KB2E4j6s0CD+pkQ9y+kBvULv0FBn/nd4zUos0egQe1VaFB7CUTdJ9Cg9hHi/pXUoH7lNyjoM7/7vQZl9gs0qAMKDeoAgagHBRrUQULcv5Ea1G/8BgX9EahD3hazOSTQoA5rbDFHlkWC83cPnOZ3AXAeEQEn9P6Hox44zVEBcB4TASdU1o978w5zXACcJxTmHScI/vukwLzjJCHuU6R5xymxeccf3kMB5g+BBnU6Ic47znjgNGcEwHlWBJzQ33Y85807zDkBcJ4XAWdrJDgveOA0FwTAeTEhTooveU+smEsC4LysMCm+TJgcXhGYFF8hxH2VNCm+Sn9iBWvtrnmrduaaQIO6rtCgrhOIekOgQd0gxH2T1KBu8lftoPb+ltegzC2BBnVboUHdJhD1jkCDukOI+y6pQd3lNyjoM7/3vAZl7gk0KNuWQ6+R0aDsi0QTNVEy9zeoRIS4EyfjNCj7vHmD/vUDblDQZ36TJPMaVJJk7r/GYIUGFUwgaohAgwohxB1KalCh9AYVBX3mN6nXoExSgQaVTKFBJSMQNblAg0pOiDsFqUGl4Dco6I9ApQTmQbVBpRRoUKkI18gAZxQSnKk9cJrUAuBMIwJO6P0PaT1wmrQC4EwnAk6orKf35h0mvQA4MyjMOzIQ/HdGgXlHRkLcmUjzjkxi847MuDzIPhSQWaBBZUmI845HPHCaRwTAmVUEnNDfdszmzTtMNgFwZhcBZywSnDk8cJocAuDMmRAnxblwQcs+sZJLAJy5FSbFuQmTwzwCk+I8hLjzkibF9nm5T6xgrV0+b9XO5BNoUPkVGlR+AlELCDSoAoS4C5IaVEH+qh3U3hfyGpQpJNCgCis0qMIEohYRaFBFCHEXJTWoovwGBX3mt5jXoEwxgQZVXKFBFScQtYRAgypBiLskqUGV5Dco6DO/pbwGZUoJNKjSCg2qNIGoZQQaVBlC3GGkBhXGb1DQZ36N16CMEWhQ4QoNKpxA1AiBBhVBiDuS1KAi6Q0qGvojUFHeFrOJEmhQ0RpbzNERSHCW9cBpygqAs5wIOKH3P8R44DQxAuAsLwJOqKw/6s07zKMC4KygMO+oQPDfFQXmHRUJcVcizTsqic07KnsPBZjKAg2qSkKcd1T1wGmqCoCzmgg4ob/t+Jg37zCPCYCzugg4Y5DgrOGB09QQAGfNhDgpftx7YsU8LgDOJxQmxU8QJoe1BCbFtQhx1yZNimvTn1jBWrsnvVU786RAg3pKoUE9RSBqHYEGVYcQd11Sg6rLX7WD2vunvQZlnhZoUPUUGlQ9AlHrCzSo+oS4G5AaVAN+g4I+8/uM16DMMwIN6lmFBvUsgagNBRpUQ0LcjUgNqhG/QUGf+X3Oa1DmOYEG9bxCg3qeQNTGAg2qMSHuJqQG1YTfoKDP/Db1GpRpKtCgmik0qGYEojYXaFDNCXG3IDWoFvQGVRb6I1AveFvM5gWBBvWixhZzWYMEZ0sPnKalADhjRcAJvf+hlQdO00oAnK1FwAmV9TbevMO0EQBnnMK8I47gv18SmHe8RIj7ZdK842WxeUdb76EA01agQbVLiPOOVzxwmlcEwPmqCDihv+3Y3pt3mPYC4OwgAs6ySHC+5oHTvCYAztcT4qS4o/fEiukoAM5OCpPiToTJYWeBSXFnQtxdSJPiLvQnVrDWrqu3ame6CjSobgoNqhuBqN0FGlR3Qtw9SA2qB3/VDmrve3oNyvQUaFC9FBpULwJR3xBoUG8Q4n6T1KDe5Dco6DO/vb0GZXoLNKg+Cg2qD4Gobwk0qLcIcb9NalBv8xsU9Jnfvl6DMn0FGlQ/hQbVj0DU/gINqj8h7gGkBjWA36Cgz/wO9BqUGSjQoAYpNKhBBKK+I9Cg3iHE/S6pQb3Lb1DQH4Ea7G0xm8ECDWqIyBZzHBKcQz1wmqEC4HxPA5zloPc/DPPAaYYJgHO4SOeEyvr73rzDvC8AzhEK844RBP89UmDeMZIQ9yjSvGOU2LzjA++hAPOBQIManRDnHWM8cJoxAuAcKzLvgP6244fevMN8KADOcSLgjEKCc7wHTjNeAJwTEuKk+CPviRXzkQA4JypMiicSJoeTBCbFkwhxTyZNiifTn1jBWruPvVU787FAg5qi0KCmEIg6VaBBTSXEPY3UoKbRV+2w9v4Tr0GZTwQa1HSFBjWdQNQZAg1qBiHumaQGNZPfoKDP/H7qNSjzqUCDmqXQoGYRiDpboEHNJsQ9h9Sg5vAbFPSZ37legzJzBRrUPIUGNY9A1PkCDWo+Ie4FpAa1gN+goM/8fuY1KPOZQIP6XKFBfU4g6kKBBrWQEPciUoNaxG9Q0B+B+sLbYjZfCDSoxSL3P7RGgnOJB06zRACcS0XACb3/4UsPnOZLAXB+JQJOqKwv8+YdZpkAOJcrzDuWE/z3CoF5xwpC3CtJ846VYvOOVd5DAWaVQINanRDnHV974DRfC4DzGw1wxkB/23GNN+8wawTAuVYEnBFIcH7rgdN8KwDO7xLipHid98SKWScAzvUKk+L1hMnhBoFJ8QZC3N+TJsXf059YwVq7jd6qndko0KA2KTSoTQSibhZoUJsJcW8hNagt9FU7rL3f6jUos1WgQW1TaFDbCET9QaBB/UCIezupQW3nNyjoM787vAZldgg0qJ0KDWongag/CjSoHwlx/0RqUD/xGxT0md9dXoMyuwQa1G6FBrWbQNSfBRrUz4S4fyE1qF/4DQr6zO8er0GZPQINaq9Cg9pLIOo+gQa1jxD3r6QG9Su/QUF/BGq/t8Vs9gs0qAMi9z/EIsF50AOnOSgAzt9EwAm9/+GQB05zSACch0XACZX13715h/ldAJxHFOYdRwj++6jAvOMoIe5jpHnHMbF5x3HvoQBzXKBBnUiI846THjjNSQFwntIAZ0vobzv+4c07zB8C4DwtAk6DBOcZD5zmjAA4zybESfE574kVc04AnOcVJsXnCZPDCwKT4guEuC+SJsUX6U+sYK3dJW/VzlwSaFCXFRrUZQJRrwg0qCuEuK+SGtRV+qod1t5f8xqUuSbQoK4rNKjrBKLeEGhQNwhx3yQ1qJv8BgV95veW16DMLYEGdVuhQd0mEPWOQIO6Q4j7LqlB3eU3KOgzv/e8BmXuCTSooOQCDcq+SDRREyV3f4NKRIg7cXJOg7LPmzfoXz/gBgV95jdJcq9BJUnu/msMVmhQwQSihgg0qBBC3KGkBhXKb1DQH4FKCsyDaoNKKtCgkhGukQHOGCQ4k3vgNMkFwJlCBJzQ+x9SeuA0KQXAmUoEnFBZT+3NO0xqAXCmUZh3pCH477QC8460hLjTkeYd6cTmHelxeZB9KCC9QIPKkBDnHRk9cJqMAuDMJAJO6G87ZvbmHSazADiziIAzDgnORzxwmkcEwJk1IU6Ks+GCln1iJZsAOLMrTIqzEyaHOQQmxTkIceckTYrt85KfWIFau1zeqp3JJdCgcis0qNwEouYRaFB5CHHnJTWovPxVO6i9z+c1KJNPoEHlV2hQ+QlELSDQoAoQ4i5IalAF6Q0qFvrMbyGvQZlCAg2qsEKDKkwgahGBBlWEEHdRUoMqym9Q0Gd+i3kNyhQTaFDFFRpUcQJRSwg0qBKEuEuSGlRJfoOCPvNbymtQppRAgyqt0KBKE4haRqBBlSHEHUZqUGH8BgX9ESjjbTEbI9CgwjW2mGPLIsEZ4YHTRAiAM1IEnND7H6I8cJooAXBGi4ATKutlvXmHKSsAznIK845yBP8dIzDviCHEXZ407ygvNu941HsowDwq0KAqJMR5R0UPnKaiADgriYAT+tuOlb15h6ksAM4qIuBsjQRnVQ+cpqoAOKslxEnxY94TK+YxAXBWV5gUVydMDmsITIprEOKuSZoU16Q/sYK1do97q3bmcYEG9YRCg3qCQNRaAg2qFiHu2qQGVZu/age19096Dco8KdCgnlJoUE8RiFpHoEHVIcRdl9Sg6vIbFPSZ36e9BmWeFmhQ9RQaVD0CUesLNKj6hLgbkBpUA36Dgj7z+4zXoMwzAg3qWYUG9SyBqA0FGlRDQtyNSA2qEb1BtYI+8/uc16DMcwIN6nmFBvU8gaiNBRpUY0LcTUgNqgm/QUF/BKqpt8Vsmgo0qGYaW8ytopDgbO6B0zQXAGcLEXBC7394wQOneUEAnC+KgBMq6y29eYdpKQDOWIV5RyzBf7cSmHe0IsTdmjTvaC0272jjPRRg2gg0qLiEOO94yQOneUkAnC+LgBP6245tvXmHaSsAznYi4IxFgvMVD5zmFQFwvpoQJ8XtvSdWTHsBcHZQmBR3IEwOXxOYFL9GiPt10qT4dfoTK1hr19FbtTMdBRpUJ4UG1YlA1M4CDaozIe4upAbVhb9qB7X3Xb0GZboKNKhuCg2qG4Go3QUaVHdC3D1IDaoHv0FBn/nt6TUo01OgQfVSaFC9CER9Q6BBvUGI+01Sg3qT36Cgz/z29hqU6S3QoPooNKg+BKK+JdCg3iLE/TapQb3Nb1DQZ377eg3K9BVoUP0UGlQ/AlH7CzSo/oS4B5Aa1AB6g2oN/RGogd4Wsxko0KAGaWwxt45AgvMdD5zmHQFwvisCTuj9D4M9cJrBAuAcIgJOqKwP9eYdZqgAON9TmHe8R/DfwwTmHcMIcQ8nzTuGi8073vceCjDvCzSoEQlx3jHSA6cZKQDOUSLghP624wfevMN8IADO0SLgjEGCc4wHTjNGAJxjE+Kk+EPviRXzoQA4xylMiscRJofjBSbF4wlxTyBNiifQn1jBWruPvFU785FAg5qo0KAmEog6SaBBTSLEPZnUoCbzV+2g9v5jr0GZjwUa1BSFBjWFQNSpAg1qKiHuaaQGNY3foKDP/H7iNSjziUCDmq7QoKYTiDpDoEHNIMQ9k9SgZvIbFPSZ30+9BmU+FWhQsxQa1CwCUWcLNKjZhLjnkBrUHH6Dgj7zO9drUGauQIOap9Cg5hGIOl+gQc0nxL2A1KAWOBoUAwONQvG5+EwAA58RMPA5CQOfEzFwPCQo6FwIPhcLXY6BphYGFhIwsEgA+4sIcX9Bwv4XROyz+kDF4gkTA5WK441ZkA8LyOtcjMOqAdbaIPPn5NBiP5McdE6XAHOaDZjT7KScLiH2pUQWP9MTfNlSUo9e+jfwFfZgH4PElzMPD5rTL0k5/ZLs+1sS8FXV5bpne74xhLiriejeV0AOAWttqrkcN//3u1AE3NQQ4MuHhLhrivBlGZAvwFqbmgK4GU/ATS0R3Cx3aZ9Vyd8KYP5yAfOXmzSXWEH0esGkucRKku9dGYC5BBJfK4FziVWknK4i4svu9VMJ+Frt8nVUm1OtCHE/KbB2OJ0Q91Mi2vQ1sHcAa22eImnT1451Ysa8qjUBS08L+ONPCXHXE+HQN0AOAWtt6gmsQ7Qh4OYZAb7MJsT9rAhf1gD5Aqy1UcnfWmD+CgHzV5ik2WuJfj8ZaT75LWnu820A5pNIfH0LnE9+R8rpdwHYT14HzGkxIGeLkzi7jsjZ5CTOrifha30AOIvE13ogZzeQcrqBvAa0jICv7wXuIVxBiHujQNyrCHFvErh38htC3JtJnN9M5vy3hFxsEcD+OkLcWwXi3kCIe5tA3BsJcf8g0Ou2EOLeTup128n3iW8n5GIHKRc7yH3/R0Iudgr0gV2EuH8UiPtnQtw/CfS/vYS4d5E4v4vM+f2EXOwWwP5BQtw/C8R9iBD3LwJx/06Ie49ArztGiHsvqdftJXu9U4Rc7CPlYh+5758h5OJXgT5wjhD3foG4LxDiPiDQ/y4T4j5I4vxBMuevEXLxmwD2bxDiPiQQ9y1C3IcF4r5DiPt3gV4XlBQf9xFSrztC9nrBhFwcJeXiaADuuzgG3BcvBbzvojTpvotjRHzZ91yEEvB1nISv4wG47wKJr+PA+y5OkHJ6gvwcfyoCvp5z+f3A2ay4mxK0+3mR+1lPAjkErLV5XuD++dQEvjR1edzZSXxpJsKXU0C+AGttmgnwJQ2BLy+I4OaP5K7sjUYlf6eB+TPA/IWT5hKniV4vFeke7jMk33smAHMJJL7OAOcSZ0k5PUueS2Qm9PpzAs/x5yTwqqXAc/xZCfWOFdGm88DeAay1iSVp03nyc/w5CFhq43IO5SLNq+JEOHQByCFgrU2cwLwqF4EvFwX2nvIS4r5E8lv2ee//QDEjFwUJubhMysVl8j5cUUIurpBycYWci5KEXFwl5eIqORdhhFxcI+XiWgD2Z68DNTcGqLnlSb71OhFfaUlrKjdI+LoRgDUVJL5uANdUbpJyepO8plKe0L9uudzn2XFXIMR9WyDuSoS47wj4+qqEuO+SOH+XzPnqhFzcE8B+TULcQSncH/cThLgTCcRdmxB3YpfHbfe6OoS4k6Tg9Dr7vMw1jPqEXASTcmGfNy8xFw0JuQgh5SKEnIvGhFyEknIRSs5Fc0IukpJykZSci5aEXCQj5SJZCq5PbE3IRXIB3xBHiDuFQNwvE+JOKeCXXiHEnYrE+VRkzncg5CK1APZfJ8SdRiDuToS40wrE3YUQdzqBXtedEHd6Uq9LT54bvkHIRQZSLjKQfe9bhFxkJOUiIzkX/Qm5yETKRSZyLt4h5CIzKReZybkYSshFFlIuspB94nBCLh4R8A0jCHFnFYh7FCHubAJ+aQwh7uwkzmcnc34cIRc5BLA/gRB3ToG4JxLiziUQ92RC3LkFet1UQtx5SL0uD3luOIOQi7ykXOQl+97ZhFzkI+UiHzkX8wm5yE/KRX5yLhYSclGAlIsC5FwsIeSiICkXBck+8StCLgoJ+IblhLgLC8S9khB3EQG/9DUh7qIkzhclc34tIRfFBLD/HSHu4gJxryfEXUIg7u8JcZcU6HWbCXGXIvW6UuS54Q+EXJQm5aI02ff+SMhFGVIuypBz8TMhF2GkXISRc7GPkAtDyoUh5+IgIRfhpFyEk33iYUIuIgR8wxFC3JECcR8jxB0l4JdOEuKOJnE+msz504RclBXA/llC3OUE4j5PiDtGIO6LhLjLC/S6K4S4HyX1ukfJc8MbhFxUIOWiAtn33iHkoiIpFxXJuUiUDJ+LSqRcVCLnIoSQi8qkXFQm5yI5IRdVSLmoQvaJqQi5qCrgG9IQ4q4mEHc6QtyPCfiljIS4q5M4X53M+SyEXNQQwH5WQtw1BeLOToj7cYG4cxLifkKg1+UhxF2L1OtqkeeGBQi5qE3KRW2y7y1CyMWTpFw8Sc5FCUIuniLl4ilyLsoQclGHlIs65FxEEHJRl5SLumSfGE3IxdMCvqEcIe56AnGXJ8RdX8AvVSTE3YDE+QZkzlch5OIZAexXI8T9rEDc1QlxNxSIuyYh7kYCva4WIe7nSL3uOfLcsA4hF8+TcvE82ffWJ+SiMSkXjdnvbCXkogkpF03Y72wl5KIpKRdN2e9sJeSiGSkXzcg+8UVCLpoL+IZYQtwtBOJuTYj7BQG/9BIh7hdJnH+RzPl2hFy0FMD+q4S4YwXi7kCIu5VA3K8T4m4t0Os6E+JuQ+p1bchzw+6EXMSRchFH9r1vEHLxEikXL7Hf2UrIxcukXLzMfmcrIRdtSbloy35nKyEX7Ui5aEf2iUMIuXhFwDe8R4j7VYG4hxPibi/gl0YS4u5A4nwHMudHE3LxmgD2xxLifl0g7nGEuDsKxD2BEHcngV43iRB3Z1Kv60yeG04l5KILKRddyL53BiEXXUm56Mp+ZyshF91IuejGfmcrIRfdSbnozn5nKyEXPUi56EH2iYsJuegp4BuWEuLuJRD3V4S43xDwSysIcb9J4vybZM6vJuSitwD2vyHE3Ucg7rWEuN8SiPs7QtxvC/S6DYS4+5J6XV/y3HAzIRf9SLnoR/a9PxBy0Z+Ui/7sd7YScjGAlIsB7He2EnIxkJSLgex3thJyMYiUi0Fkn3iAkIt3BHzDb4S43xWI+zAh7sECfukoIe4hJM4PIXP+BCEXQwWwf4oQ93sCcZ8mxD1MIO6zhLiHC/S6C4S43yf1uvfJc8MrhFyMIOViBNn33iDkYiQpFyPZ72wl5GIUKRej2O9sTY7PxQekXHzAfmcrIRejSbkYTfaJyQi5GCPgG1IQ4h4rEHcqQtwfCviltIS4x5E4P47M+QyEXIwXwH4mQtwTBOLOQoj7I4G4sxLinijQ63IQ4p5E6nWTyHPDPIRcTCblYjLZ9xYg5OJjUi4+Zr+zlZCLKaRcTGG/s5WQi6mkXExlv7OVkItppFxMI/vEcEIuPhHwDZGEuKcLxB1NiHuGgF+KIcQ9k8T5mWTOVyDk4lMB7FcixD1LIO4qhLhnC8RdjRD3HIFeV4MQ91xSr5tLnhvWIuRiHikX88i+tw4hF/NJuZjPfmcrIRcLSLlYwH5nKyEXn5Fy8Rn7na2EXHxOysXnZJ/YjJCLhQK+oQUh7kUCcb9IiPsLAb/UihD3YhLnF5M5H0fIxRIB7L9MiHupQNztCHF/KRD3q4S4vxLoda8R4l5G6nXLyHPDzoRcLCflYjnZ93Yn5GIFKRcr2O9sJeRiJSkXK9nvbCXkYhUpF6vY72wl5GI1KReryT5xECEXXwv4hncJcX8jEPcQQtxrBPzSMELca0mcX0vm/AhCLr4VwP4oQtzfCcQ9mhD3OoG4xxLiXi/Q68YT4t5A6nUbyHPDSYRcfE/Kxfdk3zuVkIuNpFxsZL+zlZCLTaRcbGK/s5WQi82kXGxmv7OVkIstpFxsceTi/icJ+Nq34q7dVCyOO1el4pycbiXiK739HlwCvraR8LXtb+Ar7ME+BokvZx4eNKc/kHL6gy+nIb6R2IG1rEH+P5jriIrgnDc6inPespFa542OIZ23Dem8ZTnnDQ8j1S2Wc94I1vW21spvtCHlgdR3aHmIJp03Suu8NB6r4ZfV11m6GW57iUTxzo32solw5wqLf43wi30ceLG2aQv1k2DGdX+ZHJ/k/3OdSQMUQLEgrIu+/9megnjB9snR590BnJqw4t6R4p8JBp33X1p9YvA1O9nxoDndCZyG+qvPg15fcV990DksDrzGH12+NWLX+McU+Nr8RFoq+MmxVGB/Fxr014+bGzbzOouKXGcRketEOw00x0pY5wgOwve/YOC5SpBqHYSNmW+3kUJgN79kjsIHEUmAWPON+/PDKKC5f+DMxS6fadudwpeQ++qxy6d0zu92B2BB/4cHd7rhPtabXUDXvBtcXHSHs0mzi+TAwURp8wPJSf1MclI/kzf1soXic9G2uKsx8H+b5ScJm5ntinNUFL0x/gtwxgistWnnctzYfMlO4Et7Ab6cIvClgwhf9gD5Aqy16SCAmz8IuOkogpu9Lu2zHQVwc46Am30uX+Wz9SUXQV86C9T7AqHeXUT6xK/APgGstekigJuLBNzsF3hQ4hYh7gMCcd8mxH1QIO47hLh/E4j7HiHuQwJxBxHWqA4LxJ2IEPfvAnEnJsR9RCDu5IS4jwrEnYIQ9zGBuFMS4j4uEHdqQtwnBOJOQ4j7pEDcaQlxnxKIOx0h7j8E4n6EEPdpgbizEuI+IxB3NkLcZwXizkGI+5xA3DkJcZ8XiDsXIe4LAnHnJsR9USDuQoS4LwnEXZgQ92WBuIsQ4r4iEHcxQtxXBeIuToj7mkDcJQhxXxeIuyQh7hsCcUcQ4r4pEHckIe5bAnFHEeK+LRB3WULcdwTiLkeI+65A3DGEuO8JxF2eEHdQSvfHXZUQdyKBuKsR4k4sEPdjhLiTCMRdgxB3sEDcNQlxhwjE/Tgh7lCBuJ8gxJ1UIO6nCXEnE4i7HiHu5AJx1yfEnUIg7mcIcacUiPtZQtypBOJuSIg7tUDcjQhxpxGIuzkh7rQCcbcgxJ1OIO4XCHGnF4i7JSHuDAJxxxLizigQdytC3JkE4m5NiDuzQNyvEOLOIhD3q4S4HxGIuz0h7qwCcb9GiDubQNyvE+LOLhB3R0LcOQTi7kSIO6dA3D0JcecSiLsXIe7cAnG/QYg7j0DcvQlx5xWIuw8h7nwCcb9FiDu/QNxvE+IuIBD3O4S4CwrE/S4h7kICcQ8mxF1YIO6hhLiLCMT9HiHuogJxDyPEXUwg7uGEuIsLxD2GEHcJgbjHEuIuKRD3h4S4SwnEPZ4Qd2mBuCcQ4i4jEPdHhLjDBOKeSIjbCMT9CSHucIG4pxPijhCIewYh7kiBuD8lxB0lEPcsQtzRAnHPJsRdViDuOYS4ywnEvZAQd4xA3IsIcZcXiPsLQtyPCsS9hBB3BYG4lxLirigQ95eEuCsJxP0VIe7KAnF/TYi7ikDc3xDirioQ9xpC3NUE4v6WEPdjAnF/R4i7ukDc6whx1xCIez0h7prAuO1fV7Z/Afs33/ns30y0fwfO/k2vs8mDguzfkjpv/Wv/do/9ezGXrOPL1rhijavWuGaNm9awf1PF/n0R+7c27lp/2789Yf8Og/2bBPb7+ZNYI9gaIdYItUZSaySzhv0Oe/t97va7zVNZw37Xt/3ea/sd0Pb7kNNbI4M1MlojkzUyWyOLNex3Btvvz7XfJZvdGva7Ve33jNrv3LTfP5nHGnmtkc8a+a1RwBoF7eu3hv2+QvvdfUWtYb/Lzn6vm/2OM/t9X6WsUdoaZawRZg1jjXBr2O/Est8PZb8rKdoa9ruD7Pfo2O+Usd+v8qj1bwVrVLRGJWtUtkYVu/bWf7Pfx2G/m6K6nQPrX/u9BfYz/Pbz7LWs72pb40lrPGWNOtaoa+fG+m/288/2s8ANrL/tZ2Pt50TtZybt5wefs7573hqNrdHEGk2t0cwa9jN29vNm9rNXL9q5s/61n8uxn1Gxn9doY30XZ42XrPGyNdpao52dU+u/2ff32/e6d7D+tu/9tu+Dtu8Jtu+P7Wx918UaXa3RzRrdrdHDGvY9pPb9lPa9hW/aObf+te87s+/Bsu9H6mt9188a/a0xwBoDrTHIroX13+z7V+x7OYZYf9v3Ntj7/Paet73/+7713QhrjLTGKGt8YI3R1rD3SO39QnvvbJxdK+tfe1/F3mOw19snWd9NtsbH1phijanWmGbX0Ppv9vqsvVY50/rbXruz17HsNR17fWOu9d08a8y3xgJrfGaNz61hrwHY82F7brjYrrH1rz1vsD207SeXWd8tt8YKa6y0xiprrLZrb/0323/YWrzW+tvWJrtP2z3L5u8G67vvrbHRGpussdkaW1IE/eMD7kW03wN+HNiLkvh6UfwP6vyk3BpkDljX+AT6GtEXWCyIA9DuxbkmAfGj4nZx0OftURwPSvsTTATmg8ZcCwdyA8SNQdaC3CTN/fMlxCZZy+VN8h8qnhgcuH3OKiAS1gYm0c5fEl8e7fPm5RReIq9Pek7LPCnQRJ5yu9Oyz8dwWm8IOK2nCE7rTRGn9RTQadUBOi0gbsybntOSaJJ1EqjTCkc6grokp1VXz2lB8/q057TM0wJNpB67iSAcRz2C43hLxHHUAzqO+i5d23nLcxwSzaJ+AnUcEUhlbEByHA30HAc0r894jsM8I9BEnnX72k7RIM7aTl+BtZ1nCU6rn4jTehbotBoCnRYQN6af57QkmmTDBOq0IpGOoBHJaTXSc1rQvD7nOS3znEATeV5hbce+yMTEwB/0GhvrgJ2mmApgb5xAFTMK2dmbkBSziZ5iQvPa1FNM01SgiTRzu2Lac94SQX8SCxl4MPBcJYDxNgcXhOFgmhHWTAaS14rCHuzzfzflNSfEPUhkragZ0GG2AK4VAXFjBnlrRRKi1SKBOt9opEN7geR8X9BzvtC8vug5X/OiQBNp6fZdObvwjF25wQK7ci0JTmuIiNNqCXRasUCnBcSNGeI5LYkmGZtAnVZZpCNoRXJarfScFjSvrT2nZVoLNJE2CrtybQi7cm2ASh7n7cpJgD0ugSpmOWRnf4mkmC/pKSY0ry97imleFmgibRUUsy1BMdsCFbOdp5gSYG+XQBUzBtnZXyEp5it6ignN66ueYppXBZpIewXFbE9QzPZAxezgKaYE2DskUMVsiezsr5EU8zU9xYTm9XVPMc3rAk2ko4JidiQoZkegYnbyFFMC7J0SqGLGIjt7Z5JidtZTTGheu3iKaboINJGuCorZlaCYXYGK2c1TTAmwd0ugitkK2dm7kxSzu55iQvPaw1NM00OgifRUUMyeBMXsCVTMXp5iSoC9VwJVzNbIzv4GSTHf0FNMaF7f9BTTvCnQRHq7/amkL5NznkoaVhwbOMMp9CY8lTRc5Kmk3kBH0wf4VBIQNwZZC1WnpdAk+7i9SSr8MtRbJKf1ls9phQT92YRCg/76Qee7WBCniTJetKtwnUVErtM2IwrX2Twl5zqDsNcZlthxzrdT/vlvX9v0oBOyw2pkltj+pUE+aFMrDjzXjhS4eJ0N8m3HVPT+By0UbwPdWj+gWwsKwpPLrrldqyQiWHrQc/V3eT1svPQnzJQGkAzLAIdhSebgovODztEJgHDF/flp5edyH/Tc5v6BMxcDfYIwKKUvIfcTONBXbOd3g/w0OfQr/JxJ/B/BFe4DlxkIbJiDUmKLiyaSTc77xQTWg/HavZZ2jRnN5B1SM3mHt85s0ltTqZah+FyMdPmrF0dYMX+VHB/3KNLSG9qIvAsUfGCtzSiX48bmSyyBL2ME+LKMwJexInwZDOQLsNZmrABulhNwM14EN0Nc2mfHC+BmNQE3Q1O6X19aE/TlI4F6f0Oo90SRPvEesE8Aa20mCvixNgS+fCzAlzUEvkwR4cswIF+AtTZTBHDzPQE3w12uq3bcGwlxvy8Q9yZC3CME4t5CiHukQNxbGetaAnFvI8T9gUDcPxDiHi0Q905C3GME4v6RsQ4nEPdPhLg/FIh7NyHucQJx/8xYNxSI+xdC3BME4t5DiPsjgbh/Zax7CcS9nxD3JIG4DxDiniwQ92+EuD8WiPsQY51OIO7DhLinCsT9OyHuacC47ScoivqG/bHvBbH3t+29ylXWtdt7ZF9b/9p7EvY663fW8QZr2Gt89nqXvfaz2frbXgux1wXsObI9X9xufbfDGvYcyp5P2N56l/W37TVt32V7EFuP91rf7bOGrVF2v7Z710Hrb5vLNq7tGtvxHrG+O5o86B8flfvAPgE/F1s06K8f1PlJuTXIHLCucbrbH/kqFkQCqMufi7Vjnk6Ie7rIc7HTgTcOzwBulAFxY5C1IDdJ2nOxCk1yhsub5D9UPDE48P5AEs4k3Rk+k3dnuEReP/WclvlUoInMcrvTss/HcFqfCjitWYS4Z4k4rVnAZjQb6LSAuDGzPKcl0SRnJ1CnFY50BHNITmuOntOC5nWu57TMXIEmMo/dRBCOYx7BccwVcRzzgKSc79K1nbme45BoFvMTqOOIQCrjApLjWKDnOKB5/cxzHOYzgSbyudvXduzCM9Z25gus7XxOiHuBiNP6HNiMFgKdFhA3ZoHntCSa5MIE6rQikY5gEclpLdJzWtC8fuE5LfOFQBNZrLC2s5iwZbwYCPYlOmCnKaYC2JckUMWMQnb2pSTFXKqnmNC8fukppvlSoIl85fa1Cfsl7oy1iYUCaxNfEeJeJLI28RWwGS0Drk0AcWMWeWsTEk1yWQJ1WtFIR7Cc5LSW6zktaF5XeE7LrBBoIivd7rTsnx9iOK0lAk5rJSHupSJOayWwGa0COi0gbsxSz2lJNMlVCdRplUU6gtUkp7Vaz2lB8/q157TM1wJN5Bu3O62+pDWtZQJO6xtC3MtFnNY3wGa0Bui0gLgxyz2nJdEk1yRQp1UO6QjWkpzWWj2nBc3rt57TMt8KNJHv3O60viS9wGqVgNP6jhD3ahGn9R2wGa0DOi0gbsxqz2lJNMl1CdRpxSAdwXqS01qv57Sged3gOS2zQaCJfO92p/U2aU1rjYDT+p4Q91oRp/U9sBltBDotIG7MWs9pSTTJjW5vkgpvDNxEclqbeE7L7EwRFPRjCnwT3kwAvf1JDL7OHSlw59qSEtuM0LW2a7KFILhbSbjfSsR9P5Lp2paSa7rCHuxj7PpvI8T9AwkDPxAxwOLDOpf/TisLA+tFft93O7BPA2ttkPlzcmi7j0Oqqww5Qt1/jTuQfV+1UGMFCrXTK1SYGSdQqB+9QoWZ/Uncf40/uX3twP7dKcYcd5eA199F8Hm7SV5/N9Hr23O9nwi5+FkAAz8T4v6FhIFfiBhg8WGjwHyPgYFNIvO9PcD5HrDWZhNpvrdHfL43RcCd7nW76bENz1DGYq/Lm50t9HsZC7sizW4fsNkBa222CYjkPgJufiUZpV8d13r/g94c3QLcHN2Py0Ok7Gxe4E6AA24Xtq9Js/kdAsJ2gNCgdooI20GgsAFrbXYKCNtBAm5+Iwnbb3xhi0YK2yHvPmBzSEDYDpPuSEKDsywSnL974DS/C4DziAg4o5DgPIoLOkIVnEcFwHnM7VOC70hTguMCmzvHCdbuBMnanSBv8B0j5OKkAAZOEuI+RcLAKfIGH4MPuwSmeAwM7BZZGvgDuDQArLXZTdrg+8PBofsfN0+RT3tGz5wWMHpn3G70NpCM3lkBkT9LaPDnSCJ/jmz0zhBycV4AA+cJcV8gYeAC2egx+LBHwOgxMLBXxOhdBBo9YK3NXpLRu8g3ei2RRu+St9xsLgkYvcsiy82xSHBe8cBprgiA86oIOFshwXnNA6e5JgDO6yLghMr6DW/9xtwQAOdNt6/fbCat39wSmLvfIszbbpPm7rfJ6zc3Cbm4I4CBO4S475IwcJe8fsPgw36B9RsGBg6IrN/cA67fAGttDpDWb+6Jrd8EpYJdl+xDGsAc0K4xUSqXGz3b5I0kNLpDAg9p2MVBx31YpMEnxgHTAGttDgsYg8QE3CRJxRG2JKnoD2lA136DPWEzwQLCFqIgbKMIwnZUQNhCCA3qmIiwhQKFDVhrc0xA2EIJuElKErakdGEzYUhhSwbMg6qwJRMQtuSpOH0ODU7oOx9SeOA0KQTAmVIDnGFxSHCmwgUtu6mZSgCcqd0+JdhO2tRMk8r91i4NwdqlJVk7+7x5SSC1p0epCblIJ4CBdIS405MwkJ6IARYfTgpM8RgYOCWyNJABuDQArLU5RdrUzJCKvamJnSJn9IyeyShg9DK53ejtIBm9zAIin5nQ4LOQRD4L2ehlIuTiEQEMPEKIOysJA1nJRo/BhzMCRo+BgbMiRi8b0OgBa23OkoxeNr7Ri0QavezecrPJLmD0cojshUBfdpfTA6fJKQDOXCLghL6gJ7cHTpNbAJx5RMAJlfW83vqNySsAznxuX7/ZRVq/yS8wd89PmLcVIM3dC5DXb/IRclFQAAMFCXEXImGgEHn9hsGHCwLrNwwMXBRZvykMXL8B1tpcJK3fFBZbvyniPaRhiggYvaIKD2mMIzykcUXgIY2ihAZ/VaTBFwM2eGCtzVUBY1CMgJviJHNYnP+QBnTtt4QnbKaEgLCVVBC28QRhuyEgbCUJDeqmiLCVAgobsNbmpoCwlSLgpjRJ2ErzhQ36vpgy3r6RKSMgbGEi+0bQdz4YD5zGCIAzXAScMUhwRnibmiZCAJyRbp8S7CVtakYJbGhFEaxdNMnaRZM3NSMJuSgrgIGyhLjLkTBQjrypyeDDHYEpHgMDd0WWBmKASwPAWpu7pE3NGP6mJnSKXN4zeqa8gNF71O1Gbx/J6FUQEPkKhAZfkSTyFclG71FCLioJYKASIe7KJAxUJhs9Bh8SlUiYGEhcAi9OQUF4o1cFaPSAtTbI/Dk5VIVv9NogjV5Vb7nZVBUwetVElpuhL7t7zAOneUwAnNU1wBkOfUFPDQ+cpoYAOGuKdE6orD/urd+YxwXA+YTb128OktZvagnM3WsR5m21SXP32uT1mycIuXhSAANPEuJ+ioSBp8jrNww+hAis3zAwECqyflMHuH4DrLUJJa3f1BFbv6nrPaRh6goYvacVHtL4mPCQRnKXN3jb3DxNaPApRBp8PWCDB9bapBAwBvUIuKlPMof1+Q9pQNd+G3jCZhoICNszCsI2hSBsqQWE7RlCg0ojImzPAoUNWGuTRkDYniXgpiFJ2BrShS0c+r6YRt6+kWkkIGzPiWxqQt/58LwHTvO8ADgbi4AzAgnOJt6mpmkiAM6mbp8SHCFtajYT2NBqRrB2zUnWrjl5U7MpIRctBDDQghD3CyQMvEDe1GTwIb3AFI+BgQwiSwMvApcGgLU2GUibmi/SNzWxU+SWntEzLQWMXqzbjd5RktFrJSDyrQgNvjVJ5FuTjV4sIRdtBDDQhhB3HAkDcWSjx+BDZgGjx8BAFhGj9xLQ6AFrbbKQjN5LRA6dIGnpywJ99GUCh9qS+mhbMgZsPU0MPm9/4OShnQCe2hHw9AoJT6+QdZnBrWwCuszAQHYRXX4VqMvAWpvsJF1+1cch++8iQX/9oGuGxmuOUPdfY3tk31ct1FiBQnXwChVmxgkU6jWvUGFmfxL3X+PrCvfgvk7wOx0FvH5HQtydSF6/E9Hrn/XNHdG56CyAgc4EDHQhYaALeb7H4EMugfkeAwO5ReZ7XYHzPWCtTW7SfK+r+HxvioA77aZgeroRSJ/P5c1uXwqO0OcXaXbdgc0OWGuTX0AkuxP40oNklHr4rlW1yWdJ6v5r7On2Jn+eNKsp5HKy2uLWk0DWwiJNvhewyQNrbQoLNPleBNy8QWryb4g3+ewCTf5Nb505zOQUKFRvr1DWmoFAofoozI37EGTgLYHF4LcIcb9Nkj/7vMlIIL1Ess59BTDQl4CBfiQM9CNigMWHYgI2mIGB4iLTp/7A6ROw1qY4aUOgv49DqqYnv4DpGaBgegYQSD9QQPAGEuIeRBK8QcQd8Msk0/OOAAbeIWDgXRIG3iXfBcHgQykB08PAQGkR0zMYaHqAtTalSaZnsPhdEIUFTM8QBdMzhED6oQKCN5QQ93skwXuPKHhXSKZnmAAGhhEwMJyEgeFk08PggxEwPQwMhIuYnveBpgdYaxNOMj3vi5ue4gKmZ4SC6RlBIP1IAcEbSYh7FEnwRhEF7yrJ9HwggIEPCBgYTcLAaLLpYfAhSsD0MDAQLWJ6xgBND7DWJppkesaIm57SAqZnrILpGUsg/YcCgvchIe5xJMEbRxS8ayTTM14AA+MJGJhAwsAEsulh8CFGwPQwMFBexPR8BDQ9wFqb8iTT85G46QkXMD0TFUzPRALpJwkI3iRC3JNJgjeZKHg3SabnYwEMfEzAwBQSBqaQTQ+DDxUFTA8DA5VETM9UoOkB1tpUIpmeqeKmJ0bA9EzzHrMLM48KFOqTVJwmFZQYeqEmDPnjPNOBQauCc3oq91/jDA1whrVBgnMmLugIVXDOFADnpwrz+k8JvnaWwJxuFiHu2aQ53WzinO4uaV4/RwADcwgYmEvCwFzyvJ7Bh6oC83oGBqqJzOvnAef1wFqbaqR5/TwHh+5/3Gz05uPqE6lq9OYLGL0FCkZvAaHR1XB5gz9EektrTZEG/xmwwQNrbWoKGIPPCHz5nGQOP3dc6/0PWNjikMK20BM2s1BA2BYpCNsiAlFrubxBHSYJW20RYfsCKGzAWpvaAsL2BYEvi0nCtpgubCYSKWxLvH0js0RA2JaKbGpGIcH5pQdO86UAOL9KiJuay3BBl1MF5zIBcC5XmBIsJ1icFQIbWisIca8kWbuVqXhv3E1Cmh6tEsDAKgIGVpMwsDoV963LDD7UEZjiMTBQV2Rp4Gvg0gCw1qYuaVPzaweH7n/cPEX+xrt7zXwjYPTWKBi9NYRGt1ZA5NcS4v6WJPLfEu9cCiYZve8EMPAdAQPrSBhYR757jcGH+gJGj4GBBiJGbz3Q6AFrbRqQjN56+t1r2OXmDZ7RMxsEjN73Ckbve0Kj2ygg8hsJcW8iifwmosiHkIzeZgEMbCZgYAsJA1vIRo/Bh4YCRo+BgUYiRm8r0OgBa20akYzeVr7Ri0YavW2e0TPbBIzeDwpG7wdCo9suIPLbCXHvIIn8DqLIh5KM3k4BDOwkYOBHEgZ+JBs9Bh8aCxg9BgaaiBi9n4BGD1hr04Rk9H7iG72ySKO3yzN6ZpeA0dutYPR2ExrdzwIi/zMh7l9IIv8LUeSTkozeHgEM7CFgYC8JA3vJRo/Bh+YCRo+BgRYiRm8f0OgBa21akIzePr7RK4c0er96Rs/8KmD09isYvf2ERndAQOQPEOI+SBL5g0SRT0Yyer8JYOA3AgYOkTBwiGz0GHxoKWD0GBiIFTF6h4FGD1hrE0syeof5Rq8V0uj97j0Sbn4XMHpHUnH4jgZnayQ4j3rgNEcFwHlMBJzQ9xUc98BpjguA84QIOKGyftJbvzEnBcB5SmH95hRh/vKHwNz9D0Lcp0lz99PEuXsq0vrNGQEMnCFg4CwJA2fJ6zcMPrQRWL9hYCBOZP3mHHD9BlhrE0davzkntn5zHlcf2RcpnxcwehcUjN4FQqNr6/IGf4JkbtqJNPiLwAYPrLVpJ2AMLhL4colkDi85rvX+x81rv5c9YTOXBYTtioKwXSEQtb3LG9RJkrB1EBG2q0BhA9badBAQtqsEvlwjCds1urCFhyOF7bq3b2SuCwjbDY19o/AIJDhveuA0NwXAeSshbmrexgUt+wsBtwXAeUdhSnCHYHHuCmxo3SXEfY9k7ezzst4On540PQpK7X4M2NeIjjtRag4G7PMyfyGAwYeOAlM8BgY6iSwNJMZh1QBrbTqRNjUTp2b/QgB2ipwEVx/Zu9eSpHb/NQanFjB6wYRGFyIg8iGEuENJIm+fNy8JpBlIRi+pAAaSEjCQjISBZEQMsPjQVcDoMTDQTcToJQcaPWCtTTeS0Uvu4ND9j5uXm1N4Rs+kEDB6KRWMXkpCo0slIPKpCHGnJol8aqLIZyQZvTQCGEhDwEBaEgbSko0egw89BYweAwO9RIxeOqDRA9ba9CIZvXR8owf9zc/0ntEz6QWMXgYFo5eB0OgyCoh8RkLcmUgin4ko8plIRi+zAAYyEzCQhYSBLGSjx+BDbwGjx8BAHxGj9wjQ6AFrbfqQjN4jfKMH/c3PrJ7RM1kFjF42BaOXjdDosguIfHZC3DlIIp+DKPKZSUYvpwAGchIwkIuEgVxko8fgQ18Bo8fAQD8Ro5cbaPSAtTb9SEYvN9/oQX/zM49n9EweAaOXV8Ho5SU0unwCIp+PEHd+ksjnJ4p8FpLRKyCAgQIEDBQkYaAg2egx+DBQwOgxMDBIxOgVAho9YK3NIJLRK8Q3ei2RRq8wsJeoGr3CAkavSGoO39HgjEWCs6gHTlNUAJzFRMAJfV9BcQ+cprgAOEuIgBMq6yW99RtTUgCcpRTWb0oR5i+lBebupQlxlyHN3csQ5+7ZSes3YQIYCCNgwJAwYMjrNww+DBZYv2FgYIjI+k04cP0GWGszhLR+Ey62fhOBq4/si5QjBIxepILRiyQ0umEub/DnSOZmuEiDjwI2eGCtzXABYxBF4Es0yRxGO671/sfNa79lPWEzZQWErZyCsJUjEHWkyxvUeZKwjRIRthigsAFrbUYJCFsMgS/lScJWni5sEWFIYXvU2zcyjwoIWwWNfaMIgwRnRQ+cpqIAOCslxE3NyrigZX8hoLIAOKsoTAmqECxOVYENraqEuKuRrJ19Xtbb4fOQpkePCWDgMQIGqpMwUD019xcCGHwYIzDFY2BgrMjSQA3g0gCw1mYsaVOzRmr2LwRgp8g1vbvXTE0Bo/e4gtF7nNDonhAQ+ScIcdciiXwt4p1LeUlGr7YABmoTMPAkCQNPku9eY/BhvIDRY2BggojRewpo9IC1NhNIRu8p+t1r2OXmOp7RM3UEjF5dBaNXl9DonhYQ+acJcdcjiXw9osjnIxm9+gIYqE/AQAMSBhqQjR6DD5MEjB4DA5NFjN4zQKMHrLWZTDJ6z/CNHvQ3P5/1jJ55VsDoNVQweg0Jja6RgMg3IsT9HEnknyOKfH6S0XteAAPPEzDQmISBxmSjx+DDVAGjx8DANBGj1wRo9IC1NtNIRq8J3+hBf/OzqWf0TFMBo9dMweg1IzS65gIi35wQdwuSyLcginwBktF7QQADLxAw8CIJAy+SjR6DDzMEjB4DAzNFjF5LoNED1trMJBm9lnyjB/3Nz1jP6JlYAaPXSsHotSI0utYCIt+aEHcbksi3IYp8QZLRixPAQBwBAy+RMPAS2egx+DBbwOgxMDBHxOi9DDR6wFqbOSSj9zLf6JVDGr223iPhpq2A0WuXmsN3NDhjkOB8xQOneUUAnK+KgBP6voL2HjhNewFwdhABJ1TWX/PWb8xrAuB8XWH95nXC/KWjwNy9IyHuTqS5eyfi3L0oaf2mswAGOhMw0IWEgS7k9RsGH+YLrN8wMLBAZP2mK3D9Blhrs4C0ftNVbP2mG64+si9S7iZg9LorGL3uhEa30OUN/irJ3CwSafA9gA0eWGuzSMAY9CDwpSfJHPZ0XOv9j5vXfnt5wmZ6CQjbGwrC9gaBqEtc3qCukYRtqYiwvQkUNmCtzVIBYXuTwJfeJGHrzRe2Nkhh6+PtG5k+AsL2lsi+URwSnG974DRvC4Czb0Lc1OyHC1r2FwL6CYCzv8KUoD/B4gwQ2NAaQIh7IMna2edlvR2+FGl6NEgAA4MIGHiHhIF3UnN/IYDBh2UCUzwGBpaLLA28C1waANbaLCdtar6bmv4LAdAp8mDv7jUzWMDoDVEwekMIjW6ogMgPJcT9Hknk3yPeuVSaZPSGCWBgGAEDw0kYGE6+e43Bh1UCRo+BgdUiRu99oNED1tqsJhm99/l3r0GXm0d4Rs+MEDB6IxWM3khCoxslIPKjCHF/QBL5D4giX4Zk9EYLYGA0AQNjSBgYQzZ6DD6sETB6DAysFTF6Y4FGD1hrs5Zk9MbSjV4k9Dc/P/SMnvlQwOiNUzB64wiNbryAyI8nxD2BJPITiCIfRjJ6Hwlg4CMCBiaSMDCRbPQYfFgnYPQYGFgvYvQmAY0esNZmPcnoTeIbPehvfk72jJ6ZLGD0PlYweh8TGt0UAZGfQoh7KknkpxJF3pCM3jQBDEwjYOATEgY+IRs9Bh82Chg9BgY2iRi96UCjB6y12UQyetP5Rg/6m58zPKNnZggYvZkKRm8modF9KiDynxLinkUS+VlEkQ8nGb3ZAhiYTcDAHBIG5pCNHoMPWwWMHgMD20SM3lyg0QPW2mwjGb25fKMXjTR687xHws08AaM3PzWH72hwlkWCc4EHTrNAAJyfiYAT+r6Czz1wms8FwLlQBJxQWV/krd+YRQLg/EJh/eYLwvxlscDcfTHjvYKkufsS4tw9mvWuQQEMLCVg4EsSBr4kr98w+LBDYP2GgYGdIus3XwHXb4C1NjtJ6zdfia3fLMPVR/ZFyssEjN5yBaO3nNDodrm8wd8hmZvdIg1+BbDBA2ttdgsYgxUEvqwkmcOVjmu9/3Hz2u8qT9jMKgFhW60gbKsJRN3j8gZ1lyRse0WE7WugsAFrbfYKCNvXBL58QxK2b/jC1gopbGu8fSOzRkDY1orsG7VGgvNbD5zmWwFwfpcQNzXX4YKW/YWAdQLgXK8wJVhPsDgbBDa0NhDi/p5k7ezzst4O/yhperRRAAMbGU+ekTCwKTX3FwIYfNgvMMVjYOCAyNLAZuDSALDW5gBpU3NzavYvBGCnyFu8u9fMFgGjt1XB6G1lPH0jIPLbCHH/QBL5H4h3LlUgGb3tAhjYzrhji4SBHeS71xh8OCRg9BgYOCxi9HYCjR6w1uYwyejt5N+9Bl1u/tEzeuZHAaP3k4LR+4lx95qAyO8ixL2bJPK7iSJfkWT0fhbAwM8EDPxCwsAvZKPH4MNRAaPHwMAxEaO3B2j0gLU2x0hGbw/f6EF/83OvZ/TMXgGjt0/B6O0jNLpfBUT+V8ZWFUnk9xNFvhLJ6B0QwMABAgYOkjBwkGz0GHw4KWD0GBg4JWL0fgMaPWCtzSmS0fuNb/Sgv/l5yDN65pCA0TusYPQOExrd7wIi/zsh7iMkkT9CFPnKJKN3VAADRxmrOSQMHCMbPQYfzggYPQYGzooYveNAowestTlLMnrH6UYvCvqbnyc8o2dOCBi9kwpG7yRjRisg8qcIcf9BEvk/iCJfhWT0Tgtg4DTD3JAwcIZs9Bh8uCBg9BgYuChi9M4CjR6w1uYiyeid5Ru9SKTRO+c9Em7OCRi986k5fEeDMwoJzgseOM0FAXBeFAEn9H0FlzxwmksC4LwsAk6orF/x1m/MFQFwXlVYv7lKmL9cE5i7XyPEfZ00d79OnLtXJ63f3BDAwA0CBm6SMHCTvH7D4MMVgfUbBgauiqzf3AKu3wBrba6S1m9uia3f3MbVR/ZFyrcFjN4dBaN3h9Dobri8wQen5JibmyIN/i6wwQNrbW4KGIO7BL7cI5nDe45rvf9x89pvUBpP2IA5oF1jojQCwmZfJJqod1zeoEJIwnZXRNgSpwG6N6Cw3RUQtsQEviRJwxG2JGnowtYSKWzBwDyoCluwgLCFpOH0OTQ4Y5HgDPXAaUIFwJlUBJzQta5kuKBlfyEgmQA4kytMCZITLE6KNO63dikIcackWTv7vKy3w9cibWqmEsBAKgIGUpMwkDoN9xcCGHxIVDJhYiBxSbw4BQXhlwbSAJcGgLU2yPw5OZQmDfsXArBT5LS4+sjevZZWwOilUzB66QiNLr2AyKcnxJ2BJPL2efOSQFqbZPQyCmAgIwEDmUgYyETEAIsPIQJGj4GBUBGjlxlo9IC1NqEko5fZwaH7HzcvN2fxjJ7JImD0HlEweo8QGl1WAZHPSog7G0nksxFF/kmS0csugIHsBAzkIGEgB9noMfiQXMDoMTCQQsTo5QQaPWCtTQqS0cvJN3rQ3/zM5Rk9k0vA6OVWMHq5CY0uj4DI5yHEnZck8nmJIv8UyejlE8BAPgIG8pMwkJ9s9Bh8SC1g9BgYSCNi9AoAjR6w1iYNyegV4Bs96G9+FvSMnikoYPQKKRi9QoRGV1hA5AsT4i5CEvkiRJGvQzJ6RQUwUJSAgWIkDBQjGz0GH9ILGD0GBjKIGL3iQKMHrLXJQDJ6xflGD/qbnyU8o2dKCBi9kgpGrySh0ZUSEPlShLhLk0S+NFHk65KMXhkBDJQhYCCMhIEwstFj8CGzgNFjYCCLiNEzQKMHrLXJQjJ6hm70osORRi/ceyTchAsYvYg0HL6jwRmBBGekB04TKQDOKBFwQt9XEO2B00QLgLOsCDihsl7OW78x5QTAGaOwfhNDmL+UF5i7lyfE/Shp7v4oce7egLR+U0EAAxUIGKhIwkBF8voNgw/ZBNZvGBjILrJ+Uwm4fgOstclOWr+pJLZ+UxlXH9kXKVcWMHpVFIxeFUKjy+XyBp+S9CLl3CINviqwwQNrbXILGIOqBL5UI5nDao5rvf9x89rvY56wmccEhK26grBVJxA1n8sbVCqSsOUXEbYaQGED1trkFxC2GgS+1CQJW02+sJVDCtvj3r6ReVxA2J4Q2TeKQYKzlgdOU0sAnLUT4qbmk7igZX8h4EkBcD6lMCV4imBx6ghsaNUhxF2XZO3s87LeDv8caVPzaQEMPE3AQD0SBuql4f5CAIMPhQSmeAwMFBZZGqgPXBoA1toUJm1q1k/D/oUA7BS5gXf3mmkgYPSeUTB6zxAa3bMCIv8sIe6GJJFvSLxz6XmS0WskgIFGBAw8R8LAc+S71xh8KCZg9BgYKC5i9J4HGj1grU1xktF7nn/3GnS5ubFn9ExjAaPXRMHoNSE0uqYCIt+UEHczksg3I4p8Y5LRay6AgeYEDLQgYaAF2egx+FBKwOgxMFBaxOi9ADR6wFqb0iSj9wLf6EF/8/NFz+iZFwWMXksFo9eS0OhiBUQ+lhB3K5LItyKKfBOS0WstgIHWBAy0IWGgDdnoMfhgBIweAwPhIkYvDmj0gLU24SSjF8c3etDf/HzJM3rmJQGj97KC0XuZ0OjaCoh8W0Lc7Ugi344o8k1JRu8VAQy8QsDAqyQMvEo2egw+RAkYPQYGokWMXnug0QPW2kSTjF57vtGD/uZnB8/omQ4CRu81BaP3GqHRvS4g8q8T4u5IEvmORJFvRjJ6nQQw0ImAgc4kDHQmGz0GH2IEjB4DA+VFjF4XoNED1tqUJxm9LnSjVzYMafS6eo+Em64CRq9bGg7f0eA0SHB298BpuguAs4cIOKHvK+jpgdP0FABnLxFwQmX9DW/9xrwhAM43FdZv3iTMX3oLzN17E+LuQ5q79yHO3V8krd+8JYCBtwgYeJuEgbfJ6zcMPlQUWL9hYKCSyPpNX+D6DbDWphJp/aav2PpNP1x9ZF+k3E/A6PVXMHr9CY2uqssbfAbSi5SriTT4AcAGD6y1qSZgDAYQ+DKQZA4HOq71/sfNa7+DPGEzgwSE7R0FYXuHQNQaLm9QGUnCVlNE2N4FChuw1qamgLC9S+DLYJKwDeYLWzRS2IZ4+0ZmiICwDRXZNyqLBOd7HjjNewLgHJYQNzWH44KW/YWA4QLgfF9hSvA+weKMENjQGkGIeyTJ2tnnZb0dvg1pU3OUAAZGETDwAQkDH6Th/kIAgw+1BKZ4DAzUFlkaGA1cGgDW2tQmbWqOTsP+hQDsFHmMd/eaGSNg9MYqGL2xhEb3oYDIf0iIexxJ5McR71yKIxm98QIYGE/AwAQSBiaQ715j8KGOgNFjYKCuiNH7CGj0gLU2dUlG7yP+3WvQ5eaJntEzEwWM3iQFozeJ0OgmC4j8ZELcH5NE/mOiyL9EMnpTBDAwhYCBqSQMTCUbPQYf6gsYPQYGGogYvWlAowestWlAMnrT+EYP+pufn3hGz3wiYPSmKxi96YRGN0NA5GcQ4p5JEvmZRJF/mWT0PhXAwKcEDMwiYWAW2egx+NBQwOgxMNBIxOjNBho9YK1NI5LRm803etDf/JzjGT0zR8DozVUwenMJjW6egMjPI8Q9nyTy84ki35Zk9BYIYGABAQOfkTDwGdnoMfjQWMDoMTDQRMTofQ40esBamyYko/c53+hBf/NzoWf0zEIBo7dIwegtIjS6LwRE/gtC3ItJIr+YKPLtSEZviQAGlhAwsJSEgaVko8fgQ3MBo8fAQAsRo/cl0OgBa21akIzel3yj1wZp9L7yHgk3XwkYvWVpOHxHgzMOCc7lHjjNcgFwrtAAZzno+wpWeuA0KwXAuUqkc0JlfbW3fmNWC4Dza4X1m68J85dvBObu3xDiXkOau68hzt07kNZv1gpgYC0BA9+SMPAtef2GwYeWAus3DAzEiqzffAdcvwHW2sSS1m++E1u/WYerj+yLlNcJGL31CkZvPaHRtXF5g89GepFynEiD3wBs8MBamzgBY7CBwJfvSebwe8e13v+4ee13oydsZqOAsG1SELZNBKK2dXmDyk4StnYiwrYZKGzAWpt2AsK2mcCXLSRh20IXtnKRSGHb6u0bma0CwrZNZFMzCgnOHzxwmh8EwLk9IW5q7sAFLfsLATsEwLlTYUqwk2BxfhTY0PqREPdPJGtnn5f1dvjOpE3NXQIY2EXAwG4SBnan4f5CAIMP7QWmeAwMdBBZGvgZuDQArLXpQNrU/DkN+xcCsFPkX7y718wvAkZvj4LR20NodHsFRH4vIe59JJHfR7xzqQvJ6P0qgIFfCRjYT8LAfvLdaww+dBQwegwMdBIxegeARg9Ya9OJZPQO0O9ewy43H/SMnjkoYPR+UzB6vxEa3SEBkT9EiPswSeQPE0W+K8no/S6Agd8JGDhCwsARstFj8KGrgNFjYKCbiNE7CjR6wFqbbiSjd5Rv9KC/+XnMM3rmmIDRO65g9I4TGt0JAZE/QYj7JEnkTxJFvhvJ6J0SwMApAgb+IGHgD7LRY/Chp4DRY2Cgl4jROw00esBam14ko3eab/Sgv/l5xjN65oyA0TurYPTOEhrdOQGRP0eI+zxJ5M8TRb47yehdEMDABQIGLpIwcJFs9Bh86C1g9BgY6CNi9C4BjR6w1qYPyehd4hs96G9+XvaMnrksYPSuKBi9K4RGd1VA5K8S4r5GEvlrRJHvQTJ61wUwcJ2AgRskDNwgGz0GH/oKGD0GBvqJGL2bQKMHrLXpRzJ6N/lGrxXS6N3yHgk3twSM3u00HL6jwdkaCc47HjjNHQFw3hUBJ/R9Bfc8cJp7AuAMSqsBTqisJ8IFLbt+kyit+68xMfoaGes39kWi5y9JwIEz5m1JCHEHA+N2zjvs8+YlgfRN0vpNiAAGQggYCCVhIDQtd/2GwYeBAus3DAwMElm/SYrDqgHW2gwird8kTau1fpMMVx/ZFyknEzB6yRWMXnJCoxvs8gafl/Qi5SEiDT4FsMEDa22GCBiDFAS+pCSZw5SOa73/cfPabypP2EwqAWFLrSBsqQlEHebyBpWPJGzDRYQtDVDYgLU2wwWELQ2BL2lJwpaWLmwx4UhhSwfMg6qwpRMQtvQa+0YxEUhwZvDAaTIIgDNjQtzUzIQLWvYXAjIJgDOzwpQgM8HiZBHY0MpCiPsRkrWzz8t6O3xf0qZmVgEMZCVgIBsJA9nScn8hgMGHkQJTPAYGRoksDWQHLg0Aa21GkTY1s6dl/0IAdoqcw7t7zeQQMHo5FYxeTkKjyyUg8rkIcecmiXxu4p1L/UhGL48ABvIQMJCXhIG85LvXGHwYI2D0GBgYK2L08gGNHrDWZizJ6OWj372GXW7O7xk9k1/A6BVQMHoFCI2uoIDIFyTEXYgk8oWIIt+fZPQKC2CgMAEDRUgYKEI2egw+jBcwegwMTBAxekWBRg9YazOBZPSK8o0e9Dc/i3lGzxQTMHrFFYxecUKjKyEg8iUIcZckiXxJosgPIBm9UgIYKEXAQGkSBkqTjR6DD5MEjB4DA5NFjF4ZoNED1tpMJhm9MnyjB/3NzzDP6JkwAaNnFIyeITS6cAGRDyfEHUES+QiiyA8kGb1IAQxEEjAQRcJAFNnoMfgwVcDoMTAwTcToRQONHrDWZhrJ6EXzjR70Nz/LekbPlBUweuUUjF45QqOLERD5GELc5UkiX54o8oNIRu9RAQw8SsBABRIGKpCNHoMPMwSMHgMDM0WMXkWg0QPW2swkGb2KfKPXEmn0KnmPhJtKAkavcloO39HgjEWCs4oHTlNFAJxVRcAJfV9BNQ+cppoAOB8TASdU1qt76zemugA4ayis39QgzF9qCszdaxLifpw0d3+cOHcfQlq/eUIAA08QMFCLhIFa5PUbBh9mC6zfMDAwR2T9pjZw/QZYazOHtH5TW2z95klcfWRfpPykgNF7SsHoPUVodPNd3uCLkF6kvECkwdcBNnhgrc0CAWNQh8CXuiRzWNdxrfc/bl77fdoTNvO0gLDVUxC2egSiLnR5gypKErZFIsJWHyhswFqbRQLCVp/AlwYkYWtAF7aWYUhhe8bbNzLPCAjbsxr7Ri0NEpwNPXCahgLgbJQQNzWfwwUt+wsBzwmA83mFKcHzBIvTWGBDqzEh7iYka2efl/V2+PdJm5pNBTDQlICBZiQMNEvL/YUABh+WCEzxGBhYKrI00By4NACstVlK2tRsnpb9CwHYKXIL7+4100LA6L2gYPReIDS6FwVE/kVC3C1JIt+SeOfSCJLRixXAQCwBA61IGGhFvnuNwYdlAkaPgYHlIkavNdDoAWttlpOMXmv63WvY5eY2ntEzbQSMXpyC0YsjNLqXBET+JULcL5NE/mWiyI8kGb22AhhoS8BAOxIG2pGNHoMPqwSMHgMDq0WM3itAowestVlNMnqv8I0e9Dc/X/WMnnlVwOi1VzB67QmNroOAyHcgxP0aSeRfI4r8KJLRe10AA68TMNCRhIGOZKPH4MMaAaPHwMBaEaPXCWj0gLU2a0lGrxPf6EF/87OzZ/RMZwGj10XB6HUhNLquAiLflRB3N5LIdyOK/Acko9ddAAPdCRjoQcJAD7LRY/BhnYDRY2BgvYjR6wk0esBam/Uko9eTb/Sgv/nZyzN6ppeA0XtDwei9QWh0bwqI/JuEuHuTRL43UeRHk4xeHwEM9CFg4C0SBt4iGz0GHzYKGD0GBjaJGL23gUYPWGuziWT03uYbvXJIo9fXeyTc9BUwev3ScviOBmcMEpz9PXCa/gLgHCACTuj7CgZ64DQDBcA5SAScUFl/x1u/Me8IgPNdhfWbdwnzl8ECc/fBhLiHkObuQ4hz93Gk9ZuhAhgYSsDAeyQMvEdev2HwYavA+g0DA9tE1m+GAddvgLU220jrN8PE1m+G4+oj+yLl4QJG730Fo/c+odHtcHmDL016kfJOkQY/AtjggbU2OwWMwQgCX0aSzOFIx7Xe/7h57XeUJ2xmlICwfaAgbB8QiLrL5Q2qDEnYdosI22igsAFrbXYLCNtoAl/GkIRtDF/Y2iCFbay3b2TGCgjbhyL7RnFIcI7zwGnGCYBzfELc1JyAC1r2FwImCIDzI4UpwUcEizNRYENrIiHuSSRrZ5+X9Xb4SaRNzckCGJhMwMDHJAx8nJb7CwEMPuwRmOIxMLBXZGlgCnBpAFhrs5e0qTklLf0XAqBT5Kne3WtmqoDRm6Zg9KYRGt0nAiL/CSHu6SSRn068c2kyyejNEMDADAIGZpIwMJN89xqDD/sFjB4DAwdEjN6nQKMHrLU5QDJ6n/LvXoMuN8/yjJ6ZJWD0ZisYvdmERjdHQOTnEOKeSxL5uUSR/5hk9OYJYGAeAQPzSRiYTzZ6DD4cEjB6DAwcFjF6C4BGD1hrc5hk9BbQjV4s9Dc/P/OMnvlMwOh9rmD0Pic0uoUCIr+QEPciksgvIor8FJLR+0IAA18QMLCYhIHFZKPH4MNRAaPHwMAxEaO3BGj0gLU2x0hGbwnf6EF/83OpZ/TMUgGj96WC0fuS0Oi+EhD5rwhxLyOJ/DKiyE8lGb3lAhhYTsDAChIGVpCNHoMPJwWMHgMDp0SM3kqg0QPW2pwiGb2VfKMH/c3PVZ7RM6sEjN5qBaO3mtDovhYQ+a8JcX9DEvlviCI/jWT01ghgYA0BA2tJGFhLNnoMPpwRMHoMDJwVMXrfAo0esNbmLMnofcs3etFIo/ed90i4+U7A6K1Ly+E7GpxlkeBc74HTrBcA5wYRcELfV/C9B07zvQA4N4qAEyrrm7z1G7NJAJybFdZvNhPmL1sE5u5bCHFvJc3dtxLn7jNJ6zfbBDCwjYCBH0gY+IG8fsPgwwWB9RsGBi6KrN9sB67fAGttLpLWb7aLrd/swNVH9kXKOwSM3k4Fo7eT0OiuuLzBR5FepHxVpMH/CGzwwFqbqwLG4EcCX34imcOfHNd6/+Pmtd9dnrCZXQLCtltB2HYTiHrD5Q0qmiRsN0WE7WegsAFrbW4KCNvPBL78QhK2X/jC1gopbHu8fSOzR0DY9orsG7VGgnOfB06zTwCcvybETc39uKBlfyFgvwA4DyhMCQ4QLM5BgQ2tg4S4fyNZO/u8rLfDzyVtah4SwMAhxrukSBg4nJb7CwEMPtwRmOIxMHBXZGngd+DSALDW5i5pU/P3tOxfCMBOkY94d6+ZIwJG76iC0TvKeJ+OgMgfI8R9nCTyx4l3Ls0jGb0TAhg4wXi1AgkDJ8l3rzH4kKhUwsRA4lJ4cQoKwhu9U0CjB6y1QebPyaFT/LvXoMvNf3hGz/whYPROKxi904zHywVE/gzj8XKSyJ8livx8ktE7J4CBcwQMnCdh4DzZ6DH4ECJg9BgYCBUxeheARg9YaxNKMnoX+EYP+pufFz2jZy4KGL1LCkbvEqHRXRYQ+cuMxzNIIn+FKPILSEbvqgAGrhIwcI2EgWtko8fgQ3IBo8fAQAoRo3cdaPSAtTYpSEbvOt/oQX/z84Zn9MwNAaN3U8Ho3SQ0ulsCIn+LEPdtksjfJor8ZySjd0cAA3cY92eRMHCXbPQYfEgtYPQYGEgjYvTuAY0esNYmDcno3aMbvVbQ3/wMSucZPWAOaNeYKJ2A0bMvEn6PSjr3N/jEhLiTpOM0KPu8eUkg/Zxk9IIFMBBMwEAICQMh6bhGj8GH9AJGj4GBDCJGLxSHVQOstclAMnqh6ehGLxJp9JICe4mq0UsqYPSSpePwHQ3OKCQ4k3vgNMkFwJlCBJzQ9xWk9MBpUgqAM5UIOKGyntpbvzGpBcCZRmH9Jg1h/pJWYO6elhB3OtLcPR1x7r6YtH6TXgAD6RlzdxIGMpDXbxh8yCywfsPAQBaR9ZuMwPUbYK1NFtL6TUax9ZtMuPrIvkg5k4DRy6xg9DITGl02lzf4CqQXKWcXafBZgA0eWGuTXcAYZCHw5RGSOXzEca33P25e+83qCZvJKiBs2RSELRuBqLlc3qAqkoQtt4iwZQcKG7DWJreAsGUn8CUHSdhy8IWtJVLYcnr7RiangLDlEtk3ikWCM7cHTpNbAJx5EuKmZl5c0LK/EJBXAJz5FKYE+QgWJ7/AhlZ+QtwFSNbOPi/r7fDLSJuaBQUwUJCAgUIkDBRKx/2FAAYf8glM8RgYyC+yNFAYuDQArLXJT9rULJyO/QsB2ClyEe/uNVNEwOgVVTB6RQmNrpiAyBcjxF2cJPLFiXcuLScZvRICGChBwEBJEgZKku9eY/ChkIDRY2CgsIjRKwU0esBam8Iko1eKf/cadLm5tGf0TGkBo1dGweiVITS6MAGRDyPEbUgib4giv4Jk9MIFMBBOwEAECQMRZKPH4EMxAaPHwEBxEaMXCTR6wFqb4iSjF8k3etDf/IzyjJ6JEjB60QpGL5rQ6MoKiHxZQtzlSCJfjijyK0lGL0YAAzEEDJQnYaA82egx+FBKwOgxMFBaxOg9CjR6wFqb0iSj9yjf6EF/87OCZ/RMBQGjV1HB6FUkNLpKAiJfiRB3ZZLIVyaK/CqS0asigIEqBAxUJWGgKtnoMfhgBIweAwPhIkavGtDoAWttwklGrxrf6EF/8/Mxz+iZxwSMXnUFo1ed0OhqCIh8DULcNUkiX5Mo8qtJRu9xAQw8TsDAEyQMPEE2egw+RAkYPQYGokWMXi2g0QPW2kSTjF4tutFrHY40erWBvUTV6NUWMHpPpuPwHQ3OCCQ4n/LAaZ4SAGcdEXBC31dQ1wOnqSsAzqdFwAmV9Xre+o2pJwDO+grrN/UJ85cGAnP3BoS4nyHN3Z8hzt3XktZvnhXAwLMEDDQkYaAhef2GwYcYgfUbBgbKi6zfNAKu3wBrbcqT1m8aia3fPIerj+yLlJ8TMHrPKxi95wmNrqLLG/xjpBcpVxJp8I2BDR5Ya1NJwBg0JvClCckcNnFc6/2Pm9d+m3rCZpoKCFszBWFrxrjd0uUNqjpJ2KqJCFtzoLABa22qCQhbcwJfWpCErQVf2Mohhe0Fb9/IvCAgbC+K7BvFIMHZ0gOnaSkAztiEuKnZChe07C8EtBIAZ2uFKUFrgsVpI7Ch1YYQdxzJ2tnnZb0dfgNpU/MlAQy8RMDAyyQMvJyO+wsBDD7UEJjiMTBQU2RpoC1waQBYa1OTtKnZNh37FwKwU+R23t1rpp2A0XtFwei9Qmh0rwqI/KuEuNuTRL498c6l70lGr4MABjoQMPAaCQOvke9eY/ChloDRY2CgtojRex1o9IC1NrVJRu91/t1r0OXmjp7RMx0FjF4nBaPXidDoOguIfGdC3F1IIt+FKPIbSUavqwAGuhIw0I2EgW5ko8fgQx0Bo8fAQF0Ro9cdaPSAtTZ1SUavO9/oQX/zs4dn9EwPAaPXU8Ho9SQ0ul4CIt+LEPcbJJF/gyjym0hG700BDLxJwEBvEgZ6k40egw/1BYweAwMNRIxeH6DRA9baNCAZvT58owf9zc+3PKNn3hIwem8rGL23CY2ur4DI9yXE3Y8k8v2IIr+ZZPT6C2CgPwEDA0gYGEA2egw+NBQwegwMNBIxegOBRg9Ya9OIZPQG8o0e9Dc/B3lGzwwSMHrvKBi9dwiN7l0BkX+XEPdgksgPZoo8yegNEcDAEAIGhpIwMJRs9Bh8aCxg9BgYaCJi9N4DGj1grU0TktF7j8ihH6w+autpYvB57XOi6j1MoCcPI/BxOKknDyfjiaHL7wtg4H0CBkaQMDCCrMsMPjQX0GUGBlqI6PJIoC4Da21akHR5pJ8FGHRORwFzuq447lzri3NyOorYl75MHhS0IwWenx+QevQHfwNfYQ/2MUh8OfPwoDkdTcrpaCK+bM/7LsH7tHS57tl+bwch7lgR3RsD5BCw1ibW5bix+TKYgJs2AnzZSYg7ToQvY4F8AdbaxAnwZQgBN20F+PIjIe52Inz5EMgXYK2NSv7GAfO3ETiH2kSaQ40jetxVpDnUeJLfHx+AORQSX+OBc6gJpJxOIOLLxtZQQq9vL7B2uI/xzhmRHv0RkEPAWpsOpLXDjxzrxGgsfU3q0R0FOHSQwKFOIhyaCOQQsNamE4lDE4kcsuda7zFeDSEw1zpMiLubCIcmATkErLXpJrA2MYyAm54CfDlCiLuXCF8mA/kCrLVRyd/HwPztAq5N7CatTXxMnDt+R/K9U0jz6CkBWJtA4msKcG1iKimnUwNwT8Y0YE73ADm7l8TZaUTObiBx9hMSvj4JAGeR+PoEyNnppJxOJ9+TMZzgz3oL+NLLhLj7iPiqGUAOAWtt+gjM494n4KavAF+uEuLuJ8KXmUC+AGtt+gnwZQQBNwMF+HKdEPcgEb58CuQLsNZGJX+zgPnbD5xDHSDNoWYxX3pDmkPNJvn92QGYQyHxNRs4h5pDyukc8j0ZIwm9frDAfnLiVIR3DIj06LlADgFrbYaQ9pPnEveTbQ6NInBomACHQgkcGi7CoXlADgFrbYaTODSPfE/GBwQOjRSYayUncGiUCIfmAzkErLUZJbA2MZrAlzECfElJ4MtYEb4sAPIFWGujkr/PgPk7CVybOEVam/iMOHfcTlqb+Jw0j/48AGsTSHx9DlybWEjK6cIA3JOxCJjTM0DOniVxdhFzvYfE2S9I+PoiAJxF4usLIGcXk3K6mHxPxhiCLx0v4EtzEHzpBBFftQT5nCTQl04QmMeNJfBlkgBfchH4MlmEL0uBfAHW2kwW4MuHBL5MFeBLHgJfponw5UsgX4C1Nir5+wqYvwvAOdRF0hzqK6LH3UWaQy0j+f1lAZhDIfG1DDiHWk7K6XLyPRnjCBo3Q2A/uRhB42aK9OgVQA4Ba21mkvaTV5DvyRhP4NBsAQ6VInBojgiHViLvDQRyaA6JQyvJ92RMIHBovsBcK4zAoQUiHFoF5BCw1maBwNrERwS+LBTgSziBL4tE+LIayBdgrY1K/r4G5u8OcG3iLmlt4mvi3HEvaW3iG9I8+psArE0g8fUNcG1iDSmnawJwT8ZaYE4TlcCdK3EJTk7XEjm7j8TZb0n4+jYAnEXi61sgZ78j5fQ78j0ZEwm+dImAL61G8KVLRXzVOiCHgLU2SwXmcZMIfFkmwJfqBL4sF+HLeuQeFpAvywX4MpnAl1UCfKlJ4MtqEb5sAPIFWGujkr/vgfkLAc6hQklzqO+JHvcgaQ61keT3NwZgDoXE10bgHGoTKaebyPdkfEzQuDUC+8n1CBq3VqRHbwZyCFhrs5a0n7yZfE/GFAKH1glw6FkCh9aLcGgLkEPAWpv1JA5tId+TMZXAoY0Cc63nCBzaJMKhrUgvB+TQJoG1iWkEvmwV4EtjAl+2ifBlG5AvwFoblfz9AMxfeuDaRAbS2sQPxLnjEdLaxHbSPHp7ANYmkPjaDlyb2EHK6Y4A3JOxE5jTzEDOZiFxdieRs0dJnP2RhK8fA8BZJL5+BHL2J1JOfwoAZ3cBc5oNyNnsJM7uInL2BImzu0n42h0AziLxtRvI2Z9JOf2ZfB9Ve8KcaofL55K/WHH3J8yhd4rMhX4BcghYa7NTYO2lA4Evu1we9x4SX3aL8GUPkC/AWpvdAnx5jcCXPS6Pey+JL3tF+LIXyBdgrY1K/vYB85cLOIfKTZpD7SN63LOkOdSvJL//awDmUEh8/QqcQ+0n5XQ/+T6qfQR87Re4B6Q7QdsPiPToA0AOAWttDpDuATlAvAfkPKlHHxLgUC8Chw6LcOggkEPAWpvDJA4dJN9H9SYBS0ddzqFfSXOtYyIc+g3IIWCtzTGBtYneBL6cdHnc+0l8OSXCl0NAvgBrbVTydxiYv2LAtYnipLUJO95kvvOiuXiJ5Ht/J82jf3fk4t/hK+zBPgaJr9+BaxNHSDk98jdy+sAeDpjTUkDOliZx9ihxvecyibPHSPg6FoD1RCS+jgE5e5yU0+MBuI/qBDCnBsjZcBJnTxA5e4XE2ZMkfJ0MAGeR+DoJ5OwpUk5PBYCzfwBzGgXkbDSJs38QOXuVxNnTJHydDgBnkfg6DeTsGVJOzwSAs2eBOY0BcrY8ibNniZy9RuLsORK+zgWAs0h8nQNy9jwpp+cDwNkLwJxWBHK2EomzF4icvUni7EUSvi4GgLNIfF0EcvYSKaeXyM8YTCPss5xx+T7LAdI+y1mRfYLLQA4Ba23OCuxLfkLgywWXx32QxJeLIny5AuQLsNbmogBfZhD4csXlcf9G4stVEb5cBfIFWGujkr9rwPxVBc6hqpHmUNeIHvcuaQ51neT3rwdgDoXE13XgHOoGKac3yM8YHCLg64bA/dGfEbT9pkiPvgnkELDW5ibp/uibxPujbQ4dJnDojgCHviBw6K4Ih24BOQSstblL4tAt8jMGSwlYSlTa3Rz6nTTXSlxag0O3gRwC1tokdjlubL58ReBLiMvjPkLiS6gIX+4A+QKstVHJ311g/uoA1ybqktYm7hKfMUiSgrM2cY80j76Xjv+MARJf94BrE0HpOTm1z8t+xiAR7tpNfSBnG5A4a8ebN4jD2WASZxOT8JU4PX89EYkvZx4eNKdJSDlN8jdy+qDXHgzMaUMgZxuROBtM5GwIibMhJHyFBICzSHyFADkbSsppaAA4mxSY08ZAzjYhcTYpkbOhJM4mI+ErWQA4i8RXMiBnk5NymjwAnE0BzGlzIGdbkDibgsjZpCTOpiThK2UAOIvEV0ogZ1ORcpoqAJxNDcxpSyBnY0mcTU3kbDISZ9OQ8JUmAJxF4isNkLNpSTlNS8SXvc9yhLDPktzl+yxHSfssKUT2CdIBOQSstUkhsC95jMCX1C6P+xiJL2lE+JIeyBdgrU0aAb6cIPAlvcvjPk7iSwYRvmQA8gVYa6OSv4zA/LUBzqHiSHOojESPm4o0h8pE8vuZAjCHQuIrE3AOlZmU08xEfNnYOkHAV2aXa5x9f/RFgrZnEenRWYAcAtbaIPPn5JAdL/MZg5MEDmUT4NBVAoeyi3DoESCHgLU22UkceoTIIXuudYOApVwu59Ap0lwrtwiHsgI5BKy1yS2wNnGLwJd8Lo/7DxJf8ovwJRuQL8BaG5X8ZQfmryNwbaITaW0ie3reMwbpSWsTOUjz6Bzp+c8YIPGVA7g2kZOU05wBeMYgFzCnXYGc7UbibC7iek8GEmdzk/CVOwDriUh85QZyNg8pp3kCcB9VXmBOewI524vE2bxEzmYkcTYfCV/5AsBZJL7yATmbn5TT/AHgbAFgTnsDOduHxNkCRM5mInG2IAlfBQPAWSS+CgI5W4iU00IB4GxhYE77Ajnbj8TZwkTOZiZxtggJX0UCwFkkvooAOVuUlNOiAeBsMWBOBwI5O4jE2WJEzmYhcbY4CV/FA8BZJL6KAzlbgpTTEuRnDIqkxuOrkMv3WU6T9lkKi+wTlARyCFhrU1hgX7IYgS/FXB73GRJfiovwpRSQL8Bam+ICfClB4Espl8d9lsSX0iJ8KQ3kC7DWRiV/ZYD5GwycQw0hzaHKED1udtIcKozk98MCMIdC4isMOIcypJwa8jMG5wj4MgL3R0cRtD1cpEeHAzkErLUJJ90fHU5+xuA8gUNRAhyKIXAoWoRDEUAOAWttokkciiA/Y1CBgKUYl3PoAmmuVV6EQ5FADgFrbcoLrE1UIvClosvjvkjiSyURvkQB+QKstVHJXzQwf2OAaxNjSWsT0cRnDPKQ1ibKkubRZQPwjAESX2WBaxPlSDktF4BnDGKAOR0P5OwEEmdjiOs9eUmcLU/CV/kArCci8VUeyNlHSTl9NAD3UVUA5nQSkLOTSZytQORsPhJnK5LwVTEAnEXiqyKQs5VIOa0UAM5WBuZ0KpCz00icrUzkbH4SZ6uQ8FUlAJxF4qsKkLNVSTmtGgDOVgPmdAaQszNJnK1G5GwBEmcfI+HrsQBwFomvx4CcrU7KafUAcLYGMKezgZydQ+JsDSJnC5I4W5OEr5oB4CwSXzWBnH2clNPHyc8YtCPss1R1+T7LJdI+SzWRfYIngBwC1tpUE9iXfJXAlxouj/syiS81RfhSC8gXYK1NTQG+dCDwpZbL475C4kttEb7UBvIFWGujkr8ngfmbD5xDLSDNoZ4ketyipDnUUyS//1QA5lBIfD0FnEPVIeW0DvkZg6sEfNURuD+6B0Hb64r06LpADgFrbeqS7o+uS37G4BqBQ/UFOPQmgUMNRDj0NJBDwFqbBiQOPU1+xuAtApYaupxD10lzrUYiHKoH5BCw1qaRwNpEXwJfGrs87hskvjQR4Ut9IF+AtTYq+WsAzN8y4NrEctLaRAPiMwalSGsTz5Dm0c8E4BkDJL6eAa5NPEvK6bMBeMagITCnq4CcXU3ibEPiek9pEmcbkfDVKADriUh8NQJy9jlSTp8LwH1UzwNzugbI2bUkzj5P5GwZEmcbk/DVOACcReKrMZCzTUg5bRIAzjYF5nQdkLPrSZxtSuRsGImzzUj4ahYAziLx1QzI2eaknDYPAGdbAHO6EcjZTSTOtiBy1pA4+wIJXy8EgLNIfL0A5OyLpJy+GADOtgTmdCuQs9tInG1J5Gw4ibOxJHzFBoCzSHzFAjnbipTTVuRnDOYT9lmau3yf5SZpn6WFyD5BayCHgLU2LQT2JT8j8KWly+O+ReJLrAhf2gD5Aqy1iRXgy0ICX9q4PO7bJL7EifAlDsgXYK2NSv5eAuZvB3AOtZM0h3qJ6HGjSXOol0l+/+UAzKGQ+HoZOIdqS8ppW/IzBncI+GorcH/0CoK2txPp0e2AHALW2rQj3R/djvyMwV0Ch9oLcOhrAoc6iHDoFSCHgLU2HUgceoX8jMFaApY6upxD90hzrU4iHHoVyCFgrU0ngbWJ7wh86eryuINScvjSTYQv7YF8AdbaqOSvAzB/+4FrEwdIaxMdiM8YPEpam3iNNI9+LQDPGCDx9RpwbeJ1Uk5fD8AzBh2BOT0E5OxhEmc7Etd7KpA424mEr04BWE9E4qsTkLOdSTntHID7qLoAc3oUyNljJM52IXK2IomzXUn46hoAziLx1RXI2W6knHYLAGe7A3N6EsjZUyTOdidythKJsz1I+OoRAM4i8dUDyNmepJz2DABnewFzegbI2bMkzvYicrYyibNvkPD1RgA4i8TXG0DOvknK6ZsB4GxvYE4vADl7kcTZ3kTOViFxtg8JX30CwFkkvvoAOfsWKadvkZ8xOE/YZ+np8n2WRKR9ll4i+wRvAzkErLXpJbAveZHAl94ujzsxiS99RPjSF8gXYK1NHwG+XCbwpa/L405C4ks/Eb70A/IFWGujkr/+wPxdAc6hrpLmUP2JHrc6aQ41gOT3BwRgDoXE1wDgHGogKacDyc8YBBN6/UCB+6PvErR9kEiPHgTkELDWZhDp/uhB5GcMQggcGizAocRp8HEPEeHQO0AOAWtthpA49A75GYMQApaGuZxDoaS51nARDr0L5BCw1ma4wNpEUgJfRro87qQkvowS4ctgIF+AtTYq+RsCzF+iksA16pIczR5CfMagFmltYihpHj00AM8YIPE1FLg28R4pp+8F4BmDYcCchgA5G0ri7DDiek9tEmeHk/A1PADriUh8DQdy9n1STt8PwH1UI4A5TQ7kbAoSZ0cQOfskibMjSfgaGQDOIvE1EsjZUaScjgoAZz8A5jQ1kLNpSJz9gMjZp0icHU3C1+gAcBaJr9FAzo4h5XRMADg7FpjT9EDOZiBxdiyRs3VInP2QhK8PA8BZJL4+BHJ2HCmn4wLA2fHAnGYGcjYLibPjiZytS+LsBBK+JgSAs0h8TQBy9iNSTj8iP2MQQdhnGePyfZZkpH2WsSL7BBOBHALW2owV2JeMIvBlvMvjTk7iywQRvkwC8gVYazNBgC9lCXyZ5PK4U5D4MlmEL5OBfAHW2qjk72Ng/rIB51DZSXOoj4ketwFpDjWF5PenBGAOhcTXFOAcaiopp1PJzxikJPT6qQL3R1claPs0kR49DcghYK3NNNL90dPIzxikInBohgCHahA4NFOEQ58AOQSstZlJ4tAn5GcMniBgabbLOZSaNNeaI8Kh6UAOAWtt5gisTdQm8GW+y+NOQ+LLAhG+zADyBVhro5K/mcD8FQKuTRQmrU3MJD5j8BxpbeJT0jz60wA8Y4DE16fAtYlZpJzOCsAzBrOBOS0G5GxxEmdnE9d7nidxdg4JX3MCsJ6IxNccIGfnknI6NwD3Uc0D5rQUkLOlSZydR+RsYxJn55PwNT8AnEXiaz6QswtIOV0QAM5+BsypAXI2nMTZz4icbULi7OckfH0eAM4i8fU5kLMLSTldGADOLgLmNArI2WgSZxcROduUxNkvSPj6IgCcReLrCyBnF5NyujgAnF0CzGkMkLPlSZxdQuRsMxJnl5LwtTQAnEXiaymQs1+Scvol+RmDboR9loUu32dJS9pnWSSyT/AVkEPAWptFAvuSPQh8WeLyuNOR+LJUhC/LgHwB1tosFeBLLwJflrk87vQkviwX4ctyIF+AtTYq+VsBzF9F4ByqEmkOtYLocV8kzaFWkvz+ygDMoZD4WgmcQ60i5XQV+RmDDIRev0rg/ugBBG1fLdKjVwM5BKy1WU26P3o1+RmDjAQOrRHg0LsEDq0V4dDXQA4Ba23Wkjj0NfkZg6EELK1zOYcykeZa60U49A2QQ8Bam/UCaxPDCHzZ6PK4M5P4skmEL2uAfAHW2qjkby0wf7WAaxO1SWsTa4nPGLQhrU18S5pHfxuAZwyQ+PoWuDbxHSmn3wXgGYN1wJzWAXK2Lomz64jrPXEkzq4n4Wt9ANYTkfhaD+TsBlJONwTgPqrvgTmtD+RsAxJnvydy9iUSZzeS8LUxAJxF4msjkLObSDndFADObgbmtCGQs41InN1M5OzLJM5uIeFrSwA4i8TXFiBnt5JyujUAnN0GzGljIGebkDi7jcjZtiTO/kDC1w8B4CwSXz8AObudlNPtAeDsDmBOmwM524LE2R1EzrYjcXYnCV87A8BZJL52Ajn7IymnP5KfMVhG2GfZ6vJ9liykfZZtIvsEPwE5BKy12SawL7mCwJcdLo/7ERJfdorwZReQL8Bam50CfFlF4Msul8edlcSX3SJ82Q3kC7DWRiV/PwPz1xI4h4olzaF+JnrcDqQ51C8kv/9LAOZQSHz9ApxD7SHldA/5GYNshF6/R+D+6A0Ebd8r0qP3AjkErLXZS7o/ei/5GYPsBA7tF+DQZgKHDohwaB+QQ8BamwMkDu0jP2OwjYClQy7nUA7SXOuwCId+BXIIWGtzWGBtYjuBL0ddHndOEl+OifBlP5AvwFoblfwdAOavPXBtogNpbeIA8RmDzqS1iYOkefTBADxjgMTXQeDaxG+knP4WgGcMDgFz2hHI2U4kzh4irvd0IXH2MAlfhwOwnojE12EgZ38n5fT3ANxHdQSY065AznYjcfYIkbNdSZw9SsLX0QBwFomvo0DOHiPl9FgAOHscmNOeQM72InH2OJGz3UicPUHC14kAcBaJrxNAzp4k5fRkADh7CpjT3kDO9iFx9hSRs91JnP2DhK8/AsBZJL7+AHL2NCmnpwPA2TPAnPYFcrYfibNniJztQeLsWRK+zgaAs0h8nQVy9hwpp+fIzxjcJuyznHT5Pksu0j7LKZF9gvNADgFrbU4J7EveJfDljMvjzk3iy1kRvlwA8gVYa3NWgC9BafG4ueDyuPOQ+HJRhC8XgXwB1tqo5O8SMH8DgXOoQaQ51CWix32TNIe6TPL7lwMwh0Li6zJwDnWFlNMr5GcM8hJ6/RWB+6NTELT9qkiPvgrkELDW5irp/uir5GcM8hE4dEOAQ2kIHLopwqFrQA4Ba21ukjh0jfyMQXoClu64nEP5SXOtuyIcug7kELDW5q7A2kRGAl8SlXF33AVIfElcRoMvN4B8AdbaqOTvJjB/I4FrE6NIaxM3ic8Y9CWtTdwizaNvBeAZAyS+bgHXJm6Tcno7AM8Y3AHmdAyQs2NJnL1DXO/pR+LsXRK+7gZgPRGJr7tAzt4j5fReAO6jCsqAy+l4IGcnkDhrx5vXd140Z/uTOJsoAycXiTLwOYvElzMPDzyPIOU0cQY+Z5MAczoJyNnJJM4mIXJ2AImzwSR8BQeAs0h8BQM5G0LKaUgAOBsKzOlUIGenkTgbSuTsQBJnk5LwlTQAnEXiKymQs8lIOU0WAM4mB+Z0BpCzM0mcTU7k7CASZ1OQ8JUiAJxF4isFkLMpSTlNScSXvc9SmbDPEuLyfZaCpH2WUJF9glRADgFrbUJdjhubL1UJfEnu8rgLkfiSQoQvqYF8AdbapBDgy2MEvqR2edyFSXxJI8KXNEC+AGttVPKXFpi/2cA51BzSHCot0eMOIc2h0pH8froAzKGQ+EoHnEOlJ+U0PRFfNraKEHp9epdrnH1/dB2CtmcQ6dEZgBwC1tog8+fkkB0v8xmDogQOZRbgUH0Ch7KIcCgjkEPAWpssJA5lJHLInms9S8BSNpdzqBhprpVdhEOZgBwC1tpkF1ibaETgSy6Xx12cxJfcInzJDOQLsNZGJX9ZgPlbAlybWEpam7DjZT1j8D5pbeIR0jz6kQz8ZwyQ+HoEuDaRlZTTrBn4zxhkA+Z0GZCzy0mczUZc7xlB4mx2Er6yB2A9EYmv7EDO5iDlNEcA7qPKCczpKiBnV5M4m5PI2ZEkzuYi4StXADiLxFcuIGdzk3KaOwCczQPM6RogZ9eSOJuHyNlRJM7mJeErbwA4i8RXXiBn85Fymi8AnM0PzOk6IGfXkzibn8jZD0icLUDCV4EAcBaJrwJAzhYk5bRgADhbCJjTjUDObiJxthCRs6NJnC1MwlfhAHAWia/CQM4WIeW0CPkZg36EfZZ8Lt9nKUHaZ8kvsk9QFMghYK1NfoF9yQEEvhRyedwlSXwpLMKXYkC+AGttCgvwZRCBL8VcHncpEl+Ki/ClOJAvwFoblfyVAOZvK3AOtY00hypB9LjjSHOokiS/XzIAcygkvkoC51ClSDktRX7GoDSh15cSuD96BEHbS4v06NJADgFrbUqT7o8uTX7GoAyBQ0aAQ6MJHAoX4VAZIIeAtTbhJA6VIT9j8CEBS1Eu51AYaa4VLcKhMCCHgLU20QJrE+MJfIlxedyGxJfyInwxQL4Aa21U8hcOzN8e4NrEXtLaRDjxGYNJpLWJCNI8OiIAzxgg8RUBXJuIJOU0MgDPGEQBc7ofyNkDJM5GEdd7JpM4G03CV3QA1hOR+IoGcrYsKadlA3AfVTlgTg8BOXuYxNlyRM5+TOJsDAlfMQHgLBJfMUDOlifltHwAOPsoMKdHgZw9RuLso0TOTiFxtgIJXxUCwFkkvioAOVuRlNOKAeBsJWBOTwI5e4rE2UpEzk4lcbYyCV+VA8BZJL4qAzlbhZTTKgHgbFVgTs8AOXuWxNmqRM5OI3G2Gglf1QLAWSS+qgE5+xgpp4+RnzFYR9hnqejyfZZw0j5LJZF9gupADgFrbSoJ7EtuIPClqsvjjiDxpZoIX2oA+QKstakmwJeNBL7UcHnckSS+1BThS00gX4C1Nir5exyYvwvAOdRF0hzqcaLHnUmaQz1B8vtPBGAOhcTXE8A5VC1STmuRnzGIIvT6WgL3R/9I0PbaIj26NpBDwFqb2qT7o2uTnzGIJnCojgCHfiZwqK4Ih54EcghYa1OXxKEnyc8Y7CVgqb7LOVSWNNdqIMKhp4AcAtbaNBBYm/iVwJeGLo+7HIkvjUT4UgfIF2CtjUr+6gLzdwe4NnGXtDZRl/iMwVzS2sTTpHn00wF4xgCJr6eBaxP1SDmtF4BnDOoDc5qoFO5ciUtxclqfuN4zj8TZBiR8NQjAeiISXw2AnH2GlNNnAnAf1bPAnIYAORtK4uyzRM7OJ3G2IQlfDQPAWSS+GgI524iU00YB4OxzwJwmB3I2BYmzzxE5u4DE2edJ+Ho+AJxF4ut5IGcbk3LaOACcbQLMaWogZ9OQONuEyNnPSJxtSsJX0wBwFomvpkDONiPltFkAONscmNP0QM5mIHG2OZGzn5M424KErxYB4CwSXy2AnH2BlNMXyM8YJEuHx1djl++zxJD2WZqI7BO8COQQsNamicC+ZAoCX5q7PO7yJL60EOFLSyBfgLU2LQT4korAl5Yuj/tREl9iRfgSC+QLsNZGJX+tgPnLDJxDZSHNoVoRPe5i0hyqNcnvtw7AHAqJr9bAOVQbUk7bkJ8xqEDo9W0E7o/OQtD2OJEeHQfkELDWJo50f3Qc+RmDigQOtRXgUHYCh9qJcOglIIeAtTbtSBx6ifyMQS4Cltq7nEOVSHOtDiIcehnIIWCtTQeBtYk8BL50dHnclUl86STCl7ZAvgBrbVTy1w6Yv3zAtYn8pLWJdsRnDJaR1iZeIc2jXwnAMwZIfL0CXJt4lZTTVwPwjEF7YE4LATlbmMTZ9sT1nuUkznYg4atDANYTkfjqAOTsa6ScvhaA+6heB+a0GJCzxUmcfZ3I2RUkznYk4atjADiLxFdHIGc7kXLaKQCc7QzMaSkgZ0uTONuZyNmVJM52IeGrSwA4i8RXFyBnu5Jy2jUAnO0GzKkBcjacxNluRM6uInG2Owlf3QPAWSS+ugM524OU0x4B4GxPYE6jgJyNJnG2J5Gzq0mc7UXCV68AcBaJr15Azr5Byukb5GcMniTss3R1+T5LFdI+SzeRfYI3gRwC1tp0E9iXrEPgS0+Xx12VxJdeInzpDeQLsNamlwBfnibwpbfL465G4ksfEb70AfIFWGujkr+3gPmLAc6hypPmUG8RPe5a0hzqbZLffzsAcygkvt4GzqH6knLal/yMwWOEXt9X4P7oxgRt7yfSo/sBOQSstelHuj+6H/kZg+oEDg0U4FBzAocGiXCoP5BDwFqbQSQO9Sc/Y/AiAUuDXc6hGqS51hARDg0AcghYazNEYG0ilsCXYS6PuyaJL8NF+DIQyBdgrY1K/gYB81cDuDZRk7Q2MYj4jMEG0trEO6R59DsBeMYAia93gGsT75Jy+m4AnjEYDMxpLSBna5M4O5i43vM9ibNDSPgaEoD1RCS+hgA5O5SU06EBuI/qPWBO6wA5W5fE2feInN1I4uwwEr6GBYCzSHwNA3J2OCmnwwPA2feBOa0P5GwDEmffJ3J2E4mzI0j4GhEAziLxNQLI2ZGknI4MAGdHAXPaEMjZRiTOjiJydjOJsx+Q8PVBADiLxNcHQM6OJuV0dAA4Owb5jmwgZ5uQODuGyNktJM6OJeFrbAA4i8TXWCBnPyTl9MMAcHYcMKfNgZxtQeLsOCJnfyBxdjwJX+MDwFkkvsYDOTuBlNMJvpyGWCOpA2PODxp3pYOwsdz/fJSBeMEfZcCfdyIQIKy4J2b4Z4JB5/2XjcXE4GsenQ6X00nAZuCvPg96fWV89UHnsAzwGidnwOIGjXG7xpMz4GvzMalhf+xo2PZ3oUF//bi5YTOvs5TIdZYUuU5nLw17wI+/63tQjtknDQ7C979g4LnCSLUOwsYcFh9DcDAhhcBufskchQ8ikgDhvOP+/DAKaO4fOHMxxWfapmbwJeS+ekzxKZ3zu6kBmFZNeHCnG+5jvZkCdM1TwcVFdzibNFNIDhxMlDYTSE5qGslJTSM/zvULYWllpMCjKL8QboceJXJb6yfAGSOw1maUy3Fj82UPgS9jBPiyh8CXsSJ8mQ7kC7DWZqwAX/Yylu4F+LKXwJcJInyZgdyeAPJlggBffiXwZZIAX34j8GWyCF9mAvkCrLWZLMCX/QS+TBXgyyECX6aJ8OVTIF+AtTbTBPhygMCXGQJ8uUzgy0wRvswC8gVYazNTgC8HCXyZLcCXKwS+zBHhy2wgX4C1NnME+PIbgS/zBfhylcCXBSJ8mQPkC7DWZoEAX34n8GWhAF9uE/iySIQvc4F8AdbaLBLgyxECX5YI8OUOgS9LRfgyD8gXYK3NUgG+HCXwZZkAX9Klx8e9XIQv84F8AdbaLBfgyzECX1YJ8CU9gS+rRfiyAMgXYK3NagG+HCfwZY0AXzIQ+LJWhC+fAfkCrLVZK8CXUwS+rBPgS1YCX9aL8OVzIF+AtTbrBfjyB4EvGwX4ko3Al00ifFkI5Auw1maTAF9OE/iyVYAvJQl82SbCl0VAvgBrbbYJ8OUMgS87BPhSisCXnSJ8+QLIF2CtzU4Bvpwl8GWXAF9KE/iyW4Qvi4F8Adba7BbgywUCX/YI8CWSwJe9InxZAuQLsNZmrwBfLhL4sl+AL1EEvhwQ4ctSIF+AtTYHBPhyicCXQwJ8eYLAl8MifPkSyBdgrc1hAb5cJvDlqABfahH4ckyEL18B+QKstTkmwJcrBL6cFOBLbQJfTonwZRmQL8Bam1MCfLlO4MsZAb7UI/DlrAhflgP5Aqy1OSvAlxsEvlwQ4Et9Al8uivBlBZAvwFqbiwJ8uUngyxUBvrQm8OWqCF9WAvkCrLW5KsCXWwS+3BDgSxsCX26K8GUVkC/AWpubAny5TeDLHQG+xBH4cleEL6uBfAHW2twV4Ms9Al8ShbmfL68S+JI4TIMvXwP5Aqy1Sexy3Nh8CUqJx02IAF/aE/gSKsKXb4B8AdbahArwJRGBL8kF+PI2gS8pRPiyBsgXYK1NCgG+JCbwJbUAX/oS+JJGhC9rgXwB1tqkEeBLEgJf0gvwpR+BLxlE+PItkC/AWpsMAnwJJfAlswBf3iXwJYsIX74D8gVYa5NFgC9JCXzJJsCXwQS+ZBfhyzogX4C1NtkF+JKMwJdcAnyZSOBLbhG+rAfyBVhrk1uAL8kJfMknwJdJBL7kF+HLBiBfgLU2+QX4koLAl0ICfJlM4EthEb58D+QLsNamsABfUhP4UkyAL9MJfCkuwpeNQL4Aa22KC/AlDYEvpQT4MoPAl9IifNkE5Auw1qa0AF/SEvhiBPjyFYEv4SJ82QzkC7DWJlyAL+kIfIkS4MsyAl+iRfiyBcgXYK1NtABf0hP4EiPAl+UEvpQX4ctWIF+AtTblBfiSicCXigJ8+YbAl0oifNkG5Auw1qaSAF8yE/hSVYAvawh8qSbClx+AfAHW2lQT4EsWAl9qCPDlJwJfaorwZTuQL8Bam5oCfHmEwJdaAnzZReBLbRG+7ADyBVhrU1uAL1kJfKkjwJfdBL7UFeHLTiBfgLU2dQX4koPAl/oCfPmVwJcGInz5EcgXYK1NAwG+5CTwpaEAX/YT+NJIhC8/AfkCrLVpJMCXXAS+NBbgy3kCX5qI8GUXkC/AWpsmAnzJTeBLcwG+XCDwpYUIX3YD+QKstWkhwJc8BL60FODLRQJfYkX48jOQL8Bam1gBvuQn8KWNAF+uE/gSJ8KXX4B8AdbaxAnwpQCBL20F+HKDwJd2InzZA+QLsNamnQBfChL40l6AL6ky4OPuIMKXvUC+AGttOgjwpRCBLx0F+JKawJdOInzZB+QLsNamkwBfChP40lWAL2kIfOkmwpdfgXwB1tp0E+BLMQJfegrwJROBL71E+LIfyBdgrU0vAb4UJ/CltwBfMhP40keELweAfAHW2vQR4EsJAl/6CvClKIEv/UT4chDIF2CtTT8BvpQk8GWgAF+KEfgySIQvvwH5Aqy1GSTAl1IEvgwW4EtxAl+GiPDlEJAvwFqbIQJ8CSPwZZgAX8IIfBkuwpfDQL4Aa22GC/DFEPgyUoAvhsCXUSJ8+R3IF2CtzSgBvoQT+DJGgC/VCXwZK8KXI0C+AGttxgrwJYLAl/ECfKlB4MsEEb4cBfIFWGszQYAvkQS+TBLgS00CXyaL8OUYkC/AWpvJAnwpS+DLVAG+PEXgyzQRvhwH8gVYazNNgC/lCHyZIcCXOgS+zBThywkgX4C1NjMF+BJD4MtsAb68SODLHBG+nATyBVhrM0eAL+UJfJkvwJeWBL4sEOHLKSBfgLU2CwT48iiBLwsF+BJL4MsiEb78AeQLsNZmkQBfKhH4skSALy8T+LJUhC+ngXwB1tosFeBLZQJflgnwpS2BL8tF+HIGyBdgrc1yAb5UIfBllQBf3iTwZbUIX84C+QKstVktwJeqBL6sEeBLbwJf1orw5RyQL8Bam7UCfKlG4Ms6Ab70IfBlvQhfzgP5Aqy1WS/AlxoEvmwU4MsAAl82ifDlApAvwFqbTQJ8qUngy1YBvgwk8GWbCF8uAvkCrLVB5i/YOkcxa/zmO98nVszTrTHDGvvTBQUdsMZBa8y0/v7UGkes4+PWOGWNM9Y4b41L1phl/bfZ1phjjRvW3zetccsac62/51kjKL1VH2uEWiO5NVJZI6015lv/bYE1PrNGZuvvLNZ4xBqfW38vtEZO6ziPNfJbo5A1ilqjhDUWWf/tC2sstoax/g63RoQ1llh/L7VGOev4UWtUskZVa1S3xuPW+NL6b19ZY5k16lh/17XG09ZYbv29whrPWsfPWaOJNZpb40VrtLLGSuu/rbLGamu0tf5uZ41XrPG19fc31njdOu5sjW7W6GmNN63xljXWWP9trTW+tcZA6+9B1njHGt9Zf6+zxnvW8fvWGGWNMdYYZ42PrLHe+m8brPG9NaZaf0+zxifW2Gj9vckas6zjudZYYI2F1lhsx2aNzdZ/s3/X2/6t4lXW36vta7SG/Vus9u9Lfmcdb7DGJmtstcZ2a/xo/2v9N/v3wezfPNpj/b3XGvvs/2b9bf9OxW/W8e/WOGaNk9Y4bY1z1rDfyW+/Z9x+d/IV6++r1rhmDfvdsPb7Lm9bx/eskdg6DrFGMmuktIb9bj/7fWX2O5jSWyODNTLamLOG/d6MrNbIYY3c1shnjYLWKGIN+x0B9nPP9rOcpaxR2hplrGE/q2Y/fxNpjbLWKG+NijZ/rfGYjVtr2PdP2/eE1rJGbWs8aQ37njf7Pp561njGGo2s0dgazazxgjXsexbsfVh7b6mNNeKs8ZI17LVzez3wVWu8Zo1O1uhqjR7WeMMa9tqHPZ+zPWpfa/SzRn9r2Bps95V3rTHUGsOtMdIao63xYYZ/9jJwL28zwTr35Az4Xn4pA64XJfH1ovgf1PlJuTXIHLCu8TL6GtEXWDqIA9AdZJP1wDfTWzFfJsS9k2SygonAfNCYr2QAmn6gYUPWgtwkzf3zJcQmecXlTfIfKp4YHPhkIAmvApNo5y+JL4/2efNyCi+R12ue0zLXBJrIdbc7Lft8DKe1S8BpXSfEvVvEaV0HNqMbQKcFxI3Z7TktiSZ5I4E6rXCkI7hJclo39ZwWNK+3PKdlbgk0kdvsJoJwHLcJjmOPiOO4DSTlHZeu7ezxHIdEs7iTQB1HBFIZ75Icx109xwHN6z3PcZh7Ak0kKKPL13ZKBXHWdvYJrO3YxUGf91cRp+UE5oPGnAgHcgPEjfnVc1oSTTKRy5skyxFEIh1B4owcp2WfNy+n8BJ5TZJRponQCJoko/uvMZjdRBCOw77IxMTAH/QaQ3TATlNMBbCHJFDFjEJ29lCSYobqKSY0r0k9xTRJBZpIMrcrpj3nDQv662M6YQ/2McHAc4UB400OLgjDwSQjrJkcdPljbXbcyQlx/yayVpQM6DBTANeKgLgxv3lrRRKilSKBOt9opENLSXK+KfWcLzSvqTzna1IJNJHUbt+VKxnE2ZX7XWBXLjXBaR0RcVqpgU4rDdBpAXFjjnhOS6JJpkmgTqss0hGkJTmttHpOC5rXdJ7TMukEmkh6hV259IRdufRAJc/g7cpJgD1DAlXMcsjOnpGkmBn1FBOa10yeYppMAk0ks4JiZiYoZmagYmbxFFMC7FkSqGLGIDv7IyTFfERPMaF5zeoppskq0ESyKShmNoJiZgMqZnZPMSXAnj2BKmZLZGfPQVLMHHqKCc1rTk8xTU6BJpJLQTFzERQzF1Axc3uKKQH23AlUMWORnT0PSTHz6CkmNK95PcU0eQWaSD4FxcxHUMx8QMXM7ymmBNjzJ1DFbIXs7AVIillATzGheS3oKaYpKNBECikoZiGCYhYCKmZhTzElwF44gSpma2RnL0JSzCJ6ignNa1FPMU1RgSZSzO1PJY1Ox3kq6bjAU0nFCE8lnRB5KqkY0NEUBz6VBMSNQdZC1WkpNMnibm+SCr8MVYLktEr4nFZI0J9NKDTorx90vksHcZoo40W7CtdZUuQ6bTOicJ3JM3KuMwh7nWGJHecsmfHPf0vZpgedkIlWIysT9NcG+aBNrQzwXBOBvx3hbJAlHVPR+x+0UJQEurXSQLcWFIQnl11zu1ZJRLD0wNfl8nrYeClDmCmFkQxLmMOwJHNw0flB5+hngHDF/flp5edyH/Tc5v6BMxfGJwjhGX0JuZ9A4yu287twP00O/Qo/ZxL/R3CF+8BlDLBhhmfEFhdNJJuc94sJrAfjtXst7RozmkkEqZlE8NaZzY4UQUHvpsTn4g+Xv3pxixXzmHT4uE+Tlt7QRiQSKPjAWpvTLseNzZfBBL6cE+DLWAJfzovwJQrIF2CtzXkBvgwh8OWSAF8+JPDlsghfooF8AdbaXBbgy3sEvlwT4MskAl+ui/ClLJAvwFqb6wJ8GUbgyy0Bvkwm8OW2CF/KAfkCrLW5LcCX4QS+3BPgywwCX4KMBl9igHwB1tqg88fgy/sEviRxedw2X2YS+BIswpfyQL4Aa22CBfgygsCXpAJ8+ZTAl2QifHkUyBdgrU0yAb58QOBLSgG+zCfwJZUIXyoA+QKstUklwJfRBL6kFeDLAgJf0onwpSKQL8Bam3QCfBlD4EtGAb4sIfAlkwhfKgH5Aqy1ySTAl7EEvjwiwJelBL5kFeFLZSBfgLU2WQX48iGBLzkE+PIlgS85RfhSBcgXYK1NTgG+TCDwJY8AX1YR+JJXhC9VgXwB1trkFeDLRwS+FBDgy2oCXwqK8KUakC/AWpuCAnyZSOBLEQG+rCPwpagIXx4D8gVYa1NUgC+TCHwpIcCX9QS+lBThS3UgX4C1NiUF+DKZwJcyAnzZQOBLmAhfagD5Aqy1CRPgy1QCXyIE+LKVwJdIEb7UBPIFWGsTKcCXaQS+lBXgyzYCX8qJ8OVxIF+AtTbI/NlvLitujaK+89nPYNvPldrPyk2wav+RNSZaw34WyH6+Yap1PN0a9r3b9v2o9j12c6y/51pjnjXse4js+yIWWseLrWHv+f7fPpY1llt/r7DGSmvYa4/2esoa6/g7a9hzRdv/2pq+yfp7szW2WMPuWXYddljHP6X7Z61V3r/wBPh9tMWD/vpBnZ+UW4PMAesaa7n9VYv2q/8YAH2ULEKIl7jUIsRdgSRC6PfR1gK+sKc2UNCAuDHIWpCbJO19tApNsrbLm+Q/VDwxOPAyQBI+SXoj05O8NzJJ5PUpz2mZpwSaSB23Oy37fAynVVnAadUhxF1FxGnVATajukCnBcSNqeI5LYkmWTeBOq1wpCN4muS0ntZzWtC81vOclqkn0ETqu/1XCW1Q1ic4jsdEHEd9ICkbuHRt5zHPcUg0iwYJ1HFEIJXxGZLjeEbPcUDz+qznOMyzAk2kodvXduwfpmKs7dQQWNtpSIi7pojTaghsRo2ATguIG1PTc1oSTbJRAnVakUhH8BzJaT2n57SgeX3ec1rmeYEm0lhhbacxYcu4MRDsTXTATlNMBbA3SaCKGYXs7E1JitlUTzGheW3mKaZpJtBEmrt9bcL+8WTG2kQtgbWJ5oS4a4usTTQHNqMWwLUJIG5MbW9tQqJJtkigTisa6QheIDmtF/ScFjSvL3pOy7wo0ERaut1plQziOK06Ak6rJSHuuiJOqyWwGcUCnRYQN6au57QkmmRsAnVaZZGOoBXJabXSc1rQvLb2nJZpLdBE2rj+fhvSmlZ9AafVhhB3AxGn1QbYjOKATguIG9PAc1oSTTIugTqtckhH8BLJab2k57SgeX3Zc1rmZYEm0tbtTms06QVWDQWcVltC3I1EnFZbYDNqB3RaQNyYRp7TkmiS7RKo04pBOoJXSE7rFT2nBc3rq57TMq8KNJH2rt89JK1pNRZwWu0JcTcRcVrtgc2oA9BpAXFjmnhOS6JJdnB7k1R4Y+BrJKf1Gs9pmUkZgoImZ8A34dcJoLc/icHXOTED7lwdM2KbEbrWdk06EgS3Ewn3nYi4L00yXZ0zck1X2IN9jF3/zoS4u5Aw0IWIARYfmrv8dzhYGGgh8jscXYF9Glhrg8yfk0NdfRxSXWXIEer+a+yG7PuqhRorUKjuXqHCzDiBQvXwChVm9idx/zX2dPvagf27U4w5bi8Br9+L4PPeIHn9N4he357r9STk4k0BDLxJiLs3CQO9iRhg8aGlwHyPgYFYkfleH+B8D1hrE0ua7/URn+9NEXCnb7nd9HxEMj1tXN7sbKF/i9Ds4kSa3dvAZgestYkTEMm3CbjpSzJKfR3Xev+D3hztCNwc7YfLQ6SqsPXL6P5r7O92YZtIEra2AsLWn9Cg2okI2wCgsAFrbdoJCNsAAm4GkoRtIF/YopHCNsi7D9gMEhC2d0h3JKHBWRYJznc9cJp3BcA5WAScUUhwDsEFHaEKziEC4Bzq9inBVNKU4D2BzZ33CNZuGMnaDSNv8A0l5GK4AAaGE+J+n4SB98kbfAw+tBeY4jEw0EFkaWAEcGkAWGvTgbTBN8LBofsfN0+RR3pGz4wUMHqj3G70ppOM3gcCIv8BocGPJon8aLLRG0XIxRgBDIwhxD2WhIGxZKPH4ENHAaPHwEAnEaP3IdDoAWttOpGM3od8o9cSafTGecvNZpyA0RsvstwciwTnBA+cZoIAOD8SAWcrJDgneuA0EwXAOUkEnFBZn+yt35jJAuD82O3rN3NI6zdTBObuUwjztqmkuftU8vrNx4RcTBPAwDRC3J+QMPAJef2GwYeuAus3DAx0E1m/mQ5cvwHW2nQjrd9MF1u/meE9pGFmCBi9mW43enNJRq+nwEMaMwkNvpdIg/8U2OCBtTa9BIzBpwTczCKZw1n8hzSga7+zPWEzswWEbY7bhW0eSdh6CwjbHEKD6iMibHOBwgastekjIGxzCbiZRxK2eXRhM2FIYZvv7RuZ+QLCtkBj38hA3/nwmQdO85kAOD8X2dSMQ4JzobepaRYKgHOR26cEC0lTgi8ENrS+IFi7xSRrt5i8qbmIkIslAhhYQoh7KQkDS8mbmgw+9BWY4jEw0E9kaeBL4NIAsNamH2lT80v6piZ2ivyVZ/TMVwJGb5nbjd5iktFbLiDyywkNfgVJ5FeQjd4yQi5WCmBgJSHuVSQMrCIbPQYfBgoYPQYGBokYvdVAowestRlEMnqr+UYvEmn0vvaWm83XAkbvG5G9EOjL7tZ44DRrBMC5VgSc0Bf0fOuB03wrAM7vRMAJlfV13vqNWScAzvVuX79ZTlq/2SAwd99AmLd9T5q7f09ev1lPyMVGAQxsJMS9iYSBTeT1GwYfBgus3zAwMERk/WYzcP0GWGszhLR+s1ls/WaL95CG2SJg9La63eitIBm9YQIPaWwlNPjhIg1+G7DBA2tthgsYg20E3PxAMoc/8B/SgK79bveEzWwXELYdbhe2lSRhGykgbDsIDWqUiLDtBAobsNZmlICw7STg5keSsP3IFzbo+2J+8vaNzE8CwrZLZN8I+s6H3R44zW4BcP4sAs4YJDh/8TY1zS8C4Nzj9inBGtKUYK/AhtZegrXbR7J2+8ibmnsIufhVAAO/EuLeT8LAfvKmJoMPYwSmeAwMjBVZGjgAXBoA1tqMJW1qHuBvakKnyAc9o2cOChi939xu9L4jGb1DAiJ/iNDgD5NE/jDZ6P1GyMXvAhj4nRD3ERIGjpCNHoMP4wWMHgMDE0SM3lGg0QPW2kwgGb2jfKPXBmn0jnnLzeaYgNE7LrLcDH3Z3QkPnOaEADhPaoAzHPqCnlMeOM0pAXD+IdI5obJ+2lu/MacFwHnG7es3m0jrN2cF5u5nCfO2c6S5+zny+s0ZQi7OC2DgPCHuCyQMXCCv3zD4MElg/YaBgcki6zcXges3wFqbyaT1m4ti6zeXvIc0zCUBo3fZ7UZvM8noTRV4SOMyocFPE2nwV4ANHlhrM03AGFwh4OYqyRxe5T+kAV37veYJm7kmIGzX3S5sW0jCNkNA2K4TGtRMEWG7ARQ2YK3NTAFhu0HAzU2SsN2kC1s49H0xt7x9I3NLQNhui2xqQt/5cMcDp7kjAM67IuCMQILznrepae4JgDMok8unBDtIU4JEmdxv7exrRMedOBPH2tnnzUsCqT09CiLkIokABpIQ4g4mYSCYiAEWH2YLTPEYGJgjsjQQgsOqAdbazCFtaoZkYm9qYqfIoZk8oxeayf3XmNTtRu8nktFLJiDyyQgNPjlJ5JOTjV5SQi5SCGAgBSHulCQMpCQbPQYf5gsYPQYGFogYvVRAowestVlAMnqpiBz6maSlqQX6aGoCh9KQ+mgaMgZsPU0MPm8Z4OQhrQCe0hLwlI6Ep3RkXWZwa6GALjMwsEhEl9MDdRlYa7OIpMvpfRyy/y4W9NcPumZovOYIdf81ZkD2fdVCjRUoVEavUGFmnEChMnmFCjP7k7j/GjO7fR3WnjdmJvidLAJePwsh7kdIXv8Rotff75s7onORVQADWQkYyEbCQDbyfI/BhyUC8z0GBpaKzPeyA+d7wFqbpaT5Xnbx+d4UAXeaw+2m5wBJ8Ja5vNnZZi8HodktF2l2OYHNDlhrs1xAJHMScJOLZJRy+a5VtclnSer+a8zt9iZ/kNTkVwk0+dwEsq4WafJ5gE0eWGuzWqDJ5yHgJi+pyecVb/LZBZp8Pm+dOczkFChUfq9QliURKFQBhQ2BAgQZKCiwGFyQEHchkvzZ501GAukRknUuLICBwgQMFCFhoAgRAyw+rBGwwQwMrBWZPhUFTp+AtTZrSRsCRX0cUjU9+QVMTzEF01OMQPriAoJXnBB3CZLglSDugB8nmZ6SAhgoScBAKRIGSpHvgmDwYZ2A6WFgYL2I6SkNND3AWpv1JNNTWvwuiMICpqeMgukpQyB9mIDghRHiNiTBM0TBO0UyPf+Pvb+B2mpq277xRFGI0vfnOkOI0uy7KIqiKIqiKPqkEEVRiKIohChEURRFUQhRFEVRFEVRFEVRiKKQ/zqeu97nfJ77fv/jGu+5/Y6xttE6xljj6ryMcYxj7vv2m/s29znXWjUNNFAT0EAtSAO1YNND8LDYwPQQGlhiYnpqC02PMNdhCWR6apubnqoGpqeOg+mpA0Bf16Dg1QXGXQ8qePXAgrcVMj31DTRQH9BAA0gDDWDTQ/Cw1MD0EBpYZmJ6GgpNjzDXYRlkehqam57qBqbnFAfTcwoA/akGBe9UYNyNoILXCCx4v0Cmp7GBBhoDGjgN0sBpsOkheFhuYHoIDawwMT2nC02PMNdhBWR6Tjc3PTUNTE8TB9PTBIC+qUHBawqM+wyo4J0BFrzfINNzpoEGzgQ00AzSQDPY9BA8rDQwPYQGVpmYnuZC0yPMdVgFmZ7m5qangYHpOSu9zS5udxkk6uzizCSVL7/0h4YaypfztBAO2lWcLYon/ze29BBnjR5KcZ6jG3QtV3GeYyDOcx3W9ecCvraVwZquFTDu1tCarjW4ptsFrevPM9DAeYAGzoc0cD68rid4WG2wric0sMZkXd9GuK4X5jqsgdb1bXIxtO+TZKPXVpef2q5Gr62B0bsg6UZvN1Tk1xo8wO8CYIJfZzLBXyic4IW5DusMjMGFgG7aQeawXa7fuu8jLmw9lYWtfVrYQnuDwnZR0gvbX1BhW29Q2C4CJqgNJoXtYmFhE+Y6bDAobBcDuukAFbYOeGELtZWFrWO6bxQ6GhS2S0w2NesoxXlpKs5wqYE4O+2Pm5qddYOu7yrOzgbivMxhU/MywOJcbrChdTkw7i6QtetSnHvibr6izLKwq4EGugIa6AZpoFtx9qnLBA8bDZZ4hAY2mbQGugtbA8Jch03Qpmb3XAzt+yR5idwjPb0WehgYvZ4ORq8nMNFdYVDkrwDGfSVU5K8ETy4dCBm9XgYa6AVooDekgd7w6TWCh80GRo/QwBYTo3eV0OgJcx22QEbvKvz0mrbdfHVq9MLVBkbvGgejdw0w0fUxKPJ9gHFfCxX5a8EiXxAyetcZaOA6QAN9IQ30hY0ewcNWA6NHaGCbidHrJzR6wlyHbZDR68cbvbpKo3d9avTC9QZG7wYHo3cDMNH1Nyjy/YFxD4CK/ACwyBeCjN6NBhq4EdDATZAGboKNHsHDrwZGj9DAdhOjN1Bo9IS5DtshozeQN3r1lEZvUGr0wiADo3ezg9G7GZjobjEo8rcA474VKvK3gkX+MMjoDTbQwGBAA7dBGrgNNnoEDzsMjB6hgZ0mRu92odET5jrshIze7bzRq680ekNSoxeGGBi9oQ5Gbygw0d1hUOTvAMZ9J1Tk7wSL/BGQ0RtmoIFhgAaGQxoYDhs9goddBkaP0MBuE6N3l9DoCXMddkNG7y7e6HVTGr2701vCw90GRm9EcYZ3tTi7K8U5MhVnGGkgzntMxCl9XsG9qTjDvQbivM9EnNKyPirt34RRBuK836F/cz+wfnnAYO3+ADDuB6G1+4Pg2r0E1L8ZbaCB0YAGHoI08BDcvyF4+Megf0NoYI9J/+ZhYf9GmOuwB+rfPGzWvxmjy4/tg5THGBi9sUk3eiWhIn9AzWRP8BmDOxaY4PPX9JjgHxFO8MJch/wJ101mEn8E0M2jkDl8NNdv3fdJcu/3sbSwhccMCtu4pBe2UlBhK2BQ2MYBE1RBk8L2uLCwCXMdChoUtscB3TwBFbYn8MJWs6aysI1P943CeIPCNsFj36hmLaU4n0zFGZ40EOdT++Om5kTdoG3fEDDRQJyTHDY1JwEW52mDDa2ngXE/A1m7zPdST4cvDy0LJxtoYDKggSmQBqYUZ98QQPBQyGCJR2igsElr4Flha0CY66CMX26Gni1OvyFAu0R+Lj29Fp4zMHpTHYzeVGCim2ZQ5KcB434eKvLPgyeXKkFG7wUDDbwAaGA6pIHp8Ok1gofDDYweoYEiJkZvhtDoCXMdikBGbwZ+ek3bbn4xNXrhRQOj95KD0XsJmOhmGhT5mcC4Z0FFfhZY5CtDRu9lAw28DGjgFUgDr8BGj+ChqIHRIzRQzMTovSo0esJch2KQ0XuVN3rSd37OTo1emG1g9F5zMHqvARPd6wZF/nVg3G9ARf4NsMgfCxm9OQYamANo4E1IA2/CRo/goYSB0SM0UNLE6L0lNHrCXIeSkNF7izd60nd+zk2NXphrYPTmORi9ecBE97ZBkX8bGPc7UJF/Byzyx0NGb76BBuYDGlgAaWABbPQIHsoYGD1CA2VNjN67QqMnzHUoCxm9d3mjJ33n53up0QvvGRi9hQ5GbyEw0S0yKPKLgHG/DxX598EifyJk9D4w0MAHgAYWQxpYDBs9gocKBkaP0EBFE6O3RGj0hLkOFSGjt4Q3el2URu/D9Jbw8KGB0fuoOMO7WpxdleJcmoozLDUQ5zITcUqfV/BxKs7wsYE4PzERp7SsL0/7N2G5gThXOPRvVgDrl08N1u6fAuP+DFq7fwau3QPUv1lpoIGVgAZWQRpYBfdvCB5yDPo3hAYqm/RvPhf2b4S5DpWh/s3nZv2bL3T5sX2Q8hcGRm910o1eTajIH2vwIOXVwARfxWSCXyOc4IW5DlUMjMEaQDdfQubwy1y/dd8nyb3fr9LCFr4yKGxrk17YakGF7QSDwrYWmKCqmhS2dcLCJsx1qGpQ2NYBuvkaKmxf44WtVg1lYfsm3TcK3xgUtvUe+0a1glKcG1Jxhg0G4vx2f9zU/E43aNs3BHxnIM6NDpuaGwGLs8lgQ2sTMO7vIWuX+V7q6fD1oWXhDwYa+AHQwGZIA5uLs28IIHioZrDEIzRQ3aQ1sEXYGhDmOlSHNjW3FKffEKBdIv+Ynl4LPxoYvZ8cjN5PwES31aDIbwXGvQ0q8tvAk0unQEbvZwMN/Axo4BdIA7/Ap9cIHoKB0SM0UNPE6P0qNHrCXIeakNH7FT+9pm03b0+NXthuYPR+czB6vwET3e8GRf53YNw7oCK/AyzyjSGjt9NAAzsBDfwBaeAP2OgRPNQxMHqEBuqaGL0/hUZPmOtQFzJ6f/JGT/rOz12p0Qu7DIzebgejtxuY6P4yKPJ/AeP+Gyryf4NFvglk9P4x0MA/gAb2QBrYAxs9gocGBkaP0EBDE6P3r9DoCXMdGkJG71/e6Enf+ZmvRGr0hDHAfuMBJQyMXuZHqie6/CWSP8HnB8Z9YAlmgsp8bwSJ9EzI6B1koIGDAA0UgDRQoARr9AgeGhkYPUIDjU2MXkGdVoMw16ExZPQKlsCNnvSdnwenRi8cbGD0DnEweocAE10hgyJfCBh3YajIFwaL/FmQ0TvUQAOHAho4DNLAYbDRI3hoYmD0CA00NTF6hwuNnjDXoSlk9A7njV59pdErIpxLXI1eEQOjd0QJhne1OBsoxXlkKs5wpIE4i5qIU/q8gmKpOEMxA3EeZSJOaVkvnvZvQnEDcZZw6N+UANYvJQ3W7iWBcZeC1u6lwLV7K6h/U9pAA6UBDZSBNFAG7t8QPDQz6N8QGmhu0r8pK+zfCHMdmkP9m7Jm/ZtyuvzYPki5nIHRK590o9caKvItDB6kXB6Y4FuaTPAVhBO8MNehpYExqADopiJkDivm+q37Pknu/VZKC1uoZFDYoqQXtvOgwtbKoLBFwATV2qSw5QgLmzDXobVBYcsBdFMZKmyV+cLWQ1nYjk73jcLRBoXtGJN9o55KcR6bijMcayDOKvvjpuZxukHbviHgOANxHu+wqXk8YHFOMNjQOgEYd1XI2mW+l3o6/IXQsvBEAw2cCGjgJEgDJ5Vg3xBA8NDGYIlHaKCtSWugmrA1IMx1aAttalYrgb8hQLpErp6eXgvVDYzeyQ5G72RgoqthUORrAOMOUJEP4MmliyCjV9NAAzUBDdSCNFALPr1G8NDOwOgRGmhvYvRqC42eMNehPWT0avOn16Tt5jqp0Qt1DIxeXQejVxeY6OoZFPl6wLjrQ0W+PljkO0JGr4GBBhoAGmgIaaAhbPQIHjoYGD1CAx1NjN4pQqMnzHXoCBm9U3CjV1v6zs9TU6MXTjUweo0cjF4j4sGJBkW+MTDu06AifxpY5DtBRu90Aw2cTjxDC9JAE9joETx0MjB6hAY6mxi9pkKjJ8x16AwZvaa80ZO+8/OM1OiFMwyM3pkORu9M4oEDBkW+GfHAAajINweL/OWQ0TvLQANnARo4G9LA2bDRI3joYmD0CA10NTF6LYRGT5jr0BUyei14oyd952fL1OiFlgZG7xwHo3cOMNGda1DkzwXG3Qoq8q3AIt8NMnqtDTTQGtDAeZAGzoONHsFDDwOjR2igp4nRO19o9IS5Dj0ho3c+b/TqKo1em/SW8NDGwOi1LcHwrhZnPaU4L0jFGS4wEOeFJuKUPq+gXSrO0M5AnO1NxCkt6xel/ZtwkYE4L3bo31xMHLk1WLt3II7cQmv3juDavRfUv7nEQAOXABq4FNLApXD/huChl0H/htBAb5P+TSdh/0aY69Ab6t90MuvfdNblx/ZByp0NjN5lSTd6vaEif43Bg5QvAyb4PiYT/OXCCV6Y69DHwBhcTpxcgsxhl1y/dd8nyb3frmlhC10NClu3pBe2q6DC1tegsHUDJqh+JoWtu7CwCXMd+hkUtu7ESQ2osPXgC1s3ZWHrme4bhZ4Ghe0Kk32j7kpxXpmKM1xpIM5e++OmZm/doG3fENDbQJxXOWxqXgVYnKsNNrSuBsZ9DWTtMt9LPR3+OmhZ2MdAA30ADVwLaeDaEuwbAgge+hss8QgNDDBpDVwnbA0Icx0GQJua15Wg3xCgXSL3TU+vhb4GRq+fg9HrB0x01xsU+euBcd8AFfkbwJNL10NGr7+BBvoTRR7SwAD49BrBw0ADo0doYJCJ0btRaPSEuQ6DIKN3I396Tdpuvik1euEmA6M30MHoDSQmOoMiPwgY981Qkb8ZLPIDIKN3i4EGbgE0cCukgVtho0fwcKuB0SM0MNjE6A0WGj1hrsNgyOgN5o2e9J2ft6VGL9xmYPRudzB6twMT3RCDIj8EGPdQqMgPBYv8QMjo3WGggTsADdwJaeBO2OgRPAwxMHqEBoaaGL1hQqMnzHUYChm9YbzRk77zc3hq9MJwA6N3l4PRuwuY6O42KPJ3A+MeARX5EWCRvwUyeiMNNDAS0MA9kAbugY0ewcMwA6NHaGC4idG7V2j0hLkOwyGjdy9u9OpI3/l5X2r0wn0GRm+Ug9EbBUx09xsU+fuBcT8AFfkHwCJ/G2T0HjTQwIOABkZDGhgNGz2ChxEGRo/QwEgTo/eQ0OgJcx1GQkbvId7o1VYavYfTW8LDwwZGb0wJhne1OOsoxTk2FWcYayDOR0zEKX1ewaOpOMOjBuJ8zESc0rI+Lu3fhHEG4nzcoX/zOLB+ecJg7f4EMO7x0Np9PLh2Hwb1byYYaGACoIEnIQ08CfdvCB7uM+jfEBoYZdK/eUrYvxHmOoyC+jdPmfVvJuryY/sg5YkGRm9S0o3ecGqTxuBBypOITRqTCf5p4QQvzHUYbWAMngZ08wxkDp/J9Vv3fZLc+52cFrYw2aCwTUl6YbsLKmxjDArbFGCCGmtS2J4VFjZhrsNYg8L2LKCb56DC9hxf2LooC9vUdN8oTDUobNNM9o26KsX5fCrO8LyBOF/YHzc1p+sGbfuGgOkG4pzhsKk5A7A4LxpsaL0IjPslyNplvpd6Ovy90LJwpoEGZgIamAVpYFYJ9g0BBA+PGSzxCA2MM2kNvCxsDQhzHcZBm5ovl6DfEKBdIr+Snl4LrxgYvVcdjN6rwEQ326DIzwbG/RpU5F8DTy7dDxm91w008DqggTcgDbwBn14jeBhvYPQIDUwwMXpzhEZPmOswATJ6c/jTa9J285up0QtvGhi9txyM3lvARDfXoMjPBcY9Dyry88AiPxoyem8baOBtQAPvQBp4BzZ6BA8TDYweoYFJJkZvvtDoCXMdJkFGbz5v9KTv/FyQGr2wwMDovetg9N4FJrr3DIr8e8C4F0JFfiFY5MdARm+RgQYWARp4H9LA+7DRI3iYbGD0CA1MMTF6HwiNnjDXYQpk9D7gjZ70nZ+LU6MXFhsYvSUORm8JMNF9aFDkPwTG/RFU5D8Ci/yjkNFbaqCBpYAGlkEaWAYbPYKHqQZGj9DANBOj97HQ6AlzHaZBRu9j3uhJ3/n5SWr0wicGRm+5g9FbDkx0KwyK/Apg3J9CRf5TsMg/Dhm9zww08BmggZWQBlbCRo/gYbqB0SM0MMPE6K0SGj1hrsMMyOitwo1e3ZpKo/d5ekt4+NzA6H1RguFdLc5aSnGuTsUZVhuIc42JOKXPK/gyFWf40kCcX5mIU1rW16b9m7DWQJzrHPo364D1y9cGa/evgXF/A63dvwHX7hOh/s16Aw2sBzSwAdLABrh/Q/Aw06B/Q2hglkn/5lth/0aY6zAL6t98a9a/+U6XH9sHKX9nYPQ2Jt3oTYKK/KsGD1LeSDxExGSC3ySc4IW5DrMNjMEmQDffQ+bw+1y/dd8nyb3fH9LCFn4wKGybk17YnoYK2xsGhW0zMEHNMSlsW4SFTZjrMMegsG0BdPMjVNh+5AtbfWVh+yndNwo/GRS2rSb7Rg2U4tyWijNsMxDnz/vjpuYvukHbviHgFwNx/uqwqfkrYHG2G2xobQfG/Rtk7TLfSz0d/jloWfi7gQZ+BzSwA9LAjhLsGwIIHuYaLPEIDcwzaQ3sFLYGhLkO86BNzZ0l6DcEaJfIf6Sn18IfBkbvTwej9ycw0e0yKPK7gHHvhor8bvDk0vOQ0fvLQAN/ARr4G9LA3/DpNYKH+QZGj9DAAhOj94/Q6AlzHRZARu8f/vSatN28JzV6YY+B0fvXwej9C0x0+Uomf4LP/Eb1uA8oyUxQme+NIJHOgIxefgMN5Ac0cCCkgQNLskaP4GGhgdEjNLDIxOgdpNNqEOY6LIKM3kElcaMnfedngZKp0StQMvm/sWBJA6NXEJjoDjYo8gcD4z4EKvKHgEV+JmT0ChlooBCggcKQBgrDRo/gYbGB0SM0sMTE6B0qNHrCXIclkNE7lDd60nd+HpYavXCYgdE73MHoHQ5MdEUMinwRYNxHQEX+CLDIvwIZvSMNNHAkoIGikAaKwkaP4GGpgdEjNLDMxOgVExo9Ya7DMsjoFeONnvSdn0elRi8cZWD0ijsYveLARFfCoMiXAMZdEiryJcEi/xpk9EoZaKAUoIHSkAZKw0aP4GG5gdEjNLDCxOiVERo9Ya7DCsjolcGNXr0aSqNXVjiXuBq9sgZGr1xJhne1OINSnOVTcYbyBuKsYCJO6fMKKqbiDBUNxFnJRJzSsh6l/ZsQGYgzx6F/kwOsXyobrN0rA+M+Glq7Hw2u3edC/ZtjDDRwDKCBYyENHAv3bwgeVhr0bwgNrDLp31QR9m+EuQ6roP5NFbP+zXG6/Ng+SPk4A6N3fNKN3jyoyK82eJDy8cAEv8Zkgj9BOMELcx3WGBiDEwDdVIXMYdVcv3XfJ8m93xPTwhZONChsJyW9sL0NFba1BoXtJGCCWmdS2KoJC5sw12GdQWGrBuimOlTYqvOFra6ysJ2c7huFkw0KWw2TfaN6SnGGVJwhGIiz5v64qVlLN2jbNwTUMhBnbYdNzdqAxaljsKFVBxh3XcjaZb6Xejr8e9CysJ6BBuoBGqgPaaB+SfYNAQQP6w2WeIQGNpi0BhoIWwPCXIcN0KZmg5L0GwK0S+SG6em10NDA6J3iYPROASa6Uw2K/KnAuBtBRb4ReHLpfcjoNTbQQGNAA6dBGjgNPr1G8LDRwOgRGthkYvROFxo9Ya7DJsjonc6fXpO2m5ukRi80MTB6TR2MXlNgojvDoMifAYz7TKjInwkW+SWQ0WtmoIFmgAaaQxpoDhs9gofNBkaP0MAWE6N3ltDoCXMdtkBG7yze6Enf+Xl2avTC2QZGr4WD0WsBTHQtDYp8S2Dc50BF/hywyC+FjN65Bho4F9BAK0gDrWCjR/Cw1cDoERrYZmL0WguNnjDXYRtk9FrzRk/6zs/zUqMXzjMweuc7GL3zgYmujUGRbwOMuy1U5NuCRf4TyOhdYKCBCwANXAhp4ELY6BE8/Gpg9AgNbDcxeu2ERk+Y67AdMnrteKMnfedn+9TohfYGRu8iB6N3ETDRXWxQ5C8Gxt0BKvIdwCL/KWT0OhpooCOggUsgDVwCGz2Chx0GRo/QwE4To3ep0OgJcx12QkbvUt7o9VAavU7pLeGhk4HR61yS4V0tzp5KcV6WijNcZiDOyz3EWV/6vIIuqThDFwNxdjWZOaVlvVvavwndDMTZ3aF/0x1Yv/QwWLv3AMbdE1q79wTX7quh/s0VBhq4AtDAlZAGroT7NwQPuwz6N4QGdpv0b3oJ+zfCXIfdUP+ml1n/prcuP7YPUu5tYPSuSrrRWwMV+X8MHqR8FTDB7zGZ4K8WTvDCXIc9BsbgakA310Dm8Jpcv3XfJ8m93z5pYQt9DArbtUkvbF9Che2AWskvbNcCE1T+WnpRZj7qwnadsLAJcx3yJ1w3mUn8OkA3faHC1hcvbPVrKwtbv3TfKPQzKGzXm2xq1lGK84ZUnOEGA3H23x83NQfoBm37hoABBuK80WFT80bA4txksKF1EzDugZC1y3wv9XT4b6Bl4SADDQwCNHAzpIGbS7JvCCB4KGCwxCM0UNCkNXCLsDUgzHVQxi83Q7eUpN8QoF0i35qeXgu3Ghi9wQ5GbzAw0d1mUORvA8Z9O1TkbwdPLn0LGb0hBhoYAmhgKKSBofDpNYKHQgZGj9BAYROjd4fQ6AlzHQpDRu8O/PSatt18Z2r0wp0GRm+Yg9EbBkx0ww2K/HBg3HdBRf4usMhvgoze3QYauBvQwAhIAyNgo0fwcLiB0SM0UMTE6I0UGj1hrkMRyOiN5I2e9J2f96RGL9xjYPTudTB69wIT3X0GRf4+YNyjoCI/CizymyGjd7+BBu4HNPAApIEHYKNH8FDUwOgRGihmYvQeFBo9Ya5DMcjoPcgbPek7P0enRi+MNjB6DzkYvYeAie5hgyL/MDDuMVCRHwMW+Z8gozfWQANjAQ08AmngEdjoETyUMDB6hAZKmhi9R4VGT5jrUBIyeo/yRk/6zs/HUqMXHjMweuMcjN44YKJ73KDIPw6M+wmoyD8BFvmfIaM33kAD4wENTIA0MAE2egQPZQyMHqGBsiZG70mh0RPmOpSFjN6TvNHrpjR6T6W3hIenDIzexJIM72pxdleKc1IqzjDJQJxPm4hT+ryCZ1JxhmcMxDnZRJzSsj4l7d+EKQbifNahf/MssH55zmDt/hww7qnQ2n0quHbfAfVvphloYBqggechDTwP928IHioY9G8IDVQ06d+8IOzfCHMdKkL9mxfM+jfTdfmxfZDydAOjNyPpRm8nVORzDB6kPAOY4CubTPAvCid4Ya5DZQNj8CKgm5cgc/hSrt+675Pk3u/MtLCFmQaFbVbSC9sfUGE71qCwzQImqComhe1lYWET5jpUMShsLwO6eQUqbK/gha1BTWVhezXdNwqvGhS22R77Rg1qKcX5WirO8JqBOF/fHzc139AN2vYNAW8YiHOOw6bmHMDivGmwofUmMO63IGuX+V7q6fB/Q8vCuQYamAtoYB6kgXkl2TcEEDycYLDEIzRQ1aQ18LawNSDMdagKbWq+XZJ+Q4B2ifxOenotvGNg9OY7GL35wES3wKDILwDG/S5U5N8FTy79Cxm99ww08B6ggYWQBhbCp9cIHqoZGD1CA9VNjN4iodET5jpUh4zeIvz0mrbd/H5q9ML7BkbvAwej9wEw0S02KPKLgXEvgYr8ErDI5y/GGL0PDTTwIaCBjyANfAQbPYKHYGD0CA3UNDF6S4VGT5jrUBMyekt5oyd95+ey1OiFZQZG72MHo/cxMNF9YlDkPwHGvRwq8svBIl8AMnorDDSwAtDAp5AGPoWNHsFDHQOjR2igronR+0xo9IS5DnUho/cZb/Sk7/xcmRq9sNLA6K1yMHqrgInuc4Mi/zkw7i+gIv8FWOQPgYzeagMNrAY0sAbSwBrY6BE8NDAweoQGGpoYvS+FRk+Y69AQMnpf8kZP+s7Pr1KjF74yMHprHYzeWmCiW2dQ5NcB4/4aKvJfg0X+UMjofWOggW8ADayHNLAeNnoED40MjB6hgcYmRm+D0OgJcx0aQ0ZvA2/0uiiN3rfpLeHhWwOj911Jhne1OLsqxbkxFWfYaCDOTSbilD6v4PtUnOF7A3H+YCJOaVnfnPZvwmYDcW5x6N9sAdYvPxqs3X8Exv0TtHb/CVy7F4X6N1sNNLAV0MA2SAPb4P4NwUMTg/4NoYGmJv2bn4X9G2GuQ1Oof/OzWf/mF11+bB+k/IuB0fs16UavGFTkmxk8SPlXYIJvbjLBbxdO8MJch+YGxmA7oJvfIHP4W67fuu+T5N7v72lhC78bFLYdSS9sR0GFrYVBYdsBTFAtTQrbTmFhE+Y6tDQobDsB3fwBFbY/8MLWpYaysP2Z7huFPw0K2y6PfaMuQSnO3ak4w24Dcf61P25q/q0btO0bAv42EOc/Dpua/wAWZ4/BhtYeYNz/QtYu873U0+FLQ8vCfKWSr4HMb1SP+4BSjAYy30u+IYDgoZXBEo/QQGuT1kB+nVaDMNehNbSpmb8U/YYA7RL5QF1+bE+vHVgq+b/xoFIGRu8gYKIrYFDkCwDjLggV+cz3RpBIy0FG72ADDRwMaOAQSAOHgBqgeGhjYPQIDbQ1MXqFhEZPmOvQFjJ6hXIxtO+T5HZz4dTohcIGRu9QB6N3KDDRHWZQ5A8Dxn04VOQPB4t8RcjoFTHQQBFAA0dAGjgCNnoED+0MjB6hgfYmRu9IodET5jq0h4zekbzRk77zs2hq9EJRA6NXzMHoFQMmuqMMivxRwLiLQ0W+OFjkcyCjV8JAAyUADZSENFASNnoEDx0MjB6hgY4mRq+U0OgJcx06QkavFG/0pO/8LJ0avVDawOiVcTB6ZYCJrqxBkS8LjLscVOTLgUX+GMjolTfQQHlAAxUgDVSAjR7BQycDo0dooLOJ0asoNHrCXIfOkNGryBs96Ts/K6VGL1QyMHqRg9GLgIkux6DI5wDjrgwV+cpgkT8OMnpHG2jgaEADx0AaOAY2egQPXQyMHqGBriZG71ih0RPmOnSFjN6xvNGrrzR6VYRziavRq2Jg9I4rxfCuFmcDpTiPT8UZjjcQ5wkm4pQ+r6BqKs5Q1UCcJ5qIU1rWT0r7N+EkA3FWc+jfVAPWL9UN1u7VgXGfDK3dTwbX7tWg/k0NAw3UADQQIA0EuH9D8NDDoH9DaKCnSf+mprB/I8x16An1b2qa9W9q6fJj+yDlWgZGr3bSjV51qMj3MniQcm1ggu9tMsHXEU7wwlyH3gbGoA6gm7qQOayb67fu+yS591svLWyhnkFhq5/0wnYyVNiuMShs9YEJqo9JYWsgLGzCXIc+BoWtAaCbhlBha8gXth7KwnZKum8UTjEobKea7Bv1VIqzUSrO0MhAnI33x03N03SDtn1DwGkG4jzdYVPzdMDiNDHY0GoCjLspZO0y30s9Hb42tCw8w0ADZwAaOBPSwJml2DcEEDz0NVjiERroZ9IaaCZsDQhzHfpBm5rNSuFvCJAukZunp9dCcwOjd5aD0TsLmOjONijyZwPjbgEV+RbgyaV6kNFraaCBloAGzoE0cA58eo3gob+B0SM0MMDE6J0rNHrCXIcBkNE7lz+9Jm03t0qNXmhlYPRaOxi91sBEd55BkT8PGPf5UJE/HyzyDSGj18ZAA20ADbSFNNAWNnoEDwMNjB6hgUEmRu8CodET5joMgozeBbjR6yp95+eFqdELFxoYvXYORq8dMNG1Nyjy7YFxXwQV+YvAIt8IMnoXG2jgYkADHSANdICNHsHDrQZGj9DAYBOj11Fo9IS5DoMho9eRN3rSd35ekhq9cImB0bvUwehdCkx0nQyKfCdg3J2hIt8ZLPKnQ0bvMgMNXAZo4HJIA5fDRo/gYYiB0SM0MNTE6HURGj1hrsNQyOh14Y2e9J2fXVOjF7oaGL1uDkavGzDRdTco8t2JJ2pBRb4HWOTPgIxeTwMN9AQ0cAWkgStgo0fwMMzA6BEaGG5i9K4UGj1hrsNwyOhdyRu9ukqj1yu9JTz0MjB6vUsxvKvFWU8pzqtScYarDMR5tYk4pc8ruCYVZ7jGQJx9TMQpLevXpv2bcK2BOK9z6N9cR9xEb7B270vcRA+t3fuBa/cWUP/megMNXA9o4AZIAzfA/RuChxEG/RtCAyNN+jf9hf0bYa7DSKh/09+sfzNAlx/bBykPMDB6Nybd6LWEivx9Bg9SvhGY4EeZTPA3CSd4Ya7DKANjcBNxLyJkDgfm+q37Pknu/Q5KC1sYZFDYbk56YTsHKmwPGhS2m4EJarRJYbtFWNiEuQ6jDQrbLcS9V1Bhu5UvbN2UhW1wum8UBhsUtttM9o26K8V5eyrOcLuBOIfsj5uaQ3WDtn1DwFADcd7hsKl5B2Bx7jTY0LqTOIQLWbvM91JPhz8fWhYON9DAcEADd0EauKsU+4YAgocxBks8QgNjTVoDdwtbA8Jch7HQpubdpeg3BGiXyCPS02thhIHRG+lg9EYCE909BkX+HmDc90JF/l7w5NIF1Ma2gQbuIza2IQ2Mgk+vETw8ZmD0CA2MMzF69wuNnjDXYRxk9O7nT69J280PpEYvPGBg9B50MHoPEpvdBkV+NDDuh6Ai/xBY5NtDRu9hAw08THSxIA2MgY0ewcN4A6NHaGCCidEbKzR6wlyHCZDRG8sbPek7Px9JjV54xMDoPepg9B4lVvIGRf4xYiUPFflxYJHvABm9xw008DiggScgDTwBGz2Ch4kGRo/QwCQTozdeaPSEuQ6TIKM3njd60nd+TkiNXphgYPSedDB6TwIT3VMGRf4porBBRX4iWOQvhYzeJAMNTAI08DSkgadho0fwMNnA6BEamGJi9J4RGj1hrsMUyOg9gxu9btJ3fk5OjV6YbGD0pjgYvSnARPesQZF/Fhj3c1CRfw4s8pdBRm+qgQamAhqYBmlgGmz0CB6mGhg9RAMmRu95odET5jpMg4ze87zRq600ei+kt4SHFwyM3vRSDO9qcdZRinNGKs4ww0CcL5qIU/q8gpdScYaXDMQ500Sc0rI+K+3fhFkG4nzZoX/zMrB+ecVg7f4KMO5XobX7q+DavQfUv5ltoIHZgAZegzTwGty/IXiYbtC/ITQww6R/87qwfyPMdZgB9W9eN+vfvKHLj+2DlN8wMHpzkm70ekJFfqbBg5TnABP8LJMJ/k3hBC/MdZhlYAzeBHTzFmQO38r1W/d9ktz7nZsWtjDXoLDNS3phuwIqbK8aFLZ5wAQ126SwvS0sbMJch9kGhe1tQDfvQIXtHb6wdVEWtvnpvlGYb1DYFpjsG3VVivPdVJzhXQNxvrc/bmou1A3a9g0BCw3EuchhU3MRYHHeN9jQeh8Y9weQtct8L/V0+KuhZeFiAw0sBjSwBNLAklLsGwIIHt4wWOIRGphj0hr4UNgaEOY6zIE2NT8sRb8hQLtE/ig9vRY+MjB6Sx2M3lJgoltmUOSXAeP+GCryH4Mnl66FjN4nBhr4BNDAckgDy+HTawQPcw2MHqGBeSZGb4XQ6AlzHeZBRm8Ff3pN2m7+NDV64VMDo/eZg9H7DJjoVhoU+ZXAuFdBRX4VWOT7QUbvcwMNfA5o4AtIA1/ARo/gYb6B0SM0sMDE6K0WGj1hrsMCyOit5o2e9J2fa1KjF9YYGL0vHYzel8BE95VBkf8KGPdaqMivBYt8f8jorTPQwDpAA19DGvgaNnoEDwsNjB6hgUUmRu8bodET5josgozeN7zRk77zc31q9MJ6A6O3wcHobQAmum8Nivy3wLi/g4r8d2CRvwkyehsNNLAR0MAmSAObYKNH8LDYwOgRGlhiYvS+Fxo9Ya7DEsjofc8bPek7P39IjV74wcDobXYwepuBiW6LQZHfAoz7R6jI/wgW+Zsho/eTgQZ+AjSwFdLAVtjoETwsNTB6hAaWmRi9bUKjJ8x1WAYZvW240eteU2n0fk5vCQ8/Gxi9X0oxvKvFWUspzl9TcYZfDcS53USc0ucV/JaKM/xmIM7fTcQpLes70v5N2GEgzp0O/ZudwPrlD4O1+x/AuP+E1u5/gmv3IVD/ZpeBBnYBGtgNaWA33L8heFhu0L8hNLDCpH/zl7B/I8x1WAH1b/4y69/8rcuP7YOU/zYwev8k3egNhYr8SoMHKf9D3GNpMsHvEU7wwlyHVQbGYA+gm38hc/hvrt+675Pk3m++0mlhE8YA+40HlE54YbsDKmyrDQpbJjnqca8xKWz5dcIMwlyHNQaFLT+gmwNLM4XtwNJ4YauvLGwHCePgWtgOMihsBUoz85xanA2U4iyYijMUNBDnwSbilPa6DtEN2vYNAYcYiLNQ0pcEGWtcCLA4hUsn39oVBsZ9KGTtMt9LPR3+bmhZeJiBBg4DNHA4pIHDS7NvCCB4WGuwxCM0sM6kNVBE2BoQ5jqsgzY1i5Sm3xCgXSIfocuP7em1IwyM3pEORu9IYKIralDkiwLjLgYV+cz3RpBI74GM3lEGGjgK0EBxSAPFQQ1QPKw3MHqEBjaYGL0SQqMnzHXYABm9ErkY2vdJcru5ZGr0QkkDo1fKweiVAia60gZFvjQw7jJQkS8DFvlRkNEra6CBsoAGykEaKAcbPYKHjQZGj9DAJhOjV15o9IS5Dpsgo1eeN3rSd35WSI1eqGBg9Co6GL2KwERXyaDIVwLGHUFFPgKL/IOQ0csx0EAOoIHKkAYqw0aP4GGzgdEjNLDFxOgdLTR6wlyHLZDRO5o3etJ3fh6TGr1wjIHRO9bB6B0LTHRVDIp8FWDcx0FF/jiwyD8MGb3jDTRwPKCBEyANnAAbPYKHrQZGj9DANhOjV1Vo9IS5Dtsgo1eVN3rSd36emBq9cKKB0TvJweidBEx01QyKfDVg3NWhIl8dLPKPQEbvZAMNnAxooAakgRqw0SN4+NXA6BEa2G5i9ILQ6AlzHbZDRi+ADI2L59FMPc0v/t7Md+77rrzmu6bBnFwT4LEWNCfXgvVE1OXaBhqoDWigDqSBOnBdJnjYYVCXCQ3sNKnLdYV1WZjrsBOqy3X/hwaMOqb1hDHtFHTf1TkwMa1Hbg4cmS/fE8X0fNaH5uj6/4G+auTtE5T6yh2HvMa0ARTTBqC+Mp63NvHU+4TXvYzfGwCMe7dJ3WsoZEiY67A74brJ8FIH0M0/BrzcCIx7jwkvpwh5EeY67DHgpS6gmwNqJ5+Xm4Bx56/twcupQl6EuQ4u8WskjF8X4RqqK7SGakT296A1VGPI7zfOwhpKqa/GwjXUaVBMTwP19TikrwIJr3GZ3uHtQI0raDJHny5kSJjroIxfboZOz9UnVmvpCYihQgYM3QkwVNiEoSZChoS5DoUhhpqADGXWWvUALR1usNa6Cxh3EROGmgoZEuY6FEm4bjK81Ad0U9SAlxHAuIuZ8HKGkBdhroNL/M4Uxu8aYW+iD9SbOBNcO06EfG8zaB3dLAu9CaW+mgl7E82hmDbPwpmMs4Qx7Stkth/E7Fkgs89AzJ4N6evsLDCr1NfZQmZbQDFtAZ/JaAD4sxIGvvQxYNwlTXxVSyFDwlyHkgbruIaAbsoY8PI48ShQE17OEfIizHUoa8DLKYBuKhjwMh4Yd0UTXs4V8iLMdXCJXyth/PoL11ADoDVUK9DjToPWUK0hv986C2sopb5aC9dQ50ExPQ/U1/OQvnIM9pOfBWpcZZM5+nwhQ8Jch8rQfvL54H7yCxBDxxow9DzAUBUThtoIGRLmOlSBGGoDn8k4FdDSCQZrrRnAuKuaMNRWyJAw16GqQW+iEaCbaga8vASMu7oJLxcIeRHmOrjE70Jh/IYIexNDod7EheDacSbke9tB6+h2WehNKPXVTtibaA/FtH0WzmRcJIzpMCGzwyFmLwKZfQVi9mJIXxdngVmlvi4WMtsBimkH+ExGY8CfBQNf+g4w7pomvqqjkCFhrkNNg3XcaYBu6hjwsgAYd10TXi4R8iLMdahrwMvpgG4aGPDyHjDuhia8XCrkRZjr4BK/TsL4jRCuoUZCa6hOoMedA62hOkN+v3MW1lBKfXUWrqEug2J6GaivNyF9NTLYT14G1LjGJnP05UKGhLkOjaH95MvB/eS3IIaaGDC0AmCoqQlDXYQMCXMdmkIMdYHPZDQBtNTMYK21Ehh3cxOGuirvKxYy1NygN9EU0E0LA14+B8bd0oSXbkJehLkOLvHrLozfGGFvYizUm+gOrh3nQ763B7SO7pGF3oRSXz2EvYmeUEx7ZuFMxhXCmD4mZHYcxOwVILPvQcxeCenryiwwq9TXlUJme0Ex7QWfyTgD8GetDHzp98C4W5v4qt5ChoS5Dq0N1nFnArppY8DLZmDcbU14uUrIizDXoa0BL80A3bQz4OVHYNztTXi5WnnWXciLS/yuEcZvvHANNQFaQ10Detwl0BqqD+T3+2RhDaXUVx/hGupaKKbXgvr6ENJXB4P95B1AjetoMkdfJ2RImOvQEdpPvg7cT/4IYqiTAUO7AIY6mzDUV/meayFDnSGG+sJnMpoDWupisNb6Gxh3VxOG+infcyhkqKtBb+IsQDc9DHjZA4y7pwkv1yv3fIW8uMTvBmH8pgp7E9Og3sQN4NpxOeR7+0Pr6P5Z6E0o9dVf2JsYAMV0QBbOZNwojOl0IbMzIGZvBJn9DGL2JkhfN2WBWaW+bhIyOxCK6cAsMDtIGNOZQmZnQcwOApn9HGL2ZkhfN2eBWaW+bhYyewsU01vgc1TFiuv11Svha8mn43GfDKwle5ushW4VMiTMdeht0Hs5CuDlmoSP+xmIlz4mvAxWvvdUyEsfA16KA7z0Tfi4J0O89DPh5TblO0eFvLjE73Zh/F4VrqFmQ2uo20GPuxZaQw2B/P6QLKyhlPoaIlxDDYViOhTU1zqqF25wBqQ8UNsHmMzRdyj7/cIaNwA6A3IHeAbka4ihgQYMVQIYGmTC0J1ChoS5DoMghu6Ez1HlAFq6NeEMTYHWWoNNGBomZEiY6zDYoDdRGeBlSMLH/SzEy1ATXoYr1z5CXlzid5cwfvOFvYkFUG8iM95D9n6vmsXvIN97N7SOvjtXLP7f9FUjb5+g1Nfdwt7ECCimI/6DmOb1t48UxnShkNlFELMjwX7P9xCz90D6uicL/USlvu4RMnsvFNN7s3CO6j5hTBcLmV0CMXsfyOwWiNlRkL5GZYFZpb5GCZm9H4rp/Vlg9gFhTJcKmV0GMfsAyOxWiNkHIX09mAVmlfp6UMjsaCimo7PA7EPCmC4XMrsCYvYhkNlfIGYfhvT1cBaYVerrYSGzY6CYjskCs2OFMV0pZHYVxOxYkNnfIGYfgfT1SBaYVerrESGzj0IxfRS+x+AsYJ9lWML3WZ6D9lmGm+wTPCZkSJjrMNxgX/JsgJcRCR/3VIiXkSa8jBPyIsx1GGnAS0uAl/sSPu5pEC+jTHh5XMiLMNfBJX5PCOO3WriGWgOtoZ4APe4uaA01HvL747OwhlLqa7xwDTUBiukEUF+7qV64wfnoC4HaPtpkjn5S2e8X1rjR0PnoJ8Hz0X9BDI0xYOhigKGxJgw9JWRImOswFmLoKfgeg0sALT2WcIaeh9Za40wYmihkSJjrMM6gN9EJ4GV8wsf9AsTLBBNeJinXPkJeXOL3tDB+G4W9iU1Qb+Jp8B6DfEUZ3/sMtI5+Jgv3GCj19YywNzEZiunkLNxjMEUY081CZrdAzE4B+z0HQsw+C+nr2Sz0E5X6elbI7HNQTJ/LwjmqqcKYbhUyuw1idirIbEGI2WmQvqZlgVmlvqYJmX0eiunzWWD2BWFMfxUyux1i9gWQ2UIQs9MhfU3PArNKfU0XMjsDiumMLDD7ojCmO4TM7oSYfRFk9jCI2Zcgfb2UBWaV+npJyOxMKKYzs8DsLGFMdwmZ3Q0xOwtk9giI2Zchfb2cBWaV+npZyOwrUExfge8xGAHss0xM+D7LdGifZZLJPsGrQoaEuQ6TDPYl7wF4mZzwcc+AeJliwstsIS/CXIcpBrzcB/AyNeHjfhHiZZoJL68JeRHmOrjE73Vh/P4RrqH2QGuo10GPWwJaQ70B+f03srCGUurrDeEaag4U0zmgvkpSvXCD89GPALV9hskc/aay3y+scTOg89FvguejS0EMzTRg6HGAoVkmDL0lZEiY6zALYugt+B6DCYCWXk04Qy9Ba63ZJgzNFTIkzHWYbdCbeArg5Y2Ej3smxMscE17mKdc+Ql5c4ve2MH6Fauq+q3BNpma/Dd5jUB7yve9A6+h3snCPgVJf7wh7E/OhmM7Pwj0GC4QxPVzIbBGI2QVgv6cSxOy7kL7ezUI/Uamvd4XMvgfF9L0snKNaKIxpUSGzxSBmF4LMVoaYXQTpa1EWmFXqa5GQ2fehmL6fBWY/EMa0hJDZkhCzH4DMHgsxuxjS1+IsMKvU12Ihs0ugmC7JArMfCmNaRshsWYjZD0Fmj4eY/QjS10dZYFapr4+EzC6FYro0C8wuE8a0gpDZihCzy0BmT4SY/RjS18dZYFapr4+FzH4CxfQT+B6Dj4B9lrkJ32eZBe2zzDPZJ1guZEiY6zDPYF9yGcDL/ISP+2WIlwUmvKwQ8iLMdVhgwMsnAC8LEz7uVyBeFpnw8qmQF2Gug0v8PhPGL0e4hqoMraE+Az1ugNZQKyG/vzILayilvlYK11CroJiuAvVVk+qFG5yPXgPU9iUmc/Tnyn6/sMYtgc5Hfw6ej64FMbTUgKF1AEPLTBj6QsiQMNdhGcTQF/A9BusBLS1POEOvQmutFSYMrRYyJMx1WGHQm/gW4GVlwsc9G+JllQkva5RrHyEvLvH7Uhi/asLeRHWoN/EleI9Bfcj3fgWto7/Kwj0GSn19JexNrIViujYL9xisE8Y0CJmtCTG7Duz3nAIx+zWkr6+z0E9U6utrIbPfQDH9JgvnqNYLY1pHyGxdiNn1ILONIWY3QPrakAVmlfraIGT2Wyim32aB2e+EMW0gZLYhxOx3ILNNIGY3QvramAVmlfraKGR2ExTTTVlg9nthTBsJmW0MMfs9yOyZELM/QPr6IQvMKvX1g5DZzVBMN2eB2S3CmDYRMtsUYnYLyOxZELM/Qvr6MQvMKvX1o5DZn6CY/gTfY3BECb2+Vid8n+U1aJ9ljck+wVYhQ8JchzUG+5JFAV7WJnzcr0O8rDPhZZuQF2GuwzoDXo4CeFmf8HG/AfGywYSXn4W8CHMdXOL3izB+zYRrqObQGuoX0OO2gtZQv0J+/9csrKGU+vpVuIbaDsV0O6iv1lQv3OB8dAWgtm8ymaN/U/b7hTVuE3Q++jfwfPR5EEObDRjKARjaYsLQ70KGhLkOWyCGfofvMTgG0NLWhDM0B1prbTNhaIeQIWGuwzaD3kQVgJdfEz7uNyFetpvwslO59hHy4hK/P4TxayPsTbSFehN/gPcYXAj53j+hdfSfWbjHQKmvP4W9iV1QTHdl4R6D3cKYthMy2x5idjfY77kIYvYvSF9/ZaGfqNTXX0Jm/4Zi+ncWzlH9I4xpByGzHSFm/wGZ7QgxuwfS154sMKvU1x4hs/9CMf03C8zmK6OLaSchs50hZjPjjfZ+r5rZThCzB5RhYnFAGZ5Zpb5yxyGvMc0PxTR/GZ7ZA4Ux7SJktivE7IEgs5dDzB4E6eugLDCr1NdBQmYLQDEtkAVmCwpj2kPIbE+I2YIgs90gZg+G9HVwFphV6utgIbOHQDE9BNRXZp+lLbDPsiPh+yxvQfssO032CQoJGRLmOuw02Je8EOBlV8LHPRfiZbcJL4WFvAhzHXYb8NIe4OWfhI97HsTLHhNeDhXyIsx1cInfYcL49RKuoXpDa6jDQI/bC1pDHQ75/cOzsIZS6utw4RqqCBTTIqC+elO98DrJrnGZ89GXA7U9fx2POfoIZb9fN+agjF9uhjLjpc5HXwUxVMCAoe4AQwVNGDpSyJAw16EgxNCRIEOZtdYVgJYKJZyht6G1VmEThooKGRLmOhROuG4yvPQCeDk84eN+B+KliAkvxZRrHyEvLvE7Shi//sLexACoN5EZL3WPwXWQ7y0OraOLl+HvMVDqq7iwN1ECimmJMvw9BiWFMR0oZHYQxGxJsN9zPcRsKUhfpbLQT1Tqq5SQ2dJQTEtn4RxVGWFMbxUyOxhitgzI7ACI2bKQvspmgVmlvsoKmS0HxbRcFpgtL4zpECGzQyFmy4PMDoSYrQDpq0IWmFXqq4KQ2YpQTCtmgdlKwpgOEzI7HGK2EsjsLRCzEaSvKAvMKvUVCZnNgWKakwVmKwtjOkLI7EiI2cogs7dBzB4N6evoLDCr1NfRQmaPgWJ6DHyPwRhgn6VowvdZ5kP7LMVM9gmOFTIkzHUoZrAv+QjAS4mEj3sBxEtJE16qCHkR5jqUNODlMYCXMgkf97sQL2VNeDlOyIsw18ElfscL43efcA01ClpDHQ963GHQGuoEyO+fkIU1lFJfJwjXUFWhmFYF9TWc6oUbnI9+GqjtFU3m6BOV/X5hjasInY8+ETwffRfEUI4BQ88CDFU2YegkIUPCXIfKEEMnwfcYTAO0dGzCGXoPWmtVMWGompAhYa5DFYPexAsALyckfNwLIV6qmvBSXbn2EfLiEr+ThfF7TNibGAf1Jk4G7zG4F/K9NaB1dI0s3GOg1FcNYW8iQDENWbjHoKYwpuOFzE6AmK0J9nvuh5itBemrVhb6iUp91RIyWxuKae0snKOqI4zpRCGzkyBm64DMjoaYrQvpq24WmFXqq66Q2XpQTOtlgdn6wphOFjI7BWK2PsjsGIjZBpC+GmSBWaW+GgiZbQjFtGEWmD1FGNOpQmanQcyeAjL7KMTsqZC+Ts0Cs0p9nSpkthEU00ZZYLaxMKbThczOgJhtDDL7OMTsaZC+TssCs0p9nSZk9nQopqfD9xh8AeyzVEv4PssiaJ+lusk+QRMhQ8Jch+oG+5JrAF5Cwsf9PsRLTRNemgp5EeY61DTg5SuAlzoJH/cHEC91TXg5Q8iLMNfBJX5nCuM3U7iGmgWtoc4EPe5EaA3VDPL7zbKwhlLqq5lwDdUcimlzUF+TqF64wfnoTUBtb2gyR5+l7PcLa1xD6Hz0WeD56KchhhoZMLQFYKixCUNnCxkS5jo0hhg6G77HYCugpSYJZ2gxtNZqasJQCyFDwlyHpga9iZ8BXpolfNxLIF6am/DSUrn2EfLiEr9zhPGbK+xNzIN6E+eA9xg8B/nec6F19LlZuMdAqa9zhb2JVlBMW2XhHoPWwpjOFzK7AGK2NdjveR5i9jxIX+dloZ+o1Nd5QmbPh2J6fhbOUbURxnShkNlFELNtQGZnQMy2hfTVNgvMKvXVVsjsBVBML8gCsxcKY7pYyOwSiNkLQWZnQsy2g/TVLgvMKvXVTshseyim7bPA7EXCmC4VMrsMYvYikNlXIGYvhvR1cRaYVerrYiGzHaCYdsgCsx2FMV0uZHYFxGxHkNnXIGYvgfR1SRaYVerrEiGzl0IxvRS+x6BcSb2+WiR8n+VDaJ+lpck+QSchQ8Jch5YG+5IVAF5aJXzcH0G8tDbhpbOQF2GuQ2sDXioBvLRJ+LiXQry0NeHlMiEvwlwHl/hdLozfSuEaahW0hroc9LhzoTVUF8jvd8nCGkqpry7CNVRXKKZdQX3No3rhBuejTwBqe3uTObqbst8vrHHtofPR3cDz0W9DDHUwYKgawFBHE4a6CxkS5jp0hBjqDt9jUAPQUqeEM7QMWmt1NmGoh5AhYa5DZ4PeRE2Aly4JH/fHEC9dTXjpqVz7CHlxid8VwvitF/YmNkC9iSvAewzeg3zvldA6+sos3GOg1NeVwt5ELyimvbJwj0FvYUw3CpndBDHbG+z3vA8xexWkr6uy0E9U6usqIbNXQzG9OgvnqK4RxnSzkNktELPXgMwugZjtA+mrTxaYVeqrj5DZa6GYXpsFZq8TxnSrkNltELPXgcwuhZjtC+mrbxaYVeqrr5DZflBM+2WB2euFMf1VyOx2iNnrQWY/gZi9AdLXDVlgVqmvG4TM9odi2j8LzA4QxnSHkNmdELMDQGY/hZi9EdLXjVlgVqmvG4XM3gTF9Cb4HoPOwD5Lj4Tvs3wC7bP0NNknGChkSJjr0NNgX/JygJdeCR/3coiX3ia8DBLyIsx16G3AS1eAl2sSPu4VEC99THi5WciLMNfBJX63COO3S7iG2g2toW4BPe5qaA11K+T3b83CGkqpr1uFa6jBUEwHg/paQ/XCDc5HXw3U9n4mc/Rtyn6/sMb1g85H3waej/4SYqi/AUPXAQwNMGHodiFDwlyHARBDt8P3GFwPaGlgwhn6FFprDTJhaIiQIWGuwyCD3kR/gJdbEz7uzyBeBpvwMlS59hHy4hK/O4TxK1BL910FazE1+w7wHoNvIN97J7SOvjML9xgo9XWnsDcxDIrpsCzcYzBcGNNCQmYLQ8wOB/s930LM3gXp664s9BOV+rpLyOzdUEzvzsI5qhHCmB4uZLYIxOwIkNlNELMjIX2NzAKzSn2NFDJ7DxTTe7LA7L3CmBYVMlsMYvZekNnNELP3Qfq6LwvMKvV1n5DZUVBMR2WB2fuFMS0hZLYkxOz9ILM/Qcw+AOnrgSwwq9TXA0JmH4Ri+mAWmB0tjGkZIbNlIWZHg8z+DDH7EKSvh7LArFJfDwmZfRiK6cPwPQYTgX2WIQnfZ1kJ7bMMNdknGCNkSJjrMNRgX/JpgJdhCR/3KoiX4Sa8jBXyIsx1GG7Ay2SAlxEJH/fnEC8jTXh5RMiLMNfBJX6PCuNXQbiGqgitoR4FPe4OaA31GOT3H8vCGkqpr8eEa6hxUEzHgfraSfXCDc5HvwjU9lEmc/Tjyn6/sMaNgs5HPw6ej/4DYuhBA4ZeBhgabcLQE0KGhLkOoyGGnoDvMZgNaGlMwhn6AlprjTVhaLyQIWGuw1iD3sTrAC+PJXzcqyFexpnwMkG59hHy4hK/J4XxO0HYm6gK9SaeBO8x+BvyvU9B6+insnCPgVJfTwl7ExOhmE7Mwj0Gk4QxrSZktjrE7CSw3/MvxOzTkL6ezkI/Uamvp4XMPgPF9JksnKOaLIxpEDJbE2J2Mshs/mIMs1MgfU3JArNKfU0RMvssFNNns8Dsc8KY1hEyWxdi9jmQ2QIQs1MhfU3NArNKfU0VMjsNium0LDD7vDCmDYTMNoSYfR5k9hCI2Rcgfb2QBWaV+npByOx0KKbTs8DsDGFMGwmZbQwxOwNk9lCI2Rchfb2YBWaV+npRyOxLUExfgu8x+A7YZxmf8H2WNdA+ywSTfYKZQoaEuQ4TDPYlNwG8TEz4uL+EeJlkwsssIS/CXIdJBrz8APAyOeHj/griZYoJLy8LeRHmOrjE7xVh/JoI11BNoTXUK6DHLQqtoV6F/P6rWVhDKfX1qnANNRuK6WxQX8WoXrjB+ejtQG2fZjJHv6bs9wtr3DTofPRr4PnooyCGphswtBNgaIYJQ68LGRLmOsyAGHodvsdgF6ClmQlnaC201pplwtAbQoaEuQ6zDHoTfwG8vJrwca+DeJltwssc5dpHyItL/N4Uxq+VsDfRGupNvAneY1Aa8r1vQevot7Jwj4FSX28JexNzoZjOzcI9BvOEMW0jZLYtxOw8sN9TDmL2bUhfb2ehn6jU19tCZt+BYvpOFs5RzRfGtJ2Q2fYQs/NBZitCzC6A9LUgC8wq9bVAyOy7UEzfzQKz7wlj2kHIbEeI2fdAZnMgZhdC+lqYBWaV+looZHYRFNNFWWD2fWFMOwmZ7Qwx+z7I7DEQsx9A+vogC8wq9fWBkNnFUEwXZ4HZJcKYdhEy2xVidgnI7HEQsx9C+vowC8wq9fWhkNmPoJh+BN9jcFwpvb7eSPg+y9fQPssck32CpUKGhLkOcwz2JU8AeJmb8HF/A/Eyz4SXZUJehLkO8wx4ORHgZX7Cx70e4mWBCS8fC3kR5jq4xO8TYfx6CNdQPaE11Cegx60GraGWQ35/eRbWUEp9LReuoVZAMV0B6qs61Qs3OB9dB6jti0zm6E+V/X5hjVsEnY/+FDwffTLE0GIDhhoADC0xYegzIUPCXIclEEOfwfcYnApoaWnCGdoArbWWmTC0UsiQMNdhmUFvojHAy/KEj/tbiJcVJrysUq59hLy4xO9zYfz6CnsT/aDexOfgPQa1Id/7BbSO/iIL9xgo9fWFsDexGorp6izcY7BGGNP+QmYHQMyuAfs99SBmv4T09WUW+olKfX0pZPYrKKZfZeEc1VphTAcKmR0EMbsWZLYhxOw6SF/rssCsUl/rhMx+DcX06yww+40wprcKmR0MMfsNyGwjiNn1kL7WZ4FZpb7WC5ndAMV0QxaY/VYY0yFCZodCzH4LMns6xOx3kL6+ywKzSn19J2R2IxTTjVlgdpMwpsOEzA6HmN0EMnsGxOz3kL6+zwKzSn19L2T2ByimP8D3GPQG9llWJnyf5Tton2WVyT7BZiFDwlyHVQb7klcDvKxO+Lg3QrysMeFli5AXYa7DGgNe+gC8rE34uDdBvKwz4eVHIS/CXAeX+P0kjN8I4RpqJLSG+gn0uC2gNdRWyO9vzcIaSqmvrcI11DYopttAfbWkeuEG56NvAmr7BpM5+mdlv19Y4zZA56N/Bs9HnwMxtNGAoVsAhjaZMPSLkCFhrsMmiKFf4HsMbgO0tDnhDH0PrbW2mDD0q5AhYa7DFoPexBCAl60JH/cPEC/bTHjZrlz7CHlxid9vwviNEfYmxkK9id/AewzOh3zv79A6+vcs3GOg1Nfvwt7EDiimO7Jwj8FOYUwfEzI7DmJ2J9jvuQBi9g9IX39koZ+o1NcfQmb/hGL6ZxbOUe0SxnS8kNkJELO7QGbbQ8zuhvS1OwvMKvW1W8jsX1BM/8oCs38LYzpRyOwkiNm/QWY7QMz+A+nrnywwq9TXP0Jm90Ax3ZMFZv8VxnSykNkpELP/gsxeCjGbrywTi8z3Rvn+/+urRt4+Qamv3HHIa0wPgGJ6QFme2fy63x6mCpmdBjGbvyzH7GUQswdC+jowC8wq9XWgkNmDoJgeBOors88yHdhn+TXh+yyboX2W7Sb7BAWEDAlzHbYb7Eu+CPCyI+Hj3gLxstOEl4JCXoS5DjsNeJkJ8LIr4eP+EeJltwkvBwt5EeY6uMTvEGH8pgvXUDOgNdQhoMftAa2hCkF+v1AW1lBKfRUSrqEKQzEtDOqrJ9ULNzgf/SZQ2/eYzNGHChkS5jrsgc5HZ8ZLnY++AmLogLrJZ+htgKH8dT0YOkzIkDDXQRm/3AwdBjKUWWstALRUIOEM/QSttQqaMHS4kCFhrkPBhOsmw8t7AC+FEj7urRAvhU14KaJc+wh5cYnfEcL4vSHsTcyBehOZ8VL3GFwN+d4joXX0kWX5ewyU+jpS2JsoCsW0aFn+HoNiwpjOFTI7D2K2GNjvuRZi9ihIX0dloZ+o1NdRQmaLQzEtnoVzVCWEMZ0vZHYBxGwJkNl+ELMlIX2VzAKzSn2VFDJbCoppqSwwW1oY04VCZhdBzJYGme0PMVsG0leZLDCr1FcZIbNloZiWzQKz5YQxXSxkdgnEbDmQ2ZsgZstD+iqfBWaV+iovZLYCFNMKWWC2ojCmS4XMLoOYrQgyezPEbCVIX5WywKxSX5WEzEZQTCP4HoNfgH2WwxO+z7IN2mcpYrJPkCNkSJjrUMRgX3I7wEvRhI/7Z4iXYia8VBbyIsx1KGbAy+8ALyUSPu5fIF5KmvBytJAXYa6DS/yOEcZvuXANtQJaQx0Detwh0BrqWMjvH5uFNZRSX8cK11BVoJhWAfU1lOqFG5yP3gPU9rImc/Rxyn6/sMaVhc5HHweej74DYqiCAUP5S+vHXdGEoeOFDAlzHSpCDB0P32NQANBSTsIZ+hVaa1U2YegEIUPCXIfKBr2JgwFejk34uLdDvFQx4aWqcu0j5MUlficK47dW2JtYB/UmTgTvMbgb8r0nQevok7Jwj4FSXycJexPVoJhWy8I9BtWFMV0vZHYDxGx1sN9zD8TsyZC+Ts5CP1Gpr5OFzNaAYlojC+eogjCmG4XMboKYDSCzoyBma0L6qpkFZpX6qilkthYU01pZYLa2MKabhcxugZitDTL7IMRsHUhfdbLArFJfdYTM1oViWjcLzNYTxnSrkNltELP1QGYfhpitD+mrfhaYVeqrvpDZBlBMG2SB2YbKZ2QLmd0OMdsQZPYRiNlTIH2dkgVmlfo6RcjsqVBMT80Cs42EMd0hZHYnxGwjkNlxELONIX01zgKzSn01FjJ7GhTT0/bGtEB8HZxLY7k/at3Vyqcdy77P6WXJH1xW/71NhAKhxt2kbK4Aa773/9hYzC/+zQ1K62LaVDgZ/E/5yXOjaG9+1DGsLfyNZ5TV6kat8UyOzyirz82Z0IR9Zq4JO/P/Fcz33z9JnrDJ31nT5HcGk9+Zey6tkcfP//T78tyEjb/joHz6+e8g4XfVgXKdTzvmGv+3huRiUhaCzOR3SK7E5wMhUDjvnv/1IRIY9v0jdyya7TVtzcvuDci+6tFsb6XL/f81z8Ky6rS8O92ae6kPzYSuubk4ueoZLgNNM8iBi0HpcRrkpM6CnNRZYGsl01Z5GmitnGBwK8qtwHHoqibHWs8WrhiFuQ5VE66bDC/PALxUM+BlMMBLdRNeWgh5EeY6VDfgZTLASzDg5TaAl5omvLQU8iLMdahpwMsU4hiYAS/DAF7qmvByjvKom5CXuga8PAvw0sCAl+EALw1NeDlXyIsw16GhAS/PAbw0MuDlMYCXxia8tBLyIsx1aGzAy1SAlyYGvIwDeGlqwktrIS/CXIemBrxMA3hpZsDL4wAvzU14OU/IizDXobkBL88DvLQw4GUiwEtLE17OF/IizHVoacDLCwAvrQx4mQTw0tqElzZCXoS5Dq0NeJkO8NLGgJdXAV7amvDSVsiLMNehrQEvMwBe2hnwMhvgpb0JLxcIeRHmOrQ34OVFgJcOBry8BvDS0YSXC4W8CHMdOhrw8hLASycDXuYCvHQ24aWdkBdhrkNnA15mArx0MeBlHsBLVxNe2gt5EeY6dDXgZRbASw8DXpYDvPQ04eUiIS/CXIeeBry8DPDSy4CXFQAvvU14uVjIizDXobcBL68AvFxjwMunAC99THjpIORFmOvQx4CXVwFe+hrwshrgpZ8JLx2FvAhzHfoZ8DIb4KW/AS9rAF4GmPByiZAXYa7DAANeXgN4GWjAy1aAl0EmvFwq5EWY6zDIgJfXAV5uNeBlG8DLYBNeOgl5EeY6DDbg5Q2AlyEGvPwM8DLUhJfOQl6EuQ5DDXiZA/AyzICXHQAvw014uUzIizDXYbgBL28CvIww4GUnwMtIE14uF/IizHUYacDLWwAv9xnwUqiMftyjTHjpIuRFmOswyoCXuQAvDxrwUhjgZbQJL12FvAhzHUYb8DIP4GWMAS+HAryMNeGlm5AXYa7DWANe3gZ4ecyAl6IAL+NMeOku5EWY6zDOgJd3AF7GG/BSDOBlggkvPYS8CHMdJhjwMh/gZaIBL8cCvEwy4aWnkBdhrsMkA14WALxMNuClCsDLFBNerhDyIsx1mGLAy7sAL1MNeDkO4GWaCS9XCnkR5jpMM+DlPYCX6Qa8VAN4mWHCSy8hL8JchxkGvCwEeJlpwEt1gJdZJrz0FvIizHWYZcDLIoCXVw14aQLwMtuEl6uEvAhzHWYb8PI+wMsbBrw0BXiZY8LL1UJehLkOcwx4+QDgZa4BL2cAvMwz4eUaIS/CXId5BrwsBniZb8BLC4CXBSa89BHyIsx1WGDAyxKAl4UGvLQEeFlkwsu1Ql6EuQ6LDHj5EOBlsQEvnQBelpjwcp2QF2GuwxIDXj4CeFlqwEtngJdlJrz0FfIizHVYZsDLUoCX5Qa8XAbwssKEl35CXoS5DisMeFkG8LLSgJceAC+rTHi5XsiLMNdhlQEvHwO8rDbgpSfAyxoTXm4Q8iLMdVhjwMsnAC9rDXgZCPCyzoSX/kJehLkO6wx4WQ7wst6Al0EALxtMeBkg5EWY67DBgJcVAC8bDXi5GeBlkwkvNwp5EeY6bDLg5VOAl80GvAwBeNliwstNQl6EuQ5bDHj5DOBlqwEvQwFetpnwMlDIizDXYZsBLysBXn414GUMwMt2E14GCXkR5jpsN+BlFcDLDgNexgK87DTh5WYhL8Jch50GvHwO8LLLgJdHAF52m/Byi5AXYa7DbgNevgB4+ceAl/EAL3tMeLlVyIsw12GPAS+rAV4OqJd8XiYAvOSv58HLYCEvwlyH/AnXTYaXNQAvBQx4mQnwUtCEl9uEvAhzHQoa8PIlwEshA15mAbwUNuHldiEvwlyHwga8fAXwcrgBLy8DvBQx4WWIkBdhrkMRA17WArwUNeDlDYCXYia8DBXyIsx1KGbAyzqAlxIGvMwBeClpwssdQl6EuQ4lDXj5GuCljAEvSwFeyprwcqeQF2GuQ1kDXr4BeKlgwMsygJeKJrwME/IizHWoaMDLeoCXHANePgZ4qWzCy3AhL8Jch8oGvGwAeDnWgJeVAC9VTHi5S8iLMNehigEv3wK8nGDAyyqAl6omvNwt5EWY61DVgJfvAF6qGfCyGeClugkvI4S8CHMdqhvwshHgJRjwsgXgpaYJLyOFvAhzHWoa8LIJ4KWOAS8/ArzUNeHlHiEvwlyHuga8fA/w0sCAl18BXhqa8HKvkBdhrkNDA15+AHhpZMDLdoCXxia83CfkRZjr0NiAl80AL00MeClQVj/upia8jBLyIsx1aGrAyxaAl2YGvBQEeGluwsv9Ql6EuQ7NDXj5EeClhQEvBwO8tDTh5QEhL8Jch5YGvPwE8NLKgJfDAV5am/DyoJAXYa5DawNetgK8tDHgpQjAS1sTXkYLeRHmOrQ14GUbwEs7A15yAF7am/DykJAXYa5DewNefgZ46WDAS2WAl44mvDws5EWY69DRgJdfAF46GfByNMBLZxNexgh5EeY6dDbg5VeAly4GvJwA8NLVhJexQl6EuQ5dDXjZDvDSw4CXqgAvPU14eUTIizDXQRm/g+LvODG+vtn7fWfHY24RXy3ja2jpfPnuiK874+uc+O9z42tE/O974+v++BodX2Pi69H4ahX/t9bxdV58TYj/fjK+noqv8+O/28TX5Pjfz8XX8/E1I75mxtcr8dU2/m8XxNeF8TUn/vvN+HorvtrFf7ePr/nxv9+Lr/fja0l8LY2vT+Lrovi/XRxfHeJrVfz35/H1RXx1jP++JL7Wxv/+Jr6+ja9N8bU5vn6Kr0vj/9YpvjrH1/b479/i6/f4uiz++/L42hX/++/4+je+8peJ9+vj65D46hL/t67x1S2+isR/HxFfR8ZX9/jvHvFVIv536fgqF18V4ysnvo6Jr57xf7sivq6Mr6rx3yfG10nx1Sv+u3d8hfjfteOrXnw1jK9G8XV6fF0V/7er4+ua+Goe/31WfJ0dX33iv6+Nr1bxv8+Prwviq318dYivS+Pruvi/Zd7rnXlXcdf4726Z3xhfmXexZt4v2Sv+99XxdW189Yuv/vF1U+Z/4/+WeT9Y5p1Hg+O/b4uv2zP/Lf47856KYfG/746ve+JrVHw9GF8Px1fmmfyZ54xnnp08Lv778fh6Ir4yz4bNPO9yYvzvZ+Lr2fiaFl/T4+ulzPfH/y3zvLLMM5hmx3+/Fl+vx1fmGTOZ52bMjf/9Tny9G1+L4mtxfH0UX5lnBGTue87cy7ki/vvT+PosvjL3qmXuv1kd//ur+Po6vjbE18b4+iG+MvcaZM5PZ86Ebov//jm+fomvzJm3zDmeHfG//4yvv+JrT+ZMU/z/HRRfmTMLmX3YzN5S4fg6NL4Oi69M7zzTDywaX8Xjq1R8lY2vCvEVxVem95FZz2U8apX4Oi6+jo+vTA3OzCvV4qtGfNWKr7rx1SC+Ti37v+cy8Vze47T4u88A5vJHdXNkjQP3zkX/90f1/VBsgzIG1G98TP0b1T+wVj5GoL1gk5XX35cZ82PAuHtDJusgUJh5HfM4oWET6iYocwFPkmHf9+2Pk+S4hE+S/08Vzy8e+BlCCB8XBjETvwP3xjHzvRGTeIu4PpE6rfCEwSQyPulOK/N9hNO6xsBpjQfG3cfEaY0XTkYThE5LqJvQJ3VaFpPkhP3UadVUOoInIaf1pJ/Tksb1qdRphacMJpGJ9CSicBwTAcfR18RxTBRCOSmhvZ2+qeOwmCwm7aeOo5ayMj4NOY6n/RyHNK7PpI4jPGMwiUxOem+nZj6mt3O9QW9nMjDuG0yc1mThZDRF6LSEugk3pE7LYpKcsp86rdpKR/As5LSe9XNa0rg+lzqt8JzBJDLVobczFdgynioU+zQfsWMV00Hs0/bTillHObM/D1XM5/0qpjSuL6QVM7xgMIlMT3rFzKx56+T777fp1MjbJxwk/K46wvHOECeEcDDTgZ7JjQm/rS0z7hnAuG8y6RVNFxaHF4W9IqFuwk1pr8iiaL24nzrfukqH9hLkfF/yc77SuM5MnW+YaTCJzEr6rlxmiid25W422JWbBYz7FhOnNUs4Gb0sdFpC3YRbUqdlMUm+vJ86rXpKR/AK5LRe8XNa0ri+mjqt8KrBJDLbYVduNrArN1so9tfSXTkLsb+2n1bM+sqZ/XWoYr7uVzGlcX0jrZjhDYNJZI5DxZwDVMw5QrG/mVZMC7G/uZ9WzAbKmf0tqGK+5VcxpXGdm1bMMNdgEpnnUDHnARVznlDsb6cV00Lsb++nFbOLcmZ/B6qY7/hVTGlc56cVM8w3mEQWOFTMBUDFXCAU+7tpxbQQ+7v7acXsqpzZ34Mq5nt+FVMa14VpxQwLDSaRRQ4VcxFQMRcJxf5+WjEtxP7+floxuyln9g+givmBX8WUxnVxWjHDYoNJZIlDxVwCVMwlQrF/mFZMC7F/uJ9WzO7Kmf0jqGJ+5FcxpXFdmlbMsNRgElmW9LuSGpRm7kq6zeCupGXAuG83uStpmXAy+lh4V5JQN+H29K4ki0ny46RPkg5vhvoEclqf7HVaBfL91yRUMN9//6jjXSsfM4kSD9p1+J3B5HdmzIjD75xRlvmd+bS/s0b+XN+5vOx//e+KjOlRB6RJ/KW18/33CTKvk1pt4Xc1EbqU3BPk8lxL0X0fdaFYLiwUnwrjkC+fHq5MzjO5OtBES3n9rs8Sno+MXj4DVkorIcOyMpdhOSQXi7k/6hjdIihcPf/r0+1/+Ll5/e6w7x+5Y7Fqb0H4vOzegOwL4Kq9yc79/33+P0xy6kf45Q7i/0dx1dwrrrBKCOjnZbXJVYOUgXNfMoX5IB671yWTY2Iy+QKaTL7g+szhiWKxaTpKH4s7Ev7oxb7xmBuW1o/7Tqj1pjYiq4UFX5jrcGfCdZPhpQ7Ay10GvJwC8HK3CS9rhLwIcx3uNuClLsDLPQa8nArwcq8JL18KeRHmOtxrwEs9gJf7DXhpCvDygAkvXwl5EeY6PGDAS32Al4cMeDkD4OVhE17WCnkR5jo8bMBLA4CXRwx4aQnw8qgJL+uEvAhzHR414KUhwMvjBrycA/DyhAkvXwt5EeY6PGHAyykAL08a8HIuwMtTJrx8I+RFmOvwlAEvpwK8PG3AS1uAl2dMeFkv5EWY6/CMAS+NAF6eNeDlAoCX50x42SDkRZjr8JwBL40BXp434KUjwMsLJrx8K+RFmOvwggEvpwG8vGjAyyUALy+Z8PKdkBdhrsNLBrycDvDysgEvlwK8vGLCy0YhL8Jch1cMeGkC8PKaAS9dAV5eN+Flk5AXYa7D6wa8NAV4edOAl24AL2+Z8PK9kBdhrsNbBrycAfDytgEvvQFe3jHh5QchL8Jch3cMeDkT4OVdA16uAnh5z4SXzUJehLkO7xnw0gzg5X0DXq4GePnAhJctQl6EuQ4fGPDSHODlQwNe+gG8fGTCy49CXoS5Dh8Z8HIWwMvHBrxcD/DyiQkvPwl5EeY6KOOXeXLZSfF1/N7vy9yDnbmvNHOv3GmZ507EV5P4ytwLlLm/oXn87xbxlTm7nTmPmjljd1789/nx1Sa+MmeIMuci2sf/7hBfmT3fzD5Wpjd/Wfz35fHVJb4yvcdMP6Vn/O9e8ZVZK2b8b6amXxv/fV189Y2vzJyVycOA+N8DS//vXLs8f2Gr+Hm0J+X77x/V90OxDcoYUL9xW9IftZh59B8h0E8T/jzazJi3AeP+zOR5tNuED+z5WVjQhLoJylzAkyT2PFqHSfLnhE+S/08Vzy8e+GdCCH+Bnsj0C/dEJou4/po6rfCrwSSyPelOK/N9hNP63MBpbSceQWfitLYLJ6PfhE5LqJvwReq0LCbJ3/ZTp1VT6Qh+h5zW735OSxrXHanTCjsMJpGd9CSicBw7AcfxpYnj2CmE8o+E9na+TB2HxWTxx37qOGopK+OfkOP4089xSOO6K3UcYZfBJLI76b2dzIupiN7OWoPezm5g3OtMnNZu4WT0l9BpCXUT1qVOy2KS/Gs/dVq1lY7gb8hp/e3ntKRx/Sd1WuEfg0lkj0NvZw+wZbxHKPZ/fcSOVUwHsf+7n1bMOsqZPV85pmJmvjdiEm8R1wPKpRVTGQPqN+Yvl+xJ5H+9PJnoTaw36E1kkqP+3g0mvYncwszrmA/UiTwIdRM2pL0Ji0nywIRPkpQjqKt0BAdBTusgP6cljWuB1GmFAgaTSMGkO63MFE84rY0GTqsg4LQ2mTitgkKndbDQaQl1EzalTstikjx4P3Va9ZSO4BDIaR3i57SkcS2UOq1QyGASKZx0p7UC6mltNnBahQGntcXEaRUWOq1DhU5LqJuwJXVaFpPkofup06qvdASHQU7rMD+nJY3r4anTCocbTCJFku60GlAPsDJwWkUAp7XNxGkVETqtI4ROS6ibsC11WhaT5BH7qdNqoHQER0JO60g/pyWNa9HUaYWiBpNIsaQ7reVQT+tXA6dVDHBa202cVjGh0zpK6LSEugnbU6dlMUkelfRJ0uGJgcUhp1Wcc1qhaTz+M4DiUwIQfeaTX/w7mwjzX7KcdjJS5zqTk5JAwS0F6b4UqPtPIdNVuhxrumrk7RMy+S8NaKAMpIEyoAYoHnYk/D0clAZ2mryHo6xwnhbmOijjl5uhsnsZcu0ylCto8BuV875rosYaJKp8mqga4VGDRFVIE1UjrD0w+b+xYtJ7B5n3ThFr3EoGXr8S4PMiyOtHoNfPrPUqArHIMdBADjDuypAGKoMaoHjYZbDeIzSw22S9d7RwvSfMddgNrfeONl/vPWXgTo9Juuk5HTI9/yR8sssU+mOAyW6PyWR3rHCyE+Y67DEokscCuqkCGaUquX7rvo96c7Sk8ITCcbo41HYtbMeVS/5vPD7pha0JVNgOqJ/8wnY8MEHlr68XZeajLmwnCAubMNchf8J1k5nETwB0UxUqbFX5wlZXWdhOTM8BhxMNCttJ0IkktTjrKcVZLRVnqGYgzuom4qyjFOfJukHXchXnyQbirJH0JUFzaEkQDDZ3AmDtakLWria8wVcDiEUtAw3UAsZdG9JAbXiDj+ChgMESj9BAQZPWQB1ha0CY66CMX26G6uRiaN8nyUvkuqnRC3UNjF69pBu9FpDRq29Q5OsDE3wDqMg3gI1ePSAWDQ000BAY9ymQBk6BjR7BQyEDo0dooLCJ0TtVaPSEuQ6FIaN3Km/0uiiNXqO03RwaGRi9xibt5q5KcZ6WijOcZiDO003E2U0pziapOEMTA3E2NRGntKyfkfZvwhkG4jwz6f2b86D+TTODtXszYN3WHFq7N4f7N2cCsTjLQANnAeM+G9LA2XD/huDhcIP+DaGBIib9mxbC/o0w16EI1L9pYda/aZnepBFaGhi9c5Ju9M6HjF5Rg5s0zgEm+GImE/y5wglemOtQzMAYnAvophVkDlvxN2lIe7+t08IWWhsUtvOSXtjaQIWthEFhOw+YoEqaFLbzhYVNmOtQ0qCwnQ/opg1U2NrghS3UUBa2tum+UWhrUNgu8Ng3CtJnPlyYijNcaCDOdiabmj2V4myfbmqG9gbivCjpS4L20JLgYoMNrYsBa9cBsnYd4E3Ni4BYdDTQQEdg3JdAGrgE3tQkeChjsMQjNFDWpDVwqbA1IMx1KAttal6Kb2pql8idUqMXOhkYvc5JN3odIKN3mUGRvwyY4C+HivzlsNHrDMSii4EGugDj7gppoCts9AgeKhgYPUIDFU2MXjeh0RPmOlSEjF433ujVVhq97mm7OXQ3MHo9TPZCpA+765mKM/Q0EOcVJuKUPqDnylSc4UoDcfYyEae0rPdO+zeht4E4r0p6/+YyqH9ztcHa/Wpg3XYNtHa/Bu7fXAXEoo+BBvoA474W0sC1cP+G4CHHoH9DaKCySf/mOmH/RpjrUBnq31xn1r/pm96kEfoaGL1+STd6l0NG71iDmzT6ARN8FZMJ/nrhBC/MdahiYAyuB3RzA2QOb+Bv0pD2fvunhS30NyhsA5Je2LpAhe0Eg8I2AJigqpoUthuFhU2Y61DVoLDdCOjmJqiw3cQXNunzYgam+0ZhoEFhG2SybyR95sPNqTjDzQbivMVEnA2U4rw13dQMtxqIc3DSlwQ9oSXBbQYbWrcB1u52yNrdDm9qDgZiMcRAA0OAcQ+FNDAU3tQkeKhmsMQjNFDdpDVwh7A1IMx1qA5tat7Bb2pKl8h3pkYv3Glg9IYl3ej1gozecIMiPxyY4O+CivxdsNEbBsTibgMN3A2MewSkgRGw0SN4CAZGj9BATROjN1Jo9IS5DjUhozeSN3o9lEbvnrTdHO4xMHr3mrSbpQ+7uy8VZ7jPQJyjPMRZU/qAnvtTcYb7DcT5gMnMKS3rD6b9m/CggThHJ71/cy3Uv3nIYO3+ELBuexhauz8M929GA7EYY6CBMcC4x0IaGAv3bwge6hj0bwgN1DXp3zwi7N8Icx3qQv2bR8z6N4+mN2mERw2M3mNJN3rXQUavgcFNGo8BE3xDkwl+nHCCF+Y6NDQwBuMA3TwOmcPH+Zs0pL3fJ9LCFp4wKGzjk17Y+kKFrZFBYRsPTFCNTQrbBGFhE+Y6NDYobBMA3TwJFbYn8cJWU/q8mKfSfaPwlEFhm2iyqSl95sOkVJxhkoE4nzYRZy2lOJ9JNzXDMwbinJz0JcEAaEkwxWBDawpg7Z6FrN2z8KbmZCAWzxlo4Dlg3FMhDUyFNzUJHpoYLPEIDTQ1aQ1ME7YGhLkOTaFNzWn4pqZ2ifx8avTC8wZG74WkG72BkNGbblDkpwMT/AyoyM+Ajd4LQCxeNNDAi8C4X4I08BJs9AgemhkYPUIDzU2M3kyh0RPmOjSHjN5MkKFboFo6y2AenQUw9DI0j74MayBTT/OLvzfznaq4vmKgp1cAPb0K6elVuC4TbLUwqMuEBlqa1OXZwroszHVoCdXl2XsZyvx9Yr7//lHnTK3XcgWT/xtfU877rokaa5Co19NE1QiPGiTqjTRRNcLaA5P/G+ckvQ+bWTfOAfzOmwZe/01g3G9BXv8t0OsP3bt2VMdiroEG5gIamAdpYB683iN4aGWw3iM00Npkvfe2cL0nzHVoDa333jZf7z1l4E7fSbrpuQMqeG0SPtllzN47wGTX1mSymy+c7IS5Dm0NiuR8QDcLIKO0YO9vdZ3kSx6c/N/4btIn+TuhSb6dwST/LgBre5NJ/j3hJC/MdWhvMMm/B+hmITTJLzSf5MsaTPKL0j5zjVDeIFHvp4mqESoaJOoDhw2BD4AysNigGbwYGPcSqPxlvvcQSKQjIOv8oYEGPgQ08BGkgY9ADVA8dDCwwYQGOposn5YKl0/CXIeO0IbA0r0MuZqeygamZ5mD6VkGQP+xQcH7GBj3J1DB+wTcAb8XMj3LDTSwHNDACkgDK+BTEAQPnQxMD6GBziam51Oh6RHmOnSGTM+n5qcgqhiYns8cTM9nAPQrDQreSmDcq6CCtwosePdDpudzAw18DmjgC0gDX8Cmh+Chi4HpITTQ1cT0rBaaHmGuQ1fI9Kw2Nz1VDUzPGgfTswaA/kuDgvclMO6voIL3FVjwRkOmZ62BBtYCGlgHaWAdbHoIHnoYmB5CAz1NTM/XQtMjzHXoCZmer81NT3UD0/ONg+n5BoB+vUHBWw+MewNU8DaABW8MZHq+NdDAt4AGvoM08B1seggeehmYHkIDvU1Mz0ah6RHmOvSGTM9Gc9NT08D0bHIwPZsA6L83KHjfA+P+ASp4P4AF71HI9Gw20MBmQANbIA1sgU0PwcM1BqaH0EAfE9Pzo9D0CHMd+kCm50dz09PAwPT8lN5mVyOcYpCoreWYSSpffukPDTWUL+fZJhy0qzi3lUv+b/zZQ5w1eijF+Ytu0LVcxfmLgTh/dVjX/wr42u0Ga7rtwLh/g9Z0v4FrugnQuv53Aw38DmhgB6SBHfC6nuChr8G6ntBAP5N1/U7hul6Y69APWtfvzMXQvk+Sjd4fuvzUdjV6fxgYvT+TbvSehIp8f4MH+P0JTPADTCb4XcIJXpjrMMDAGOwCdLMbMoe7c/3WfR9xYeupLGx/pYUt/GVQ2P5OemF7CipsAw0K29/ABDXIpLD9IyxswlyHQQaF7R9AN3ugwrYHL2yhtrKw/ZvuG4V/DQpbvvIW+0ahjlKcB5RPxXlA+eT/xvwe4tT2ug7UDbq+qzgPNBDnQerfSFjjzI9UW5wC5ZNv7QoA4y5YnrF2me+lnrg7GVoWHmyggYMBDRwCaeCQ8uxTlwkebjVY4hEaGGzSGiik02oQ5joMhjY1C+ViaN8nyUvkwrr82J5eK2xg9A51MHqHAhPdYQZF/jBg3IdDRT7zvREk0ucgo1fEQANFAA0cAWngCFADFA9DDIweoYGhJkbvSKHRE+Y6DIWM3pG5GNr3SXK7uWhq9EJRA6NXzMHoFQMmuqMMivxRwLiLQ0W+OFjkn4eMXgkDDZQANFAS0kBJ2OgRPAwzMHqEBoabGL1SQqMnzHUYDhm9UrzRq6s0eqVToxdKGxi9Mg5Grwww0ZU1KPJlgXGXg4p8ObDIz4CMXnkDDZQHNFAB0kAF2OgRPIwwMHqEBkaaGL2KQqMnzHUYCRm9irzRq6c0epVSoxcqGRi9yMHoRcBEl2NQ5HOAcVeGinxlsMjPhIze0QYaOBrQwDGQBo6BjR7Bw30GRo/QwCgTo3es0OgJcx1GQUbvWN7o1VcavSqp0QtVDIzecQ5G7zhgojveoMgfD4z7BKjInwAW+Vcgo1fVQANVAQ2cCGngRNjoETw8aGD0CA2MNjF6JwmNnjDXYTRk9E7ijV43pdGrlt4SHqoZGL3q5Rne1eLsrhTnyak4w8kG4qxhIk7p8wpCKs4QDMRZ00Sc0rJeK+3fhFoG4qzt0L+pDaxf6his3esA464Lrd3rgmv3OVD/pp6BBuoBGqgPaaA+3L8heBhj0L8hNDDWpH/TQNi/EeY6jIX6Nw3M+jcNdfmxfZByQwOjd0rSjd6bUJF/zOBByqcAE/w4kwn+VOEEL8x1GGdgDE4FdNMIMoeNcv3WfZ8k934bp4UtNDYobKclvbC9BRW28QaF7TRggppgUthOFxY2Ya7DBIPCdjqgmyZQYWuCF7aaNZWFrWm6bxSaGhS2Mzz2jWrWUorzzFSc4UwDcTbbHzc1m+sGbfuGgOYG4jzLYVPzLMDinG2woXU2MO4WkLXLfC/1dPj50LKwpYEGWgIaOAfSwDnl2TcEEDxMNFjiERqYZNIaOFfYGhDmOkyCNjXPLU+/IUC7RG6Vnl4LrQyMXmsHo9camOjOMyjy5wHjPh8q8ueDJ5feg4xeGwMNtAE00BbSQFv49BrBw2QDo0doYIqJ0btAaPSEuQ5TIKN3AX56TdtuvjA1euFCA6PXzsHotQMmuvYGRb49MO6LoCJ/EVjk34eM3sUGGrgY0EAHSAMdYKNH8DDVwOgRGphmYvQ6Co2eMNdhGmT0OvJGT/rOz0tSoxcuMTB6lzoYvUuBia6TQZHvBIy7M1TkO4NFfglk9C4z0MBlgAYuhzRwOWz0CB6mGxg9QgMzTIxeF6HRE+Y6zICMXhfe6Enf+dk1NXqhq4HR6+Zg9LoBE113gyLfHRh3D6jI9wCL/FLI6PU00EBPQANXQBq4AjZ6BA8zDYweoYFZJkbvSqHRE+Y6zIKM3pW80ZO+87NXavRCLwOj19vB6PUGJrqrDIr8VcC4r4aK/NVgkf8EMnrXGGjgGkADfSAN9IGNHsHDqwZGj9DAbBOjd63Q6AlzHWZDRu9a3uh1URq969JbwsN1Bkavb3mGd7U4uyrF2S8VZ+hnIM7rTcQpfV7BDak4ww0G4uxvIk5pWR+Q9m/CAANx3ujQv7kRWL/cZLB2vwkY90Bo7T4QXLuvgvo3gww0MAjQwM2QBm6G+zcED28Y9G8IDcwx6d/cIuzfCHMd5kD9m1vM+je36vJj+yDlWw2M3uCkG73PoSI/1+BByoOBCX6eyQR/m3CCF+Y6zDMwBrcBurkdMoe35/qt+z5J7v0OSQtbGGJQ2IYmvbB9ARW2+QaFbSgwQS0wKWx3CAubMNdhgUFhuwPQzZ1QYbsTL2y1aigL27B03ygMMyhswz32jWoFpTjvSsUZ7jIQ593746bmCN2gbd8QMMJAnCMdNjVHAhbnHoMNrXuAcd8LWbvM91JPh18LLQvvM9DAfYAGRkEaGFWefUMAwcNCgyUeoYFFJq2B+4WtAWGuwyJoU/P+8vQbArRL5AfS02vhAQOj96CD0XsQmOhGGxT50cC4H4KK/EPgyaVvIKP3sIEGHgY0MAbSwBj49BrBw2IDo0doYImJ0RsrNHrCXIclkNEbi59e07abH0mNXnjEwOg96mD0HgUmuscMivxjwLjHQUV+HFjkv4WM3uMGGngc0MATkAaegI0ewcNSA6NHaGCZidEbLzR6wlyHZZDRG88bPek7PyekRi9MMDB6TzoYvSeBie4pgyL/FDDuiVCRnwgW+U2Q0ZtkoIFJgAaehjTwNGz0CB6WGxg9QgMrTIzeM0KjJ8x1WAEZvWd4oyd95+fk1OiFyQZGb4qD0ZsCTHTPGhT5Z4FxPwcV+efAIr8ZMnpTDTQwFdDANEgD02CjR/Cw0sDoERpYZWL0nhcaPWGuwyrI6D3PGz3pOz9fSI1eeMHA6E13MHrTgYluhkGRnwGM+0WoyL8IFvmfIKP3koEGXgI0MBPSwEzY6BE8rDYweoQG1pgYvVlCoyfMdVgDGb1ZvNGrrzR6L6e3hIeXDYzeK+UZ3tXibKAU56upOMOrBuKcbSJO6fMKXkvFGV4zEOfrJuKUlvU30v5NeMNAnHMc+jdzgPXLmwZr9zeBcb8Frd3fAtfu26mHBxtoYC6ggXmQBubB/RuCh7UG/RtCA+tM+jdvC/s3wlyHdVD/5m2z/s07uvzYPkj5HQOjNz/pRu83qMivN3iQ8nxggt9gMsEvEE7wwlyHDQbGYAGgm3chc/hurt+675Pk3u97aWEL7xkUtoVJL2y/Q4Vto0FhWwhMUJtMCtsiYWET5jpsMihsiwDdvA8Vtvf5wtZDWdg+SPeNwgcGhW2xyb5RT6U4l6TiDEsMxPnh/rip+ZFu0LZvCPjIQJxLHTY1lxLP0zHY0FoGjPtjyNplvpd6OvwuaFn4iYEGPiEerQBpYHl59g0BBA+bDZZ4hAa2mLQGVghbA8Jchy3QpuaK8vgbAqRL5E/T02vhUwOj95mD0fuMuL3coMivJG4vh4r8KvDk0t+Q0fvcQAOfAxr4AtLAF/DpNYKHrQZGj9DANhOjt1po9IS5Dtsgo7eaP70mbTevSY1eWGNg9L50MHpfAhPdVwZF/iviWDZU5NeCRf5fyOitM9DAOkADX0Ma+Bo2egQPvxoYPUID202M3jdCoyfMddgOGb1vcKNXW/rOz/Wp0QvrDYzeBgejtwGY6L41KPLfAuP+Diry34FFPn8Z6ESvgQY2Eid6IQ1sgo0ewcMOA6NHaGCnidH7Xmj0hLkOOyGj9z1v9KTv/PwhNXrhBwOjt9nB6G0mzqgYFPktwLh/hIr8j2CRLwAZvZ8MNPATsV0JaWArbPQIHnYZGD1CA7tNjN42odET5jrshozeNt7oSd/5+XNq9MLPBkbvFwej9wuxZWNQ5H8ltmygIr8dLPKHQEbvNwMN/AZo4HdIA7/DRo/g4R8Do0doYI+J0dshNHrCXIc9kNHbwRu9ukqjtzO9JTzsNDB6f5RneFeLs55SnH+m4gx/Gohzl4k4pc8r2J2KM+w2EOdfJuKUlvW/0/5N+NtAnP849G/+IdYvBmv3PcC4/4XW7v+Ca/ciUP8mX4XkayDzG9XjPqACo4HM90aQBigeDmiwf2ogfwN9ccqXT9+/ya/TahDmOijjl5uh/BW8+jcH6vJj+yDlAysk/zceVCHhRu8IqMgXSPgEnzG4BwETfEGTCb6AcIIX5joUNDAGBQjdQOawYK7fuu+T5N7vwWlhCwcbFLZDkl7YjoQKWyGDwnYIMEEVNilshYSFTZjrUNigsBUidAMVtsJ8YeumLGyHCuPgWtgONShsh1Vg5jm1OLsrxXl4Ks5wuIE4i5iIU9rrOkI3aNs3BBxhIM4jk74kyFjjIwGLU9RgQ6soMO5ikLXLfC/1dPgS0LLwKAMNHAVooDikgeIV2DcEEDwcbrDEIzRQxKQ1UELYGhDmOhSBNjVLVKDfEKBdIpfU5cf29FpJA6NXysHolQImutIGRb40MO4yUJEvA55cKg0ZvbIGGigLaKAcpIFy8Ok1goeiBkaP0EAxE6NXXmj0hLkOxSCjV54/vSZtN1dIjV6oYGD0KjoYvYrARFfJoMhXAsYdQUU+Aot8Ocjo5RhoIAfQQGVIA5Vho0fwUMLA6BEaKGli9I4WGj1hrkNJyOgdzRs96Ts/j0mNXjjGwOgd62D0jgUmuioGRb4KMO7joCJ/HFjkK0JG73gDDRwPaOAESAMnwEaP4KGMgdEjNFDWxOhVFRo9Ya5DWcjoVeWNnvSdnyemRi+caGD0TnIweicBE101gyJfDRh3dajIVweLfA5k9E420MDJgAZqQBqoARs9gocKBkaP0EBFE6MXhEZPmOtQETJ6ATd6daTv/KyZGr1Q08Do1XIwerWAia62QZGvDYy7DlTk64BF/hjI6NU10EBdQAP1IA3Ug40ewUOOgdEjNFDZxOjVFxo9Ya5DZcjo1eeNXm2l0WuQ3hIeGhgYvYYVGN7V4qyjFOcpqTjDKQbiPNVEnNLnFTRKxRkaGYizsYk4pWX9tLR/E04zEOfpDv2b04H1SxODtXsTYNxNobV7U3DtXhXq35xhoIEzAA2cCWngTLh/Q/BwrEH/htBAFZP+TTNh/0aY61AF6t80M+vfNNflx/ZBys0NjN5ZSTd6J0JF/gSDBymfBUzwVU0m+LOFE7ww16GqgTE4G9BNC8gctsj1W/d9ktz7bZkWttDSoLCdk/TCdhJU2KoZFLZziKPGJoXtXGFhE+Y6VDcobOcCumkFFbZWfGHroixsrdN9o9DaoLCdZ7Jv1FUpzvNTcYbzDcTZZn/c1GyrG7TtGwLaGojzAodNzQsAi3OhwYbWhcC420HWLvO91NPhA7QsbG+ggfaABi6CNHBRBfYNAQQPwWCJR2igpklr4GJha0CY61AT2tS8uAL9hgDtErlDenotdDAweh0djF5HYKK7xKDIXwKM+1KoyF8KnlyqDRm9TgYa6ARooDOkgc7w6TWChzoGRo/QQF0To3eZ0OgJcx3qQkbvMv70mrTdfHlq9MLlBkavi4PR6wJMdF0NinxXYNzdoCLfDSzy9SCj191AA90BDfSANNADNnoEDw0MjB6hgYYmRq+n0OgJcx0aQkavJ2/0pO/8vCI1euEKA6N3pYPRuxKY6HoZFPlewLh7Q0W+N1jkG0JG7yoDDVwFaOBqSANXw0aP4KGRgdEjNNDYxOhdIzR6wlyHxpDRu4Y3etJ3fvZJjV7oY2D0rnUwetcCE911BkX+OmDcfaEi3xcs8o0go9fPQAP9AA1cD2ngetjoETw0MTB6hAaamhi9G4RGT5jr0BQyejfwRk/6zs/+qdEL/Q2M3gAHozcAmOhuNCjyNwLjvgkq8jeBRf50yOgNNNDAQEADgyANDIKNHsFDMwOjR2iguYnRu1lo9IS5Ds0ho3czbvTq1lQavVvSW8LDLQZG79YKDO9qcdZSinNwKs4w2ECct5mIU/q8gttTcYbbDcQ5xESc0rI+NO3fhKEG4rzDoX9zB7B+udNg7X4nMO5h0Np9GLh2bw71b4YbaGA4oIG7IA3cBfdvCB5aGPRvCA20NOnf3C3s3whzHVpC/Zu7zfo3I3T5sX2Q8ggDozcy6UbvLKjItzJ4kPJIYIJvbTLB3yOc4IW5Dq0NjME9gG7uhczhvbl+675Pknu/96WFLdxnUNhGJb2wnQ0VtjYGhW0UMEG1NSls9wsLmzDXoa1BYbsf0M0DUGF7gC9s9ZWF7cF03yg8aFDYRpvsGzVQivOhVJzhIQNxPrw/bmqO0Q3a9g0BYwzEOdZhU3MsYHEeMdjQegQY96OQtct8L/V0+FbQsvAxAw08BmhgHKSBcRXYNwQQPLQzWOIRGmhv0hp4XNgaEOY6tIc2NR+vQL8hQLtEfiI9vRaeMDB64x2M3nhgoptgUOQnAON+EiryT4Inl86HjN5TBhp4CtDAREgDE+HTawQPHQyMHqGBjiZGb5LQ6AlzHTpCRm8Sf3pN2m5+OjV64WkDo/eMg9F7BpjoJhsU+cnAuKdARX4KWOQvgIzeswYaeBbQwHOQBp6DjR7BQycDo0dooLOJ0ZsqNHrCXIfOkNGbyhs96Ts/p6VGL0wzMHrPOxi954GJ7gWDIv8CMO7pUJGfDhb59pDRm2GggRmABl6ENPAibPQIHroYGD1CA11NjN5LQqMnzHXoChm9l3ijJ33n58zU6IWZBkZvloPRmwVMdC8bFPmXgXG/AhX5V8Ai3wEyeq8aaOBVQAOzIQ3Mho0ewUMPA6NHaKCnidF7TWj0hLkOPSGj9xpv9KTv/Hw9NXrhdQOj94aD0XsDmOjmGBT5OcC434SK/Jtgkb8UMnpvGWjgLUADcyENzIWNHsFDLwOjR2igt4nRmyc0esJch96Q0ZuHG716NZRG7+30lvDwtoHRe6cCw7tanEEpzvmpOMN8A3EuMBGn9HkF76biDO8aiPM9E3FKy/rCtH8TFhqIc5FD/2YRsH5532Dt/j4w7g+gtfsH4Nq9K9S/WWyggcWABpZAGlgC928IHq4x6N8QGuhj0r/5UNi/EeY69IH6Nx+a9W8+0uXH9kHKHxkYvaVJN3rdoCLf1+BBykuBCb6fyQS/TDjBC3Md+hkYg2WAbj6GzOHHuX7rvk+Se7+fpIUtfGJQ2JYnvbB1hwpbf4PCthyYoAaYFLYVwsImzHUYYFDYVgC6+RQqbJ/yha2usrB9lu4bhc8MCttKk32jekpxrkrFGVYZiPPz/XFT8wvdoG3fEPCFgThXO2xqrgYszhqDDa01wLi/hKxd5nupp8P3gpaFXxlo4CtAA2shDaytwL4hgOBhoMESj9DAIJPWwDpha0CY6zAI2tRcV4F+Q4B2ifx1enotfG1g9L5xMHrfABPdeoMivx4Y9waoyG8ATy5dDRm9bw008C2gge8gDXwHn14jeLjVwOgRGhhsYvQ2Co2eMNdhMGT0NvKn16Tt5k2p0QubDIze9w5G73tgovvBoMj/AIx7M1TkN4NF/lrI6G0x0MAWQAM/Qhr4ETZ6BA9DDIweoYGhJkbvJ6HRE+Y6DIWM3k+80ZO+83NravTCVgOjt83B6G0DJrqfDYr8z8C4f4GK/C9gke8HGb1fDTTwK6CB7ZAGtsNGj+BhmIHRIzQw3MTo/SY0esJch+GQ0fuNN3rSd37+nhq98LuB0dvhYPR2ABPdToMivxMY9x9Qkf8DLPL9IaP3p4EG/gQ0sAvSwC7Y6BE8jDAweoQGRpoYvd1CoyfMdRgJGb3dvNGTvvPzr9Tohb8MjN7fDkbvb2Ci+8egyP8DjHsPVOT3gEX+Jsjo/WuggX8BDeSryGgg870RpAGKh/sMjB6hgVEmRu8AnVaDMNdhFGT0DqiIG70eSqOXXziXuBo9ZQyo33hgRYZ3tTh7KsV5UCrOcJCBOAt4iLO+9HkFBVNxhoIG4jzYZOaUlvVDdIO27d8cYiDOQurfSPRvMj9SvX4pLB44sW4rDIz7UGjtfii4dh8M9W8OM9DAYYAGDoc0cDjcvyF4eNCgf0NoYLRJ/6aIsH8jzHUYDfVvipj1b47Q5cf2QcpHGBi9I5Nu9G6DivwYgwcpHwlM8GNNJviiwglemOsw1sAYFAV0Uwwyh8Vy/dZ9nyT3fo9KC1s4yqCwFU96YbsdKmyPGRS24sAENc6ksJUQFjZhrsM4g8JWAtBNSaiwlcQLW/3aysJWKt03CqUMCltpk03NOkpxlknFGcoYiLPs/ripWU43aNs3BJQzEGd5h03N8oDFqWCwoVUBGHdFyNplvpd6OvwwaFlYyUADlQANRJAGoorsGwIIHsYbLPEIDUwwaQ3kCFsDwlyHCdCmZk5F+g0B2iVy5fT0WqhsYPSOdjB6RwMT3TEGRf4YYNzHQkX+WPDk0t2Q0atioIEqgAaOgzRwHHx6jeBhooHRIzQwycToHS80esJch0mQ0TseP72mbTefkBq9cIKB0avqYPSqAhPdiQZF/kRg3CdBRf4ksMjfAxm9agYaqAZooDqkgeqw0SN4mGxg9AgNTDExeicLjZ4w12EKZPRO5o2e9J2fNVKjF2oYGL3gYPQCMNHVNCjyNYFx14KKfC2wyI+CjF5tAw3UBjRQB9JAHdjoETxMNTB6hAammRi9ukKjJ8x1mAYZvbq80ZO+87NeavRCPQOjV9/B6NUHJroGBkW+ATDuhlCRbwgW+Qcho3eKgQZOATRwKqSBU2GjR/Aw3cDoERqYYWL0GgmNnjDXYQZk9BrxRk/6zs/GqdELjQ2M3mkORu80YKI73aDInw6MuwlU5JuARf5hyOg1NdBAU0ADZ0AaOAM2egQPMw2MHqGBWSZG70yh0RPmOsyCjN6ZvNHrpjR6zdJbwkMzA6PXvCLDu1qc3ZXiPCsVZzjLQJxnm4hT+ryCFqk4QwsDcbY0Eae0rJ+T9m/COQbiPNehf3MusH5pZbB2bwWMuzW0dm8Nrt3HQf2b8ww0cB6ggfMhDZwP928IHl416N8QGpht0r9pI+zfCHMdZkP9mzZm/Zu2uvzYPki5rYHRuyDpRu9xqMi/YfAg5QuACX6OyQR/oXCCF+Y6zDEwBhcCumkHmcN2uX7rvk+Se7/t08IW2hsUtouSXtiegArbXIPCdhEwQc0zKWwXCwubMNdhnkFhuxjQTQeosHXAC1uDmsrC1jHdNwodDQrbJR77Rg1qKcV5aSrOcKmBODvtj5uanXWDtn1DQGcDcV7msKl5GWBxLjfY0LocGHcXyNplvpd6OvxEaFnY1UADXQENdIM00K0i+4YAgof5Bks8QgMLTFoD3YWtAWGuwwJoU7N7RfoNAdolco/09FroYWD0ejoYvZ7ARHeFQZG/Ahj3lVCRvxI8ufQMZPR6GWigF6CB3pAGesOn1wgeFhoYPUIDi0yM3lVCoyfMdVgEGb2r8NNr2nbz1anRC1cbGL1rHIzeNcBE18egyPcBxn0tVOSvBYv8s5DRu85AA9cBGugLaaAvbPQIHhYbGD1CA0tMjF4/odET5josgYxeP97oSd/5eX1q9ML1BkbvBgejdwMw0fU3KPL9gXEPgIr8ALDIT4OM3o0GGrgR0MBNkAZugo0ewcNSA6NHaGCZidEbKDR6wlyHZZDRG8gbPek7PwelRi8MMjB6NzsYvZuBie4WgyJ/CzDuW6EifytY5KdDRm+wgQYGAxq4DdLAbbDRI3hYbmD0CA2sMDF6twuNnjDXYQVk9G7njZ70nZ9DUqMXhhgYvaEORm8oMNHdYVDk7wDGfSdU5O8Ei/xLkNEbZqCBYYAGhkMaGA4bPYKHlQZGj9DAKhOjd5fQ6AlzHVZBRu8u3uh1URq9u9NbwsPdBkZvREWGd7U4uyrFOTIVZxhpIM57TMQpfV7Bvak4w70G4rzPRJzSsj4q7d+EUQbivN+hf3M/sH55wGDt/gAw7gehtfuD4Np9NtS/GW2ggdGABh6CNPAQ3L8heFht0L8hNLDGpH/zsLB/I8x1WAP1bx4269+M0eXH9kHKYwyM3tikG73XoCK/1uBBymOBCX6dyQT/iHCCF+Y6rDMwBo8AunkUMoeP5vqt+z5J7v0+lha28JhBYRuX9ML2OlTY1hsUtnHABLXBpLA9LixswlyHDQaF7XFAN09Ahe0JvLB1qaEsbOPTfaMw3qCwTfDYN+oSlOJ8MhVneNJAnE/tj5uaE3WDtn1DwEQDcU5y2NScBFicpw02tJ4Gxv0MZO0y30s9HX4utCycbKCByYAGpkAamFKRfUMAwcNGgyUeoYFNJq2BZ4WtAWGuwyZoU/PZivQbArRL5OfS02vhOQOjN9XB6E0FJrppBkV+GjDu56Ei/zx4cukdyOi9YKCBFwANTIc0MB0+vUbwsNnA6BEa2GJi9GYIjZ4w12ELZPRm4KfXtO3mF1OjF140MHovORi9l4CJbqZBkZ8JjHsWVORngUX+XcjovWyggZcBDbwCaeAV2OgRPGw1MHqEBraZGL1XhUZPmOuwDTJ6r/JGT/rOz9mp0QuzDYzeaw5G7zVgonvdoMi/Doz7DajIvwEW+UWQ0ZtjoIE5gAbehDTwJmz0CB5+NTB6hAa2mxi9t4RGT5jrsB0yem/xRk/6zs+5qdELcw2M3jwHozcPmOjeNijybwPjfgcq8u+ARX4xZPTmG2hgPqCBBZAGFsBGj+Bhh4HRIzSw08TovSs0esJch52Q0XuXN3rSd36+lxq98J6B0VvoYPQWAhPdIoMivwgY9/tQkX8fLPIfQUbvAwMNfABoYDGkgcWw0SN42GVg9AgN7DYxekuERk+Y67AbMnpLeKNXX2n0PkxvCQ8fGhi9jyoyvKvF2UApzqWpOMNSA3EuMxGn9HkFH6fiDB8biPMTE3FKy/rytH8TlhuIc4VD/2YFsH751GDt/ikw7s+gtftn4Np9BdS/WWmggZWABlZBGlgF928IHv4x6N8QGthj0r/5XNi/EeY67IH6N5+b9W++0OXH9kHKXxgYvdVJN3qfQkX+gIbJnuAzBnc1MMHnb+gxwa8RTvDCXIf8CddNZhJfA+jmS8gcfpnrt+77JLn3+1Va2MJXBoVtbdIL22dQYStgUNjWAhNUQZPCtk5Y2IS5DgUNCts6QDdfQ4Xta76w9VAWtm/SfaPwjUFhW2+yb9RTKc4NqTjDBgNxfrs/bmp+pxu07RsCvjMQ50aHTc2NgMXZZLChtQkY9/eQtct8L/V0+NXQsvAHAw38QDwsFdLA5orsGwIIHgoZLPEIDRQ2aQ1sEbYGhLkOyvjlZmhLRfwNAdIl8o/p6bXwo4HR+8nB6P1EPDDSoMhvJR4YCRX5beDJpa8go/ezgQZ+BjTwC6SBX+DTawQPhxsYPUIDRUyM3q9CoyfMdSgCGb1f+dNr0nbz9tTohe0GRu83B6P3GzDR/W5Q5H8nnp8EFfkdYJH/GjJ6Ow00sBPQwB+QBv6AjR7BQ1EDo0dooJiJ0ftTaPSEuQ7FIKP3J270ukrf+bkrNXphl4HR2+1g9HYDE91fBkX+L2Dcf0NF/m+wyG+AjN4/Bhr4h7gXEdLAHtjoETyUMDB6hAZKmhi9f4VGT5jrUBIyev/yRk/6zs98lVKjJ4wB9hsPqGRg9DI/Un5fZqXkT/D5gXEfWImZoDLfG0Ei3QgZvYMMNHAQoIECkAYKVGKNHsFDGQOjR2igrInRK6jTahDmOpSFjF7BSrjRk77z8+DU6IWDDYzeIQ5G7xBgoitkUOQLAeMuDBX5wmCR/wEyeocaaOBQQAOHQRo4DDZ6BA8VDIweoYGKJkbvcKHRE+Y6VISM3uG80aurNHpFhHOJq9ErYmD0jqjE8K4WZz2lOI9MxRmONBBnURNxSp9XUCwVZyhmIM6jTMQpLevF0/5NKG4gzhIO/ZsSwPqlpMHavSQw7lLQ2r0UuHbfBvVvShtooDSxOQVpoAzcvyF4yDHo3xAaqGzSvykr7N8Icx0qQ/2bsmb9m3K6/Ng+SLmcgdErn3Sj9zNU5I81eJByeWCCr2IywVcQTvDCXIcqBsagArGxA5nDirl+675Pknu/ldLCFioZFLYo6YXtF6iwnWBQ2CJggqpqUthyhIVNmOtQ1aCw5RArXqiwVeYLWzdlYTs63TcKRxsUtmNM9o26K8V5bCrOcKyBOKvsj5uax+kGbfuGgOMMxHm8w6bm8YDFOcFgQ+sEYkkAWbvM91JPh98BLQtPNNDAiYAGToI0cFIl9g0BBA/VDJZ4hAaqm7QGqglbA8Jch+rQpma1SvQbArRL5Orp6bVQ3cDonexg9E4GJroaBkW+BjDuABX5AJ5c+hMyejUNNFAT0EAtSAO14NNrCA8GRo/QQE0To1dbaPSEuQ41IaNXmz+9Jm0310mNXqhjYPTqOhi9usBEV8+gyNcDxl0fKvL1wSL/F2T0GhhooAGggYaQBhrCRo/goY6B0SM0UNfE6J0iNHrCXIe6kNE7hTd60nd+npoavXCqgdFr5GD0GgETXWODIt8YGPdpUJE/DSzyeyCjd7qBBk4HNNAE0kAT2OgRPDQwMHqEBhqaGL2mQqMnzHVoCBm9przRk77z84zU6IUzDIzemQ5G70xgomtmUOSbAeNuDhX55mCRP6AsY/TOMtDAWYAGzoY0cDZs9AgeGhkYPUIDjU2MXguh0RPmOjSGjF4L3Oh1k77zs2Vq9EJLA6N3joPROweY6M41KPLnAuNuBRX5VmCRPwgyeq0NNNAa0MB5kAbOg40ewUMTA6NHaKCpidE7X2j0hLkOTSGjdz5v9GorjV6b9Jbw0MbA6LWtxPCuFmcdpTgvSMUZLjAQ54Um4pQ+r6BdKs7QzkCc7U3EKS3rF6X9m3CRgTgvdujfXAysXzoYrN07AOPuCK3dO4Jr98JQ/+YSAw1cAmjgUkgDl8L9G4KHZgb9G0IDzU36N52E/RthrkNzqH/Tyax/01mXH9sHKXc2MHqXJd3oHQoV+RYGD1K+DJjgW5pM8JcLJ3hhrkNLA2NwOaCbLpA57JLrt+77JLn32zUtbKGrQWHrlvTCdhhU2FoZFLZuwATV2qSwdRcWNmGuQ2uDwtYd0E0PqLD14AtbF2Vh65nuG4WeBoXtCpN9o65KcV6ZijNcaSDOXvvjpmZv3aBt3xDQ20CcVzlsal4FWJyrDTa0rgbGfQ1k7TLfSz0dvii0LOxjoIE+gAauhTRwbSX2DQEED20MlniEBtqatAauE7YGhLkObaFNzesq0W8I0C6R+6an10JfA6PXz8Ho9QMmuusNivz1wLhvgIr8DeDJpeKQ0etvoIH+gAYGQBoYAJ9eI3hoZ2D0CA20NzF6NwqNnjDXoT1k9G7kT69J2803pUYv3GRg9AY6GL2BwEQ3yKDIDwLGfTNU5G8Gi3wpyOjdYqCBWwAN3App4FbY6BE8dDAweoQGOpoYvcFCoyfMdegIGb3BvNGTvvPzttTohdsMjN7tDkbvdmCiG2JQ5IcA4x4KFfmhYJEvCxm9Oww0cAeggTshDdwJGz2Ch04GRo/QQGcTozdMaPSEuQ6dIaM3jDd60nd+Dk+NXhhuYPTucjB6dwET3d0GRf5uYNwjoCI/AizyFSCjN9JAAyMBDdwDaeAe2OgRPHQxMHqEBrqaGL17hUZPmOvQFTJ69/JGT/rOz/tSoxfuMzB6oxyM3ihgorvfoMjfD4z7AajIPwAW+Qgyeg8aaOBBQAOjIQ2Mho0ewUMPA6NHaKCnidF7SGj0hLkOPSGj9xBu9LrXVBq9h9NbwsPDBkZvTCWGd7U4aynFOTYVZxhrIM5HTMQpfV7Bo6k4w6MG4nzMRJzSsj4u7d+EcQbifNyhf/M4sH55wmDt/gQw7vHQ2n08uHavAvVvJhhoYAKggSchDTwJ928IHnoZ9G8IDfQ26d88JezfCHMdekP9m6fM+jcTdfmxfZDyRAOjNynpRu84qMhfY/Ag5UnABN/HZIJ/WjjBC3Md+hgYg6cB3TwDmcNncv3WfZ8k934np4UtTDYobFOSXtiOhwpbX4PCNgWYoPqZFLZnhYVNmOvQz6CwPQvo5jmosD3HF7b6ysI2Nd03ClMNCts0k32jBkpxPp+KMzxvIM4X9sdNzem6Qdu+IWC6gThnOGxqzgAszosGG1ovAuN+CbJ2me+lng5fDVoWzjTQwExAA7MgDcyqxL4hgOChv8ESj9DAAJPWwMvC1oAw12EAtKn5ciX6DQHaJfIr6em18IqB0XvVwei9Ckx0sw2K/Gxg3K9BRf418ORSDcjovW6ggdcBDbwBaeAN+PQawcNAA6NHaGCQidGbIzR6wlyHQZDRm8OfXpO2m99MjV5408DoveVg9N4CJrq5BkV+LjDueVCRnwcW+VqQ0XvbQANvAxp4B9LAO7DRI3i41cDoERoYbGL05guNnjDXYTBk9ObzRk/6zs8FqdELCwyM3rsORu9dYKJ7z6DIvweMeyFU5BeCRb4uZPQWGWhgEaCB9yENvA8bPYKHIQZGj9DAUBOj94HQ6AlzHYZCRu8D3uhJ3/m5ODV6YbGB0VviYPSWABPdhwZF/kNg3B9BRf4jsMg3gIzeUgMNLAU0sAzSwDLY6BE8DDMweoQGhpsYvY+FRk+Y6zAcMnof80ZP+s7PT1KjFz4xMHrLHYzecmCiW2FQ5FcA4/4UKvKfgkX+VMjofWaggc8ADayENLASNnoEDyMMjB6hgZEmRm+V0OgJcx1GQkZvFcjQafEcmqmn+cXfm/lOVb4/N5iTPwd4/AKak7+A9UTU5dUGGlgNaGANpIE1cF0meLjPoC4TGhhlUpe/FNZlYa7DKKguf/k/NGDUMf1KGNMd9XTftbMeE9OvyM2B0vnyNQFq01pojl77H+irRt4+Qamv3HHIa0zXQTFdB+or43lXE28tTHjdy/i9cuX04x5tUve+FjIkzHUYnXDdZHhZA/AyxoCX8gAvY014+UbIizDXYawBL18CvDxmwEsFgJdxJrysF/IizHVwid8GYfx2CddQu6E11Aayvwetob6F/P63WVhDKfX1rXAN9R0U0+9AfZ0O6Wu8Qe/wWKDGTTCZozcKGRLmOkyAeocbc/WJ1VpqAjE00YChEwCGJpkwtEnIkDDXYRLE0CaQocxa6yuAockGa62TAIammDD0vZAhYa7DFIPexFqAl6kGvFQHeJlmwssPQl6EuQ4u8dssjF+B+rrvKlifqdmbwbVjc8j3boHW0Vuy0JtQ6muLsDfxIxTTH7NwJuMnYUwLCZktDDH7E8hsC4jZrZC+tmaBWaW+tgqZ3QbFdBt8JmMdoK/pBr60MeBLZ5j4qp+FDAlzHWYYrOO+Jl5yY8DL6QAvs0x4+UXIizDXYZYBL98AvLxqwEtTgJfZJrz8KuRFmOvgEr/twvgdLlxDFYHWUNtBj3setIb6DfL7v2VhDaXU12/CNdTvUEx/B/V1PqSvNwz2k88Fatwckzl6h5AhYa6DMn65GdoB7ie3gRiaa8DQ+QBD80wY2ilkSJjrMA9iaCd8JmM9wNB8g7XWBQBDC0wY+kPIkDDXYYFBb2IDwMtCA17aAbwsMuHlTyEvwlwHl/jtEsavjLA3URbqTewC147tId+7G1pH785Cb0Kpr93C3sRfUEz/ysKZjL+FMa0gZLYixOzfILMdIGb/gfT1TxaYVerrHyGze6CY7oHPZHwL6GuxgS/tAfjSJSa+6l8hQ8JchyUG67jviJcaGPByBcDLMhNeMhOwKpbCXIdlBrxsBHhZbsBLL4CXFSa8HBDpYinMdXCJX35h/HKEa6jK0BoqM95o7/eqWbwMWkMdGDGxODDi11BKfeWOQ15jehAU04NAfV0O6WulwX7y9UCNW2UyRxeIdLEU5joo45ebocx4qf3kLhBDqw0YuhFgaI0JQwUjXSyFuQ5rIIYKggxl1lqbAIbWGqy1BgEMrTNh6OBIF0thrsM6g97E9wAv6w14uQXgZYMJL4dEulgKcx1c4ldIGL9qwt5Edag3kRlvtPd71Sz2hHxv4YiJReGI700o9ZU7DnmN6aFQTA/9D2Ka199+mDCmQchsTYjZwyKO2V4Qs4dHTCwOj3hmlfrKHYe8xrQIFNMioL4yvvQHQF8bDXzpvYAv3WTiq46IdLEU5jpsMljHbQZ42WzAyyiAly0mvBwZ6WIpzHXYYsDLFuI5Xwa8PADwss2El6KRLpbCXAeX+BUTxq+OcA1VF1pDZcYb7f1eNYvXQmuooyImFkdF/BpKqa/ccchrTItDMS0O6us6SF+/GuwnjwNq3HaTObpEpIulMNdBGb/cDGXGS+0n94UY2mHA0ASAoZ0mDJWMdLEU5jrshBgqCTKUWWv9CDC0y2CtNRFgaLcJQ6UiXSyFuQ67DXoTPxH3uxrw8jTAyx4TXkpHulgKcx1c4ldGGL8mwt5EU6g3kRlvtPd71SwOgHxv2YiJRdmI700o9ZU7DnmNaTkopuX+g5jm9beXF8a0mZDZ5hCz5SOO2YEQsxUiJhYVIp5Zpb5yxyGvMa0IxbRixDNbSRjTFkJmW0LMVoo4Zm+BmI0iJhZRxDOr1FfuOOQ1pjlQTHNAfWXWkq8Ba6oDTkn2WvLseNyfAVzlF4/7/42hvP7OypEulsJch/wJ102Gl9cBXgokfNwtIF4KmvBydKSLpTDXoaABL28AvBRK+LhbQrwUNuHlmEgXS2Gug0v8jhXGr5VwDdUaWkNlxhvt/V41i0OhNVSViIlFlYhfQyn1lTsOeY3pcVBMjwP1dQd1r1PCa1zmDMh8oLYXMZmjj490sRTmOijjl5uhzHipMyB3QgwVNWDoPYChYiYMnRDpYinMdSgGMXQCyFBmrbUI0FKJhDN0DrTWKmnCUNVIF0thrkNJg97E+wAvZRI+7nMhXsqa8HJiJDzzIeTFJX4nCePXQdib6Aj1JjLjPWTv96pZHAH53moRE4tquWLx/6avGnn7BKW+cschrzGtDsW0+n8Q07z+9pOFMe0kZLYzxGxmvNHe71Uzey/EbI2IiUWNiO8nKvWVOw55jWmAYhr+g5jm9bfXFMa0i5DZrhCzNSOO2fshZmtFTCxqRTyzSn3ljkNeY1obimntiGe2jjCmPYTM9oSYrRNxzI6GmK0bMbGoG/HMKvWVOw55jWk9KKb1Ip7Z+sKY9hIy2xtitn7EMTsGYrZBxMSiQcQzq9RX7jjkNaYNoZg2jHhmTxHG9Bohs30gZk+JOGYfhZg9NWJicWrEM6vUV+445DWmjaCYNgL19b/uVwf2WSokfJ+lFbTPUtFkn6BxpIulMNehosG+5FaAl5yEj7s1xEtlE15Oi3SxFOY6VDbg5WeAl2MTPu7zIF6qmPByeqSLpTDXwSV+TYTx6ytcQ/WD1lCZ8UZ7v1fN4gRoDdU0YmLRNOLXUEp95Y5DXmN6BhTTM0B9PQnp6wSD89G7gNpe1WSOPjPSxVKY61AVOh+dGS91Pvop6qyVAUP/AAxVN2GoWSQ8TyZkqDrEUDOQocxaK195vZZCwhk6H1pr1TRhqHmki6Uw16GmQW8iP8BLnYSPuw3ES10TXs6KhGc+hLy4xO9sYfxuFfYmBkO9icx4qXsMJkO+t0XExKJFxN9joNRX7jjkNaYtoZi2jPh7DM4RxnSIkNmhELOZ8UZ7v1fN7HMQs+dGTCzOjfh+olJfueOQ15i2gmLa6j+IaV5/e2thTIcJmR0OMds64ph9HmL2vIiJxXkRz6xSX7njkNeYng/F9PyIZ7aNMKYjhMyOhJhtE3HMzoCYbRsxsWgb8cwq9ZU7DnmN6QVQTC+IeGYvFMb0PiGzoyBmL4w4ZmdCzLaLmFi0i3hmlfrKHYe8xrQ9FNP2Ec/sRcKYPihkdjTE7EURx+wrELMXR0wsLo54ZpX6yh2HvMa0AxTTDqC+Mvss1YF9lgYJ32dpC+2zNDTZJ+gY6WIpzHVoaLAvWQPgpVHCx30BxEtjE14uiXSxFOY6NDbgpSbAS5OEj/tCiJemJrxcGuliKcx1cIlfJ2H8xgjXUGOhNVRmvNHe71WzOAdaQ3WOmFh0jvg1lFJfueOQ15heBsX0MlBfb0L6amZwPvpUoLY3N5mjL490sRTmOjSHzkdnxkudj36LOmtlwNDpAEMtTRjqEgnPkwkZagkx1AVkKLPWOgPQUquEM9QOWmu1NmGoa6SLpTDXobVBb6IZwEubhI+7PcRLWxNeukXCMx9CXlzi110Yv4nC3sQkqDeRGS91j8F8yPf2iJhY9Ij4ewyU+sodh7zGtCcU054Rf4/BFcKYThYyOwViNjPeaO/3qpl9D2L2yoiJxZUR309U6it3HPIa015QTHv9BzHN62/vLYzpVCGz0yBme0ccs+9DzF4VMbG4KuKZVeordxzyGtOroZheHfHMXiOM6XQhszMgZq+JOGaXQMz2iZhY9Il4ZpX6yh2HvMb0Wiim10Y8s9cJYzpTyOwsiNnrIo7ZpRCzfSMmFn0jnlmlvnLHIa8x7QfFtF/EM3u9MKavCpmdDTF7fcQx+wnE7A0RE4sbIp5Zpb5yxyGvMe0PxbQ/qK/MPktfYJ+lXcL3WS6C9lnam+wTDIiEe7zCfZb2BvuS1wO8dEj4uC+GeOlowsuNkS6WwlyHjga89Ad46ZTwcXeAeOlswstNkS6WwlwHl/gNFMbvDeEaag60hsqMN9r7vWoWV0FrqEERE4tBEb+GUuordxzyGtOboZjeDOrrc0hfXQzOR98G1PauJnP0LZEulsJch67Q+ejMeKnz0V9QZ60MGLoDYKinCUO3RsLzZEKGekIM3QoylFlrDQe01CvhDHWE1lq9TRgaHOliKcx16G3Qm7gb4OWahI/7EoiXPia83BYJz3wIeXGJ3+3C+C0U9iYWQb2JzHipewzWQr53SMTEYkjE32Og1FfuOOQ1pkOhmA6N+HsM7hDGdLGQ2SUQs5nxRnu/V83sNxCzd0ZMLO6M+H6iUl+545DXmA6DYjrsP4hpXn/7cGFMlwqZXQYxOzzimP0WYvauiInFXRHPrFJfueOQ15jeDcX07ohndoQwpsuFzK6AmB0RccxugpgdGTGxGBnxzCr1lTsOeY3pPVBM74l4Zu8VxnSlkNlVELP3RhyzmyFm74uYWNwX8cwq9ZU7DnmN6SgopqMintn7hTFdLWR2DcTs/RHH7E8Qsw9ETCweiHhmlfrKHYe8xvRBKKYPgvrK7LO8Auyz9E34Psul0D5LP5N9gtGRLpbCXId+BvuSswFe+id83J0gXgaY8PJQpIulMNdhgAEvrwO8DEz4uDtDvAwy4eXhSBdLYa6DS/zGCOO3VriGWgetoTLjjfZ+r5rF7dAaamzExGJsxK+hlPrKHYe8xvQRKKaPgPr6DdLXrQbnoxcAtX2wyRz9aKSLpTDXYTB0PjozXup89O/UWSsDhhYBDA01YeixSHieTMjQUIihx0CGMmutxYCWhiWcocugtdZwE4bGRbpYCnMdhhv0Jj4EeBmR8HFfDvEy0oSXxyPhmQ8hLy7xe0IYv83C3sQWqDeRGS91j8EuyPeOj5hYjI/4ewyU+sodh7zGdAIU0wkRf4/Bk8KYbhUyuw1iNjPeaO/3qpn9G2L2qYiJxVMR309U6it3HPIa04lQTCf+BzHN62+fJIzpr0Jmt0PMToo4Zv+FmH06YmLxdMQzq9RX7jjkNabPQDF9JuKZnSyM6Q4hszshZidHHLP5yzDMTomYWEyJeGaV+sodh7zG9Fkops9GPLPPCWO6S8jsbojZ5yKO2QIQs1MjJhZTI55Zpb5yxyGvMZ0GxXRaxDP7vDCm/wiZ3QMx+3zEMXsIxOwLEROLFyKeWaW+cschrzGdDsV0OqivzD7LH8A+y30J32fpAu2zjDLZJ5gR6WIpzHUYZbAvuQvg5cGEj7srxMtoE15ejHSxFOY6jDbg5S+AlzEJH3c3iJexJry8FOliKcx1cInfTGH8Dmgg7Pvpvuv/8LiZ8UZ7v1fNYhFoDTUrYmIxK+LXUEp95Y5DXmP6MhTTl0F9HQHp6zGD89EFKujHPc5kjn4l0sVSmOswDjofnRkvdT76SIih8QYMFQIYmmDC0KuR8DyZkKEJEEOvggxl1lqHAVqamHCGukNrrUkmDM2OdLEU5jpMMuhNFAF4mZzwcfeAeJliwstrkfDMh5AXl/i9Lozf4cLeRBGoN5EZL3WPQQnI974RMbF4I+LvMVDqK3cc8hrTOVBM50T8PQZvCmNaVMhsMYjZzHijvd+rZrY0xOxbEROLtyK+n6jUV+445DWmc6GYzv0PYprX3z5PGNMSQmZLQszOizhmy0HMvh0xsXg74plV6it3HPIa03egmL4T8czOF8a0jJDZshCz8yOO2YoQswsiJhYLIp5Zpb5yxyGvMX0Xium7Ec/se8KYVhAyWxFi9r2IYzYHYnZhxMRiYcQzq9RX7jjkNaaLoJguinhm3xfGNEfIbGWI2fcjjtljIGY/iJhYfBDxzCr1lTsOeY3pYiimi0F9ZfZZGgL7LFMTvs/SE9pnmWayT7Ak0sVSmOswzWBf8lSAl+kJH/cVEC8zTHj5MNLFUpjrMMOAl8YALzMTPu4rIV5mmfDyUaSLpTDXwSV+S4XxO1a4hqoCraEy4432fq+axarQGmpZxMRiWcSvoZT6yh2HvMb0YyimH4P6OhHS16sG56PPBmr7bJM5+pNIF0thrsNs6Hx0ZrzU+eiTqLNWBgydCzA0x4Sh5ZHwPJmQoTkQQ8tBhjJrrfMALc1NOEO9oLXWPBOGVkS6WApzHeYZ9CbaALzMT/i4e0O8LDDh5dNIeOZDyItL/D4Txi8IexM1od5EZrzUPQYB8r0rIyYWKyP+HgOlvnLHIa8xXQXFdFXE32PwuTCmdYTM1oWYzYw32vu9amZrQ8x+ETGx+CLi+4lKfeWOQ15juhqK6er/IKZ5/e1rhDFtIGS2IcTsmohjth7E7JcRE4svI55Zpb5yxyGvMf0KiulXEc/sWmFMGwmZbQwxuzbimG0IMbsuYmKxLuKZVeordxzyGtOvoZh+HfHMfiOMaRMhs00hZr+JOGYbQcyuj5hYrI94ZpX6yh2HvMZ0AxTTDRHP7LfCmDYTMtscYvbbiGP2dIjZ7yImFt9FPLNKfeWOQ15juhGK6UZQX5l9lluBfZaFCd9nuQraZ1lksk+wKdLFUpjrsMhgX/I2gJfFCR/31RAvS0x4+T7SxVKY67DEgJchAC9LEz7uayBelpnw8kOki6Uw18ElfpuF8WshXEO1hNZQmfFGe79XzWJzaA21JWJisSXi11BKfeWOQ15j+iMU0x9BfZ0F6Wu5wfnoe4DavsJkjv4p0sVSmOuwAjofnRkvdT76bOqslQFD9wMMrTJhaGskPE8mZGgVxNBWkKHMWms0oKXVCWeoD7TWWmPC0LZIF0thrsMag97EwwAvaxM+7mshXtaZ8PJzJDzzIeTFJX6/COPXTtibaA/1JjLjpe4xaAX53l8jJha/Rvw9Bkp95Y5DXmO6HYrp9oi/x+A3YUw7CJntCDGbGW+093vVzJ4PMft7xMTi94jvJyr1lTsOeY3pDiimO/6DmOb1t+8UxrSTkNnOELM7I47ZCyBm/4iYWPwR8cwq9ZU7DnmN6Z9QTP+MeGZ3CWPaRchsV4jZXRHHbHuI2d0RE4vdEc+sUl+545DXmP4FxfSviGf2b2FMewiZ7Qkx+3fEMdsBYvafiInFPxHPrFJfueOQ15jugWK6J+KZ/VcY015CZntDzP4bccxeCjGbL4eJReZ7o3z///VVI2+foNRX7jjkNaYHQDE9IIe9x+AdYJ9lfcL3Wa6D9lk2mOwT5NdpNQhzHTYY7EsuAHjZmPBx94V42WTCy4FCXoS5DpsMeHkP4GVzwsfdD+JliwkvBwl5EeY6uMSvgDB+1wjXUH2gNVQB0ON2hdZQBSG/XzALayilvgoK11AHQzE9GNRXN0hfWw3ORy8Davs2kzn6ECFDwlyHbdD56Mx4D4AY6k6dtTJgaAXA0HYThgoJGRLmOmyHGCoEMpRZa60EtLQj4QxdD621dpowVFjIkDDXYadBb+JzgJddCR/3DRAvu014OVTIizDXwSV+hwnjN1DYmxgE9SYy46XuMegF+d7DoXX04Tn8PQZKfR0u7E0UgWJaJIe/x+AIYUxvFTI7GGL2CLDfczXE7JGQvo7M4fuJSn0dKWS2KBTTov9BTPP624sJYzpEyOxQiNliILPXQsweBenrqCwwq9TXUUJmi0MxLZ4FZksIYzpMyOxwiNkSILP9IGZLQvoqmQVmlfoqKWS2FBTTUllgtrQwpiOEzI6EmC0NMtsfYrYMpK8yWWBWqa8yQmbLQjEtmwVmywljep+Q2VEQs+VAZm+CmC0P6at8FphV6qu8kNkKUEwrgPrK7LMcWBG47yzh+yz9oX2WPSb7BBWFDAlzHfYY7EsWAHg54NRkj3sAxEv+Uz14qSTkRZjrkD/husnwcjDAS4GEj/tGiJeCJrxEQl6EuQ4u8csRxu9B4RpqNLSGygE97mBoDVUZ8vuVs7CGUuqrsnANdTQU06NBfd0G6atQwmtc5nx0UaC2FzaZo48RMiTMdVDGLzdDmfEeADF0O3XWyoChEgBDRUwYOlbIkDDXoQjE0LEgQ5m1VmlAS0UTztBN0FqrmAlDVYQMCXMdihn0JsoCvJRI+LgHQryUNOHlOCEvwlwHl/gdL4zfeGFvYgLUm8iMl7rHYBjke0+A1tEn5PD3GCj1dYKwN1EVimnVHP4egxOFMZ0oZHYSxOyJYL/nbojZkyB9nZTD9xOV+jpJyGw1KKbVsnCOqrowppOFzE6BmK0OMnsPxOzJkL5OzgKzSn2dLGS2BhTTGllgNghjOlXI7DSI2QAyOwpitiakr5pZYFapr5pCZmtBMa2VBWZrC2M6XcjsDIjZ2iCzD0LM1oH0VScLzCr1VUfIbF0opnWzwGw9YUxnCpmdBTFbD2T2YYjZ+pC+6meBWaW+6guZbQDFtAGor8w+S3Ngn6VMwvdZBkH7LGVN9gkaChkS5jqUNdiXPBvgpULCx30zxEtFE15OEfIizHWoaMBLS4CXnISP+xaIl8omvJwq5EWY6+ASv0bC+L0qXEPNhtZQjUCPOw5aQzWG/H7jLKyhlPpqLFxDnQbF9DRQX49D+jrW4Hz0hUBtr2IyR58uZEiY61AFOh+dGe8BEENPUGetDBi6GGCoqglDTYQMCXMdqkIMNQEZyqy1LgG0VC3hDN0KrbWqmzDUVMiQMNehukFvohPAS0j4uAdDvNQ04eUMIS/CXAeX+J0pjN98YW9iAdSbyIyXusdgIuR7m0Hr6GY5/D0GSn01E/YmmkMxbZ7D32NwljCmC4XMLoKYPQvs9zwDMXs2pK+zc/h+olJfZwuZbQHFtEUWzlG1FMZ0sZDZJRCzLUFmn4WYPQfS1zlZYFapr3OEzJ4LxfTcLDDbShjTpUJml0HMtgKZnQYx2xrSV+ssMKvUV2shs+dBMT0vC8yeL4zpciGzKyBmzweZnQ4x2wbSV5ssMKvUVxshs22hmLbNArMXCGO6UsjsKojZC0BmX4KYvRDS14VZYFaprwuFzLaDYtoO1Fdmn2UEsM9SJ+H7LLdB+yx1TfYJ2gsZEuY61DXYl7wH4KVBwsd9O8RLQxNeLhLyIsx1aGjAy30AL40SPu4hEC+NTXi5WMiLMNfBJX4dhPFbLVxDrYHWUB1AjzsbWkN1hPx+xyysoZT66ihcQ10CxfQSUF+vQfpqYnA++hGgtjc1maMvFTIkzHVoCp2Pzoz3AIih16mzVgYMPQ4w1NyEoU5ChoS5Ds0hhjqBDGXWWhMALbVIOENDobVWSxOGOgsZEuY6tDToTTwF8NIq4eO+A+KltQkvlwl5EeY6uMTvcmH8Ngp7E5ug3kRmvNQ9BnMh39sFWkd3yeHvMVDqq4uwN9EVimnXHP4eg27CmG4WMrsFYrYb2O95B2K2O6Sv7jl8P1Gpr+5CZntAMe2RhXNUPYUx3SpkdhvEbE+Q2XchZq+A9HVFFphV6usKIbNXQjG9MgvM9hLG9Fchs9shZnuBzC6CmO0N6at3FphV6qu3kNmroJhelQVmrxbGdIeQ2Z0Qs1eDzC6GmL0G0tc1WWD2aqG+rhEy2weKaZ8sMHutMKa7hMzuhpi9FmT2I4jZ6yB9XZcFZpX6uk7IbF8opn1BfWX2WT4C9lnaJHyf5U5on6WtyT5BPyFDwlyHtgb7kssAXtolfNzDIF7am/ByvZAXYa5DewNePgF46ZDwcQ+HeOlowssNQl6EuQ4u8esvjN8/wjXUHmgN1R/0uCugNdQAyO8PyMIaSqmvAcI11I1QTG8E9fUppK9OBuej1wC1vbPJHH2TkCFhrkNn6Hx0ZrwHQAx9Rp21MmBoHcBQVxOGBgoZEuY6dIUYGggylFlrrQe01CPhDN0FrbV6mjA0SMiQMNehp0Fv4luAl14JH/fdEC+9TXi5WciLMNfBJX63CONXqKHuuwo3ZGp2ZrzUPQarId97K7SOvjWHv8dAqa9bhb2JwVBMB+fw9xjcJozp4UJmi0DM3gb2e76CmL0d0tftOXw/Uamv24XMDoFiOiQL56iGCmNaVMhsMYjZoSCzX0PM3gHp644sMKvU1x1CZu+EYnpnFpgdJoxpCSGzJSFmh4HMboCYHQ7pa3gWmFXqa7iQ2bugmN6VBWbvFsa0jJDZshCzd4PMboSYHQHpa0QWmFXqa4SQ2ZFQTEdmgdl7hDGtIGS2IsTsPSCzP0DM3gvp694sMKvU171CZu+DYnofqK/MPssRlYD7zhK+zzIC2mfpY7JPMErIkDDXoY/BvmRRgJe+CR/3SIiXfia83C/kRZjr0M+Al6MAXvonfNz3QLwMMOHlASEvwlwHl/g9KIxfjnANVRlaQz0Ietxt0BpqNOT3R2dhDaXU12jhGuohKKYPgfr6GdLXQIPz0RWA2j7IZI5+WMiQMNdhEHQ+OjPeAyCGfqHOWhkwlAMwNNiEoTFChoS5DoMhhsaADGXWWscAWhqScIbuhdZaQ00YGitkSJjrMNSgN1EF4GVYwsd9H8TLcBNeHhHyIsx1cInfo8L4VRP2JqpDvYnMeKl7DHZAvvcxaB39WA5/j4FSX48JexPjoJiOy+HvMXhcGNMgZLYmxOzjYL/nT4jZJyB9PZHD9xOV+npCyOx4KKbjs3COaoIwpnWEzNaFmJ0AMvsXxOyTkL6ezAKzSn09KWT2KSimT2WB2YnCmDYQMtsQYnYiyOweiNlJkL4mZYFZpb4mCZl9Gorp01lg9hlhTBsJmW0MMfsMyOwBZRlmJ0P6mpwFZpX6mixkdgoU0ylZYPZZYUybCJltCjH7LMjsQRCzz0H6ei4LzCr19ZyQ2alQTKeC+srss7QF9llGJHyfZRS0zzLSZJ9gmpAhYa7DSIN9yQsBXu5L+Ljvh3gZZcLL80JehLkOowx4aQ/w8mDCx/0AxMtoE15eEPIizHVwid90YfyaCddQzaE11HTQ4xaG1lAzIL8/IwtrKKW+ZgjXUC9CMX0R1NehkL7GGJyPvhyo7WNN5uiXhAwJcx3GQuejM+M9AGLoMIihxwwY6g4wNM6EoZlChoS5DuMghmaCDGXWWlcAWhqfcIYehNZaE0wYmiVkSJjrMMGgN9EL4GViwsc9GuJlkgkvLwt5EeY6uMTvFWH82gh7E22h3kRmvNQ9BkUh3/sqtI5+NYe/x0Cpr1eFvYnZUExn5/D3GLwmjGk7IbPtIWZfA/s9xSFmX4f09XoO309U6ut1IbNvQDF9IwvnqOYIY9pByGxHiNk5ILOlIGbfhPT1ZhaYVerrTSGzb0ExfSsLzM4VxrSTkNnOELNzQWbLQszOg/Q1LwvMKvU1T8js21BM384Cs+8IY9pFyGxXiNl3QGYrQMzOh/Q1PwvMKvU1X8jsAiimC7LA7LvCmPYQMtsTYvZdkNkIYvY9SF/vZYFZpb7eEzK7EIrpQlBfmX2WMcA+y+SE77M8BO2zTDHZJ1gkZEiY6zDFYF/yEYCXqQkf98MQL9NMeHlfyIsw12GaAS+PAbxMT/i4x0C8zDDh5QMhL8JcB5f4LRbGr5dwDdUbWkMtBj1uFWgNtQTy+0uysIZS6muJcA31IRTTD0F9HQfpa6bB+eingdo+y2SO/kjIkDDXYRZ0Pjoz3gMgho6nzloZMPQswNBsE4aWChkS5jrMhhhaCjKUWWtNA7T0RsIZGgutteaYMLRMyJAw12GOQW/iBYCXuQkf9yMQL/NMePlYyIsw18Elfp8I49df2JsYAPUmMuOl7jGoBvne5dA6enkOf4+BUl/Lhb2JFVBMV+Tw9xh8KozpQCGzgyBmPwX7PTUgZj+D9PVZDt9PVOrrMyGzK6GYrszCOapVwpjeKmR2MMTsKpDZWhCzn0P6+jwLzCr19bmQ2S+gmH6RBWZXC2M6RMjsUIjZ1SCzdSFm10D6WpMFZpX6WiNk9ksopl9mgdmvhDEdJmR2OMTsVyCzDSBm10L6WpsFZpX6Witkdh0U03VZYPZrYUxHCJkdCTH7NcjsqRCz30D6+iYLzCr19Y2Q2fVQTNdngdkNwpjeJ2R2FMTsBpDZ0yBmv4X09W0WmFXq61shs99BMf1ub0wLxNfBuTSW+6PWXf182rHs+2zMAX9w5svV37tJKBBq3Jty/neARd/7f2ws5hf/5nWVdDH9XjgZ/E/5yevva7A3P+oYNhD+xh9ytLpRazyT4x9y9LnZDE3Ym3NN2Jn/r2C+//5J8oRN/s56Jr+zrsnvzD2X1sjj53/6fXllLPbc+Q7Kp5//DhJ+V0Mo1/m0Y67xf2tILiZlIchMfofkSnw+EAKF8+75Xx8igWHfP3LHYste0/Zjzt6A7KseW/ZWutz/349ZWFZ9l3enW3Mv9WGL0DX/KE6ueobLQLMFcuBiUHp8BzmpnyAn9RPYWsm0Vc4mHpNkcCtK5Ug/7gUmx1q3CleMwlyHBQnXTYaXFgAvCw14OTrSj3uRCS/bhLwIcx0WGfDSEuBlsQEvx0TAbfgmvPws5EWY67DEgJdzAF6WGvBSNdKPe5kJL78IeRHmOiwz4OVc4pYiA15OjPTjXmHCy69CXoS5DisMeGkF8LLSgJfGkX7cq0x42S7kRZjrsMqAl9YAL6sNeDktAm5HMOHlNyEvwlyHNQa8nEcciTfg5fRIP+51Jrz8LuRFmOuwzoCX8wFe1hvw0jzSj3uDCS87hLwIcx02GPDSBuBlowEvZ0X6cW8y4WWnkBdhrsMmA17aArxsNuClY6Qf9xYTXv4Q8iLMddhiwMsFAC9bDXi5JNKPe5sJL38KeRHmOmwz4OVCgJdfDXi5NNKPe/upHrzsEvIizHXYbsBLO4CXHQa8dI30495pwstuIS/CXIedBry0B3jZZcBLt0g/7t0mvPwl5EWY67DbgJeLAF7+MeBlQKQf9x4TXv4W8iLMddhjwMvFAC8HNEo+LzdG+nHnb+TByz9CXoS5DvkTrpsMLx0AXgoY8HJTpB93QRNe9gh5EeY6FDTgpSPASyEDXgZH+nEXNuHlXyEvwlyHwga8XALwcrgBL7dF+nEXMeElX2VdLIW5DkUMeLkU4KWoAS+jI/24i5nwcoCQF2GuQzEDXjoBvJQw4OWhSD/ukia85BfyIsx1KGnAS2eAlzIGvDwc6cdd1oSXA4W8CHMdyhrwchnASwUDXsZF+nFXNOHlICEvwlyHiga8XA7wkmPAy+ORftyVTXgpIORFmOtQ2YCXLgAvxxrwMiPSj7uKCS8FhbwIcx2qGPDSFeDlBANeXoz0465qwsvBQl6EuQ5VDXjpBvBSzYCXlyL9uKub8HKIkBdhrkN1A166A7wEA15mR/px1zThpZCQF2GuQ00DXnoAvNQx4OW1SD/uuia8FBbyIsx1qGvAS0+AlwYGvCyJ9ONuaMLLoUJehLkODQ14uQLgpZEBLx9G+nE3NuHlMCEvwlyHxga8XAnw0sSAl48i/bibmvByuJAXYa5DUwNeegG8NDPgZUWkH3dzE16KCHkR5jo0N+ClN8BLCwNePo30425pwssRQl6EuQ4tDXi5CuCllQEvmyL9uFub8HKkkBdhrkNrA16uBnhpY8DL95F+3G1NeCkq5EWY69DWgJdrAF7aGfDyQ6Qfd3sTXooJeRHmOrQ34KUPwEsHA162RfpxdzTh5SghL8Jch44GvFwL8NLJgJefI/24O5vwUlzIizDXobMBL9cBvHQx4CV/jn7cXU14KSHkRZjr0NWAl74ALz0MeDkQ4KWnCS8lhbwIcx16GvDSD+CllwEvBwG89DbhpZSQF2GuQ28DXq4HeLnGgJfCAC99THgpLeRFmOvQx4CXGwBe+hrwcijASz8TXsoIeRHmOvQz4KU/wEt/A14qArwMMOGlrJAXYa7DAANeBgC8DDTgpRLAyyATXsoJeRHmOgwy4OVGgJdbDXiJAF4Gm/BSXsiLMNdhsAEvNwG8DDHgpQrAy1ATXioIeRHmOgw14GUgwMswA16OA3gZbsJLRSEvwlyH4Qa8DAJ4GWHAS0OAl5EmvFQS8iLMdRhpwMvNAC/3GfByCsDLKBNeIiEvwlyHUQa83ALw8qABL6cCvIw24SVHyIsw12G0AS+3AryMMeClKcDLWBNeKgt5EeY6jDXgZTDAy2MGvJwB8DLOhJejhbwIcx3GGfByG8DLeANe2gO8TDDh5RghL8JchwkGvNwO8DLRgJeLAF4mmfByrJAXYa7DJANehgC8TDbg5WKAlykmvFQR8iLMdZhiwMtQgJepBrx0BniZZsLLcUJehLkO0wx4uQPgZboBL5cBvMww4eV4IS/CXIcZBrzcCfAy04CXfgAvs0x4OUHIizDXYZYBL8MAXl414OV6gJfZJrxUFfIizHWYbcDLcICXNwx4uQHgZY4JLycKeRHmOswx4OUugJe5BrwMAniZZ8LLSUJehLkO8wx4uRvgZb4BLzcDvCww4aWakBdhrsMCA15GALwsNOBlFMDLIhNeqgt5EeY6LDLgZSTAy2IDXu4HeFliwsvJQl6EuQ5LDHi5B+BlqQEvDwC8LDPhpYaQF2GuwzIDXu4FeFluwMtYgJcVJrwEIS/CXIcVBrzcB/Cy0oCXRwBeVpnwUlPIizDXYZUBL6MAXlYb8DIN4GWNCS+1hLwIcx3WGPByP8DLWgNengd4WWfCS20hL8Jch3UGvDwA8LLegJcXAF42mPBSR8iLMNdhgwEvDwK8bDTgZRbAyyYTXuoKeRHmOmwy4GU0wMtmA15eBnjZYsJLPSEvwlyHLQa8PATwstWAl0UAL9tMeKkv5EWY67DNgJeHAV5+NeDlfYCX7Sa8NBDyIsx12G7AyxiAlx0GvHwA8LLThJeGQl6EuQ47DXgZC/Cyy4CXZQAvu014OUXIizDXYbcBL48AvPxjwMvHAC97THg5VciLMNdBGb+D4u+oFl/f7P2+rXG+t8XXz/F1XJQv3/HxdUJ8/RL//Wt8VY//HeKrdnzVi6+G8dUovrbH/+23+Po9vs6I/z4zvprF1474753x1TL+d6v4Oj++Loiv9vHVIb7+iP/bn/G1K74ui/++PL66xNfu+O+/4qtn/O9e8XV1fF0bX/3iq398/R3/t3/ia0983Rz/fUt83Rpf/8Z/54vzNjT+97D4uju+7omvUfH1YHwdEP+3/PF1YHw9Ev/9aHw9Fl8HxX8XiK8J8b8nxtcz8fVsfE2Lr+nxVTD+bwfH1yHx9XL89yvx9Wp8FYr/Lhxfc+J/z42vd+Lr3fhaFF+L4+vQ+L8dFl+Hx9fH8d+fxNfy+CoS/31EfK2K/706vr6Kr6/ja0N8bYyvI+P/VjS+isXXj/HfP8XX1vg6Kv67eHxtz8Q2vv6Mr7/ia09mbPHYS8T/LfNe78y7ig+O/z4kvgrFV+ZdrJn3SxaJ/100vorHV6n4KhtfFTL/G/+3zPvBMu88Ojr++5j4Ojbz3+K/M++pqBr/u1p81YivWvFVN74axFfmmfyZ54znxNdp8d+nx1eT+Mo8GzbzvMvm8b9bxNe58XVefLWNr3aZ74//W+Z5ZZlnMF0S/31pfHXKaC7+O/PcjK7xv3vE15XxdVV89YmvvvGVeUZA5r7nzL2cN8Z/3xRfA+Mrc69a5v6bwfG/h8TXnfF1V3yNjK/7MrqN/1vm/HTmTOhD8d8Px9eY+Mqcecuc4xkX/3t8fD0VX0/H15T4mpoZa/zfMvuwmb2lF+O/X4qvmZnxx39n+oGz43+/EV9vxdfb8bUgvhbGV6b3kVnPZTzqh/HfH8XX0vjK1ODMvLIi/vfK+Poivr6Mr3XxtT4n3//zOeD/mstq5O3T47v4u38A5vJGujmyxoF756L/+6P6fii2QRkD6jc2Vv9G9Q+sn48R6AGNWZOV19+XGXMmOervzd+YMVkHgcLM65hPExo2oW6CMhfwJBn2fd/+OEmelvBJ8v+p4vnFA8985+kiCE8XBjETvwP3xjHzvRGTeIu4NkmdVlDGgPqNTZPutDLfRzitAgZOqyngtAqaOK2mQqd1htBpCXUTCqZOy2KSPCPhkyTlCGoqHcGZkNM6089pSePaLHVaQRkD6jc2pycRheNoDjiOQiaOo7nQcZyV0N5OodRxWEwWZ9GTRY28fajKWEtZGc+GHMfZfo5DGtcWqeMIyhhQv7Fl0ns79fIxvZ1DDXo7LQGndZiJ02opdFrnCJ2WUDfhsNRpWUyS5yR8kqQcQW2lIzgXclrn+jktaVxbpU4rKGNA/cbWDr2dzI/MDw48r7/xPB+xYxXTQeznVd4/K2Yd5cx+PlQxz/ermNK4tkkrZlDGgPqNbZNeMTNr3ob5/vttOjXy9gkHCb+roXC8F4gTQjiYtkDP5Ai4V1Qjb5//dSjvAmDcR5r0itoKHeaFwl6RUDfhyLRXZFG0LqSLVo28fSiHVlfp0NpBzredn/OVxrV96nyDMgbUb7wo6btydfMxu3JHGezKXQQ4reImTusiodO6WOi0hLoJxVOnZTFJXpzwSZJyBPWUjqAD5LQ6+DktaVw7pk4rKGNA/cZLHHblLgF25S4RVvJL0105C7FfWnn/rJj1lTN7J6hidvKrmNK4dk4rZlDGgPqNlzlUzMuAinmZsGJenlZMC7FfXnn/rJgNlDN7F6hidvGrmNK4dk0rZlDGgPqN3RwqZjegYnYTVszuacW0EHt3Wuw18vahZvYuypm9B1Qxe/hVTGlce6YVMyhjQP3GKxwq5hVAxbxCWDGvTCumhdivrLx/Vsyuypm9F1Qxe/lVTGlce6cVMyhjQP3Gqxwq5lVAxbxKWDGvTiumhdivrrx/Vsxuypn9GqhiXuNXMaVx7ZNWzKCMAfUbr3WomNcCFfNaYcW8Lq2YFmK/rvL+WTG7K2f2vlDF7OtXMaVx7ZdWzKCMAfUbr0/4JBLWVWLuSiplcFdSJjnq7y1tclfS9UJHc4NO5EGom1A6vSvJYpK8QfkbC+yFpeB/z5X8h9fPx8Cu/p31TH5nXZPfmSmaDr9T/fCZ//uj+u78ub6zf+X/+t8BmeKsDsimuOo3yPffrX1eK2AD4XdtytGNN/eSqX+uJdO+j7pP0l/oKm6srK2uai1lcp7JlfqF85SW8vpdNyU8Hxm93AQ4+oFQC2PgXh4zhuWQXCzm/qhjlBPl/bt6/ten2//wc/P63WHfP3LHYtDegnBz5b0B2RfAQXuTnfv/u/l/mOTUj5rLHcT/j+KquVdcYZBwwry5sja5apAycO5LpjAfxOPhumRyTEwmt0CTyS1cPzQ0KZsv3+qy+liUS/gjAkuWy5fv60r6cZeHWkRqI3KrsOALcx3KJ1w3GV7WALxUMuDlG4CXyISXwUJehLkOkQEvXwK8HG3Ay3qAl2NMeLlNyIsw1+EYA16+Ang5zoCX7wFejjfh5XYhL8Jch+MNeFkL8HKiAS8/ALycZMLLECEvwlyHkwx4WQfwcrIBLz8DvNQw4WWokBdhrkMNA16+BnipZcDLLwAvtU14uUPIizDXobYBL98AvNQz4OVXgJf6JrzcKeRFmOtQ34CX9QAvpxjw8gfAy6kmvAwT8iLMdTjVgJcNAC+nGfDyJ8DL6Sa8DBfyIsx1ON2Al28BXs4w4OVfgJczTXi5S8iLMNfhTANevgN4OcuAl8whI/W4zzbh5W4hL8Jch7MNeNkI8HKOAS8HRPpxn2vCywghL8Jch3MNeNkE8HKeAS8HR/pxn2/Cy0ghL8Jch/MNePke4OUCA14OifTjvtCEl3uEvAhzHS404OUHgJeLDHg5ItKP+2ITXu4V8iLMdbjYgJfNAC+XGPByZKQf96UmvNwn5EWY63CpAS9bAF4uM+ClaKQf9+UmvIwS8iLMdbjcgJcfAV66GfBSKtKPu7sJL/cLeRHmOnQ34OUngJcrDHgpHenHfaUJLw8IeRHmOijjl3lyWfX4On7v92Xuwc7cV5q5V+67eK96Y3xtiq/MvUBD4uvH+N/b4itzdjtzHjVzxu73+O8d8bUzvjJniDLnIv6K/70nvjJ7vpl9rExv/qAoX74C8VUwvjK9x0w/5dD430XiK7NWzPjfTE0vHv9dIr5KxldmzsrkoVz874rR/861y/MXHtRp6H89ErB6vv/+UX0/FNugjAH1G0erfyPx6D9CoFcl/LmpmTGPBsZ9tclzU3MLM69jfkhY0IS6CcpcwJMk9txUh0nyoYRPkl1yov+aJPOLB36TEMKHhUHM/USmzPdGTOIt4jomdVpBGQPqN45NutPKfB/htK41cFpjgXFfZ+K0xgono0eETkuom3Bd6rQsJslHEj5JdsmJEEdQU+kIHoWc1qN+Tksa18dSpxWUMaB+4zh6ElE4jnGA47jexHGME0L5eEJ7O9enjsNisnicnixq5O3TJSdCKmMtZWV8AnIcT/g5Dmlcx6eOIyhjQP3GCUnv7WReTEX0dvob9HYmAOMeYOK0JggnoyeFTkuomzAgdVoWk+STCZ8ku+REiCOorXQET0FO6yk/pyWN68TUaQVlDKjfOMmhtzNJL/b/Y+B5/Y1P+4gdq5gOYn+aFnuNvH265ETIzF5HObM/A1XMZ/wqpjSuk9OKGZQxoH7jlKT3JjIvT0beJ2rQm5gCjHuQSW9iinAyelbYmxDqJgxKexMWk+SzCZ8ku+REiCOoq3QEz0FO6zk/pyWN69TUaQVlDKjfOC3pTqtuPsZp3WrgtKYB4x5s4rSmCSej54VOS6ibMDh1WhaT5PMJnyS75ESII6indAQvQE7rBT+nJY3r9NRpBWUMqN84I+lOawDU0xpi4LRmAOMeauK0ZggnoxeFTkuomzA0dVoWk+SLCZ8ku+REiCOor3QEL0FO6yU/pyWN68zUaQVlDKjfOCvpTmtdJcZpDTNwWrOAcQ83cVqzhJPRy0KnJdRNGJ46LYtJ8uWET5JdciLEETRQOoJXIKf1ip/Tksb11dRpBWUMqN84O+lOqz/U0xph4LRmA+MeaeK0Zgsno9eETkuomzAydVoWk+RrSZ8kv8/Jl++HHP1k8XplZrLIL/6dm3J03/VGZS006lxncvIGUBjmQE54DueEw42QOXizMmsOauTtEzL5fxMY91uQBt4CNUDxcF/C3xdBaWCUyfsi5grnaWGugzJ+uRmau5ch19VwuYLJ/43zlPO+a6LGGiTq7TRRNcKjBol6J01UjbD2wOT/xvlJX+Nm3o9ErHEXGHj9BYDPexfy+u+CXj+z1psPxOI9Aw28B4x7IaSBhaAGKB4eNFjvERoYbbLeWyRc7wlzHUZD671F5uu9pwzc6ftJNz0bIdMzJuGTXabQvw9MdmNNJrsPhJOdMNdhrEGR/ADQzWLIKC3O9Vv3ffIDMVHFYYkuDrVdC9uSysn/jR8mvbBtggrbYwaF7UNgghpnUtg+EhY2Ya7DOIPC9hGgm6VQYVvKF7a6ysK2TBgH18KmjAH1Gz+uzMxzanHWU4rzk1Sc4RMDcS43EWcdpThX6AZdy1WcKwzE+WnSlwQ/QkuCzww2dz4DrN1KyNqtrMxu8H0KxGKVgQZWAeP+HNLA56AGKB7GGyzxCA1MMGkNfCFsDQhzHSZAG3xf5GJo3yfJS+TVqdELqysn/zeuSbrR2wYZvS8NivyXwAT/FVTkv4KN3hogFmsNNLAWGPc6SAPrYKNH8DDRwOgRGphkYvS+Fho9Ya7DJMjofc0bvS5Ko/dN2m4OyhhQv3F9ZYZ3tTi7KsW5IRVn2GAgzm9NxNlNKc7vUnGG7wzEudFEnNKyvint34RNBuL8Pun9m9+h/s0PBmv3H4B122Zo7b4Z7t98D8Rii4EGtgDj/hHSwI9w/4bgYbJB/4bQwBST/s1Pwv6NMNdhCtS/+cmsf7NVlx/bmzS2Vk7+b9yWdKO3AzJ6Uw1u0tgGTPDTTCb4n4UTvDDXYZqBMfgZ0M0vkDn8pTJ+k4a09/trWtjCr5WT/xu3J72w7YQK23SDwrYdmKBmmBS234SFTZjrMMOgsP0G6OZ3qLD9jhe2UENZ2HYI4+Ba2JQxoH7jzsrMPKcWp/SZD3+k4gx/GIjzTw9x1uipFOcu3aBtNzV3GYhzd9KXBH9BS4K/Kiff2v0FWLu/IWv3d2V2U3M3EIt/DDTwDzDuPZAG9oAaoHiYabDEIzQwy6Q18K+wNSDMdZgFbWr+W5ne1NQukfMdnRo9YQyw33jA0Qk3ensgo5f/6ORP8JnfqB73gUczE1TmeyNIpP/rnWFALA4y0MBBwLgLQBoocDRr9AgeXjUweoQGZpsYvYI6rQZhrsNsyOgVPBo3erWVRu9g4VziavQONjB6hxzN8K4Wp/Rhd4VScYZCBuIsbCJO6QN6Dk3FGQ41EOdhJuKUlvXD0/5NONxAnEWS3r85KGL6N0cYrN2PANZtR0Jr9yPh/k0RIBZFDTRQFBh3MUgDxeD+DcHDGwb9G0IDc0z6N0cJ+zfCXIc5UP/mKLP+TXFdfmxv0ihuYPRKJN3oFYgYozfX4CaNEsAEP89kgi8pnOCFuQ7zDIxBSUA3pSBzWOpo/CYNae+3dFrYQmmDwlYm6YWtYMQUtvkGha0MMEEtMClsZYWFTZjrsMCgsJUFdFMOKmzl+MImfV5M+XTfKJQ3KGwVTPaNpM98qJiKM1Q0EGclE3E2UIozSjc1Q2QgzpykLwkOjZglQWWDDa3KgLU7GrJ2R8ObmjlALI4x0MAxwLiPhTRwLLypSfCw0GCJR2hgkUlroIqwNSDMdVgEbWpW4Tc1pUvk41KjF44zMHrHJ93oFYkYo3eCQZE/AZjgq0JFvips9I4HYnGigQZOBMZ9EqSBk2CjR/Cw2MDoERpYYmL0qgmNnjDXYQlk9KrxRq+H0uhVT9vNobqB0TvZpN0sfdhdjVScoYaBOIOHOGtKH9BTMxVnqGkgzlomM6e0rNdO+zehtoE46yS9f1M8Yvo3dQ3W7nWBdVs9aO1eD+7f1AFiUd9AA/WBcTeANNAA7t8QPCw16N8QGlhm0r9pKOzfCHMdlkH9m4Zm/ZtT0ps0wikGRu/UpBu9EhFj9JYb3KRxKjDBrzCZ4BsJJ3hhrsMKA2PQCNBNY8gcNuZv0pD2fk9LC1s4zaCwnZ70wlYyYgrbSoPCdjowQa0yKWxNhIVNmOuwyqCwNQF00xQqbE3xwlZT+ryYM9J9o3CGQWE702RTU/rMh2apOEMzA3E2NxFnLaU4z0o3NcNZBuI8O+lLgnIRsyRoYbCh1QKwdi0ha9cS3tQ8G4jFOQYaOAcY97mQBs6FNzUJHlYbLPEIDawxaQ20ErYGhLkOa6BNzVb4pqZ2idw6NXqhtYHROy/pRq9ixBi98w2K/PnABN8GKvJtYKN3HhCLtgYaaAuM+wJIAxfARo/gYa2B0SM0sM7E6F0oNHrCXId1kNG7cC9Dmb+r5fvvH3XO5I2Zgsn/je2U875rosYaJKp9mqga4VGDRF2UJiouLwcm/zdenPT1XmatdzHgdzoYeP0OwLg7Ql6/I+j1j4u/+H+9714ci0sMNHAJoIFLIQ1cCq/3CB7WG6z3CA1sMFnvdRKu94S5Dhug9V4n8/XeUwbutHPSTc/xEVPwNiZ8ssuYvc7AZLfJZLK7TDjZCXMdNhkUycsA3VwOGaXL9/5W10m+5MHJ/41dkj7JnxAxk/z/r70vgbep/N4/5nme52Oeua+ZDMc8ZQ4hZLjmeR5C5lJkCslMROYpJKSSIYpCCCGEEEII/7373vNtd74ndR/rOb+z/s79fN6P69zz7PWs9a5nr/W+e5+zLyk4ybciiPWykpN8a8GTvOBcm8sKTvKtCXnThnSSb6P8JJ9WwUm+bWifOcykVzBR4aGJCjMZFUxUOw0XBNoRykB7BZvB7Ql+dyCVP/u4sUlJWsDNaZ07KsiBjoQc6ETKgU7EHGDp4aqCNpiRA9eULJ86Cy6fBOfaXCNdEOgcoSGtTU8WBU1PFw1NTxeC6LsqKHhdCX53IxW8bsQr4MbNaXq6K8iB7oQc6EHKgR7kuyAYerihoOlh5MBNJU1PT8GmR3CuzU1S09NT+V0QORQ0Pb00ND29CKLvraDg9Sb43YdU8PoQC14RN6fp6asgB/oScqAfKQf6kZsehh5uK2h6GDlwR0nT01+w6RGca3OH1PT0V9705FHQ9AzQ0PQMIIh+oIKCN5Dg9yBSwRtELHjF3ZymZ7CCHBhMyIFXSDnwCrnpYejhnoKmh5ED95U0PUMEmx7BuTb3SU3PEOVNTwEFTc9QDU3PUILohykoeMMIfr9KKnivEgteKTen6RmuIAeGE3JgBCkHRpCbHoYeHipoehg58EhJ0zNSsOkRnGvziNT0jFTe9BRS0PSM0tD0jCKIfrSCgjea4PcYUsEbQyx4ZdycpmesghwYS8iB10g58Bq56WHoIUq5ZzMHopaTL04ul3zT87pg0yM410Yyfk4Nva686SmpoOkZF/qYXZh5TsFEvZGVc5JyRRUlasIkHwLwpqDTWpPzzazBz3G8juQMC5dMzglyThfWmpwTFCTnWxrW9W8R+tqJCtZ0Ewl+TyKt6SYR13QV3Zx1/WQFOTCZkANTSDkwhbyuZ+ghhoJ1PSMHYipZ108VXNcLzrWJSVrXT3VoyPsTzI3e23LzU0Rro/e2gkZvWrA3epXcnCIfJ8hP8HaDO41wgo+r5AQ/XfAELzjXJq6CxmA6IW9mkJrDGQ6u3h/hwtZOsrC9Eyps5h0FhW1msBe2ym5OYUugoLDNJJygEiopbO8KFjbBuTYJFRS2dwl5M4tU2GbRC5sRfXj07NB1IzNbQWGbo+SiZlHJ5JwbSk4zV0FyznsWL2rOl3O6hNbknK8gORdouKi5gNDiLFRwQWshwe9FpNbOPi7rG3druDnLwvcU5MB7hBxYTMqBxVm537rM0EMSBUs8Rg4kVbI1sERwa0Bwrk1S0kXNJQ4NeX+CeYn8fujuNfO+gkZvqYZGbynhRLdMQZFfRvD7A1KR/4B451ItN6fRW64gB5YTcmAFKQdWkO9eY+ghhYJGj5EDKZU0eisFGz3BuTYpSY3eSvrda7LbzatCjZ5ZpaDRW62h0VtNONGtUVDk1xD8Xksq8muJRb6um9PorVOQA+sIObCelAPryY0eQw9pFDR6jBxIq6TR2yDY6AnOtUlLavQ28Bu9YpKN3sZQo2c2Kmj0PtTQ6H1IONFtUlDkNxH83kwq8puJRb6Bm9PobVGQA1sIOfARKQc+Ijd6DD1kUNDoMXIgo5JGb6tgoyc41yYjqdHbym/0iks2eh+HGj3zsYJGb5uGRm8b4US3XUGR307wewepyO8gFvlGbk6j94mCHPiEkAM7STmwk9zoMfSQWUGjx8iBLEoavU8FGz3BuTZZSI3ep/xGr4Rko/dZqNEznylo9D7X0Oh9TjjR7VJQ5HcR/P6CVOS/IBb5Jm5Oo7dbQQ7sJuTAHlIO7CE3egw9ZFfQ6DFyIIeSRm+vYKMnONcmB6nR28tv9NpINnr7BM8lWhu9fQoavS+zcvQunZxtJZNzfyg5zX4FyXlASXKKfl/BV6HkNF8pSM6vlSSnaFk/GNq/MQcVJOchDfs3hwjrl28UrN2/Ifj9LWnt/i1x7d7Szdm/OawgBw4TcuAIKQeOkPdvGHrIrWD/hpEDeZTs3xwV3L8RnGuTh7R/c1TZ/s13cvOj9ouUv1PQ6B0L9kbvZTenyOdX8EXKxwgn+AJKTvDHBU/wgnNtCihoDI4T8uYEqTk84eDq/Qnmvd/vQ4XNfK+gsJ0M9sLWys0pbEZBYTtJOEEVUlLYTgkWNsG5NoUUFLZThLw5TSpsp+mFrVAhycL2Q+i6kflBQWE7o+O6UaHCksl5NpSc5qyC5Dz3LF7U/FHOabVPCPhRQXKe13BR8zyhxbmg4ILWBYLfF0mtnX1c1rfDt3NzloU/KciBnwg5cImUA5eycp8QwNBDUQVLPEYOFFOyNXBZcGtAcK5NMdJFzctZ2U8IkF0iXwndvWauKGj0ftbQ6P1MONFdVVDkrxL8vkYq8teIdy51dHMavesKcuA6IQd+IeXAL+S71xh6KKmg0WPkQCkljd4NwUZPcK5NKVKjd4N+95rsdvPNUKNnbipo9G5paPRuEU50vyoo8r8S/L5NKvK3iUW+i5vT6N1RkAN3CDlwl5QDd8mNHkMPZRQ0eowcKKuk0ftNsNETnGtTltTo/cZv9ESf+Xkv1OiZewoavfsaGr37hBPdAwVF/gHB799JRf53YpHv7uY0eg8V5MBDQg48IuXAI3Kjx9BDeQWNHiMHKihp9B4LNnqCc20qkBq9x/xGT/SZn65soUZPMAY0jlGyKWj0bJLSJ7qo2YL/BB+V4He0bJwTlH1cNylJe7k5jV50BTkQnZADMUg5ECMbt9Fj6KGygkaPkQNVlDR6MeVy1QjOtalCavRiZqM3eqLP/IwVavRMLAWNXmwNjV5swokujoIiH4fgd1xSkY9LLPJ93ZxGL56CHIhHyIH4pByIT270GHqorqDRY+RADSWNXgLBRk9wrk0NUqOXgN/otZJs9BIKnku0NnoJFTR6ibJx9C6dnK0lkzNxKDlNYgXJmURJcop+X0HSUHKapAqSM5mS5BQt68lD+zcmuYLkTKFh/yYFYf2SUsHaPSXB71SktXsq4tp9sJuzf5NaQQ6kJuRAGlIOpCHv3zD0UEvB/g0jB2or2b9JK7h/IzjXpjZp/yatsv2bdHLzo/aLlNMpaPTSB3uj94qbU+TrKfgi5fSEE3x9JSf4DIIneMG5NvUVNAYZCHmTkdQcZnRw9f4E895vplBhM5kUFDZ3sBe2IW5OYWuooLC5CSeoRkoKW2bBwiY416aRgsKWmZA3WUiFLQu9sBUOkyxsWUPXjUxWBYUtm47rRoWNZHJmDyWnya4gOXM8ixc1c8o5rfYJATkVJGcuDRc1cxFanNwKLmjlJvidh9Ta2cdlfTv8CDdnWZhXQQ7kJeRAPlIO5MvGfUIAQw9NFCzxGDnQVMnWQH7BrQHBuTZNSRc182djPyFAdolcIHT3mimgoNErqKHRK0g40YUpKPJhBL8Nqcgb4p1Lo92cRq+QghwoRMiBwqQcKEy+e42hh+YKGj1GDrRQ0ugVEWz0BOfatCA1ekXod6/JbjcXDTV6pqiCRq+YhkavGOFEV1xBkS9O8LsEqciXIBb519ycRq+kghwoSciBUqQcKEVu9Bh6aKWg0WPkQGsljd5zgo2e4Fyb1qRG7zl+oyf6zM/SoUbPlFbQ6JXR0OiVIZzoyioo8mUJfpcjFflyxCL/hpvT6HkU5ICHkAPlSTlQntzoMfQQrqDRY+RAOyWNXgXBRk9wrk07UqNXgd/oiT7zs2Ko0TMVFTR6lTQ0epUIJ7rKCop8ZYLfVUhFvgqxyE9wcxq9qgpyoCohB6qRcqAaudFj6KGjgkaPkQOdlDR61QUbPcG5Np1IjV51fqMn+szPGqFGz9RQ0OjV1NDo1SSc6J5XUOSfZ3yjFqnI1yIW+UluTqNXW0EO1CbkQB1SDtQhN3oMPXRV0OgxcqCbkkavrmCjJzjXphup0avLb/RKSDZ69UIfCTf1FDR69bNx9C6dnCUlk7NBKDlNAwXJ+YKS5BT9voKGoeQ0DRUkZyMlySla1huH9m9MYwXJ+aKG/ZsXGR+iV7B2b8L4ED1p7d6UuHaf7ubs3zRTkAPNCDnwEikHXiLv3zD00FPB/g0jB3op2b9pLrh/IzjXphdp/6a5sv2bFnLzo/aLlFsoaPRaBnujN8PNKfJ9FXyRckvCCb6fkhP8y4IneMG5Nv0UNAYvMz6LSGoOWzm4en+Cee+3daiwmdYKClubYC9s77g5hW2ggsLWhnCCGqSksLUVLGyCc20GKShsbRmfvSIVtnB+YQuXLGztQteNTDsFha29kutG7SSTs0MoOU0HBcnZ8Vm8qNlJzmm1TwjopCA5O2u4qNmZ0OJ0UXBBqwvjJlxSa2cfl/Xt8HPcnGVhNwU50I2QA91JOdA9G/cJAQw9DFGwxGPkwFAlWwM9BLcGBOfaDCVd1OyRjf6EANElcs/Q3Wump4JGr5eGRq8X4UTXW0GR703wuw+pyPch3rk03026sK0gB/oyLmyTcqAf+e41hh6GK2j0GDkwQkmj11+w0ROcazOC1Oj159+9JrrdPCDU6JkBChq9gRoavYGMi90Kivwggt+DSUV+MLHIL3JzGr1XFOTAK4xdLFIODCE3egw9jFbQ6DFyYIySRm+oYKMnONdmDKnRG0pv9IqIPvNzWKjRM8MUNHqvamj0XmWs5BUU+eGMlTypyI8gFvklbk6jN1JBDowk5MAoUg6MIjd6DD28rqDRY+TAOCWN3mjBRk9wrs04UqM3mt/oiT7zc0yo0TNjFDR6YzU0emMJJ7rXFBT51xiFjVTkXycW+WVuTqM3TkEOjCPkwBukHHiD3Ogx9DBeQaPHyIEJShq9NwUbPcG5NhNIjd6b/EZP9Jmf40ONnhmvoNGboKHRm0A40b2loMi/RfB7IqnITyQW+RVuTqM3SUEOTCLkwGRSDkwmN3oMPUxS0OhRckBJozdFsNETnGszmdToTeE3esUkG72poY+Em6kKGr23s3H0Lp2cxSWTc1ooOc00Bck5XUlyin5fwYxQcpoZCpLzHSXJKVrWZ4b2b8xMBcn5rob9m3cJ65dZCtbuswh+zyat3WcT1+7r3Jz9mzkKcmAOIQfmknJgLnn/hqGHtxXs3zByYJqS/Zt5gvs3gnNtppH2b+Yp27+ZLzc/ar9Ieb6CRm9BsDd6692cIv+Ogi9SXkA4wc9UcoJfKHiCF5xrM1NBY7CQkDeLSM3hIgdX708w7/2+Fyps5j0FhW1xsBe2DW5OYZutoLAtJpyg5igpbEsEC5vgXJs5CgrbEkLevE8qbO/zC1sbycK2NHTdyCxVUNiWKblu1FYyOT8IJaf5QEFyLn8WL2qukHNa7RMCVihIzpUaLmquJLQ4qxRc0FpF8Hs1qbWzj8v6dvgtbs6ycI2CHFhDyIG1pBxYm437hACGHuYrWOIxcmCBkq2BdYJbA4JzbRaQLmquy8Z+QoDsEnl96O41s15Bo7dBQ6O3gXCi26igyG8k+P0hqch/SLxz6WM3p9HbpCAHNhFyYDMpBzaT715j6OE9BY0eIwcWK2n0tgg2eoJzbRaTGr0t/LvXRLebPwo1euYjBY3eVg2N3lbCie5jBUX+Y4Lf20hFfhuxyO9wcxq97QpyYDshB3aQcmAHudFj6GGpgkaPkQPLlDR6nwg2eoJzbZaRGr1P+I2e6DM/d4YaPbNTQaP3qYZG71PCie4zBUX+M4Lfn5OK/OfEIv+pm9Po7VKQA7sIOfAFKQe+IDd6DD2sUNDoMXJgpZJGb7dgoyc412YlqdHbzW/0RJ/5uSfU6Jk9Chq9vRoavb2EE90+BUV+H8HvL0lF/ktikd/l5jR6+xXkwH5CDhwg5cABcqPH0MMaBY0eIwfWKmn0vhJs9ATn2qwlNXpf0Ru9oqLP/Pw61OiZrxU0egc1NHoHCSe6QwqK/CGC39+Qivw3xCK/x81p9L5VkAPfEnLgMCkHDpMbPYYeNiho9Bg5sFFJo3dEsNETnGuzkdToHeE3ekUkG72joY+Em6MKGr3vsnH0Lp2cRSWT81goOc0xBcl5XElyin5fwYlQcpoTCpLzeyXJKVrWT4b2b8xJBcl5SsP+zSnC+uW0grX7aYLfP5DW7j8Q1+5fuTn7N2cU5MAZQg6cJeXAWfL+DUMPmxXs3zByYIuS/Ztzgvs3gnNttpD2b84p27/5UW5+1H6R8o8KGr3zwd7ofe3mFPmPFXyR8nnGZyyVnOAvCJ7gBefabFPQGFwg5M1FUnN40cHV+xPMe78/hQqb+UlBYbsU7IXtoJtT2D5RUNguEU5QO5UUtsuChU1wrs1OBYXtMiFvrpAK2xV+YWslWdh+Dl03Mj8rKGxXlVw3ai2ZnNdCyWmuKUjO68/iRc1f5JxW+4SAXxQk5w0NFzVvEFqcmwouaN0k+H2L1NrZx2V9O/wRN2dZ+KuCHPiVkAO3STlwOxv3CQEMPXyuYInHyIFdSrYG7ghuDQjOtdlFuqh5Jxv7CQGyS+S7obvXzF0Fjd5vGhq93wgnunsKivw9gt/3SUX+PvHOpWNuTqP3QEEOPCDkwO+kHPidfPcaQw97FDR6jBzYq6TReyjY6AnOtdlLavQe8u9eE91ufhRq9MwjBY3eYw2N3mPCic6VPfhP8DZHab+jZOecoOzjuklJ+r2b0+hFVZADUQk5EI2UA9Gycxs9hh72K2j0GDlwQEmjF10uV43gXJsDpEYvenZ6oyf6zM8Y2UONXozswc8xZnYFjV5MwokuloIiH4vgd2xSkY9NLPKn3ZxGL46CHIhDyIG4pByIS270GHo4qKDRY+TAISWNXjzBRk9wrs0hUqMXj9/oiT7zM36o0TPxFTR6CTQ0egkIJ7qECop8QoLfiUhFPhGxyJ91cxq9xApyIDEhB5KQciAJudFj6OGwgkaPkQNHlDR6SQUbPcG5NkdIjV5SfqMn+szPZKFGzyRT0Ogl19DoJSec6FIoKPIpCH6nJBX5lMQif97NafRSKciBVIQcSE3KgdTkRo+hh2MKGj1GDhxX0uilEWz0BOfaHCc1emnojV6xQpKNXlrBc4nWRi+tgkYvXXaO3qWTs7BkcqYPJadJryA5MyhJTtHvK8gYSk6TUUFyZlKSnKJl3R3avzFuBcmZWcP+TWbC+iWLgrV7FoLfWUlr96zEtfsVN2f/JpuCHMhGyIHspBzITt6/YejhpIL9G0YOnFKyf5NDcP9GcK7NKdL+TQ5l+zc55eZH7Rcp51TQ6OUK9kbvZzfpMUAKvkg5F+EEf1bJCT634AlecK7NWQWNQW5C3uQhNYd5HFy9P8G895s3VNhMXgWFLV+wF7arbk5hO6+gsOUjnKAuKCls+QULm+BcmwsKClt+Qt4UIBW2AvzCVkKysBUMXTcyBRUUtjAl141KSianCSWnMQqSs9CzeFGzsJzTap8QUFhBchbRcFGzCKHFKargglZRgt/FSK2dfVzWt8PfdHOWhcUV5EBxQg6UIOVAiezcJwQw9HBJwRKPkQOXlWwNlBTcGhCca3OZdFGzZHb2EwJkl8ilQnevmVIKGr3nNDR6zxFOdKUVFPnSBL/LkIp8GeKdS7fdnEavrIIcKEvIgXKkHChHvnuNoYerCho9Rg5cU9LoeQQbPcG5NtdIjZ6Hf/ea6HZz+VCjZ8oraPQqaGj0KhBOdBUVFPmKBL8rkYp8JWKR/83NafQqK8iByoQcqELKgSrkRo+hhxsKGj1GDtxU0uhVFWz0BOfa3CQ1elX5jZ7oMz+rhRo9U01Bo1ddQ6NXnXCiq6GgyNcg+F2TVORrEov8Azen0XteQQ48T8iBWqQcqEVu9Bh6uK2g0WPkwB0ljV5twUZPcK7NHVKjV5vf6Ik+87NOqNEzdRQ0enU1NHp1CSe6egqKfD2C3/VJRb4+scg/cnMavQYKcqABIQdeIOXAC+RGj6GHewoaPUYO3FfS6DUUbPQE59rcJzV6DfmNnugzPxuFGj3TSEGj11hDo9eYcKJ7UUGRf5HgdxNSkW9CLPJRMnMavaYKcqApIQeakXKgGbnRY+jhoYJGj5EDj5Q0ei8JNnqCc20ekRq9l+iNXvEwyUaveegj4aa5gkavRXaO3qWT00gmZ8tQcpqWCpLzZSXJKfp9Ba1CyWlaKUjO1kqSU7Sstwnt35g2CpKzrYb9m7aE9Uu4grV7OMHvdqS1ezvi2j0Waf+mvYIcaE/IgQ6kHOhA3r9h6CGK59nMgage+eLkcsnv33QU3L8RnGsjGT+nhjoq27/pJDc/ar9IuZOCRq9zsDd6sUlFPoYnuE/wdoPbmXCCj+nRcYLvIniCF5xrIx0/RmPQhZA3XUnNYVcHV+9PMO/9dgsVNtNNQWHrHuyFLQ6psMXxBH9h6044QcX1yCel/SNd2HoIFjbBuTbS8WMUth6EvOlJKmw9+YWtmGRh6xW6bmR6KShsvZVcNyoumZx9Qslp+ihIzr7P4kXNfnJOq31CQD8Fydlfw0XN/oQWZ4CCC1oDCH4PJLV29nFZ3w6fkLQsHKQgBwYRcmAwKQcGZ+c+IYChhwSeZzMHEnrki5PLJb818Irg1oDgXBvJ+Dk19Ep29hMCZJfIQ0J3r5khChq9oRoavaGEE90wBUV+GMHvV0lF/lXinUtJSI3ecAU5MJyQAyNIOTCCfPcaQw9JPM9mDiT1yBcnl0u+0Rsp2OgJzrWRjJ9TQyP5d6+JbjePCjV6ZpSCRm+0hkZvNOFEN0ZBkR9D8HssqciPJRb55KRG7zUFOfAaIQdeJ+XA6+RGj6GHFJ5nMwdSeuSLk8sl3+iNE2z0BOfaSMbPqaFx/EZP9Jmfb4QaPfOGgkbvTQ2N3puEE914BUV+PMHvCaQiP4FY5FORGr23FOTAW4QcmEjKgYnkRo+hhzSeZzMH0nrki5PLJd/oTRJs9ATn2kjGz6mhSfxGT/SZn5NDjZ6ZrKDRm6Kh0ZtCONFNVVDkpxL8fptU5N8mFvm0pEZvmoIcmEbIgemkHJhObvQYesjgeTZzIKNHvji5XPKN3gzBRk9wro1k/JwamsFv9ESf+flOqNEz7yho9GZqaPRmEk507yoo8u8S/J5FKvKziEU+A6nRm60gB2YTcmAOKQfmkBs9hh4ye57NHMjikS9OLpd8ozdXsNETnGsjGT+nhubyG71wyUZvXugj4WaegkZvfnaO3qWTs51kci4IJadZoCA5F+pIzhKi31ewKJScZpGC5HxPyZlTtKwvDu3fmMUKknOJhv2bJYT1y/sK1u7vE/xeSlq7LyWu3bOS9m+WKciBZYQc+ICUAx+Q928YesjueTZzIIdHvji5XPL7N8sF928E59pIxs+poeXK9m9WyM2P2i9SXqGg0VsZ7I1eNlKRz+0J7hO83eCuJJzg83h0nOBXCZ7gBefaSMeP0RisIuTNalJzuNrB1fsTzHu/a0KFzaxRUNjWBnthy04qbPk9wV/Y1hJOUAU88klp/0gXtnWChU1wro10/BiFbR0hb9aTCtt6emErUUSysG0IXTcyGxQUto1KLmoWlUzOD0PJaT5UkJybnsWLmpvlnFb7hIDNCpJzi4aLmlsILc5HCi5ofUTweyuptbOPy/p2+DykZeHHCnLgY0IObCPlwLbs3CcEMPRgPM9mDhTyyBcnl0t+a2C74NaA4Fwbyfg5NbQ9O/sJAbJL5B2hu9fMDgWN3icaGr1PCCe6nQqK/E6C35+SivynxDuX8pMavc8U5MBnhBz4nJQDn5PvXmPooajn2cyBYh754uRyyTd6uwQbPcG5NpLxc2poF/3uNdnt5i9CjZ75QkGjt1tDo7ebcKLbo6DI7yH4vZdU5PcSi3wYqdHbpyAH9hFy4EtSDnxJbvQYeijpeTZzoJRHvji5XPKN3n7BRk9wro1k/Jwa2s9v9ESf+Xkg1OiZAwoava80NHpfEU50Xyso8l8T/D5IKvIHiUW+MKnRO6QgBw4RcuAbUg58Q270GHoo43k2c6CsR744uVzyjd63go2e4Fwbyfg5NfQtv9ETfebn4VCjZw4raPSOaGj0jhBOdEcVFPmjBL+/IxX574hFvhip0TumIAeOEXLgOCkHjpMbPYYeynuezRyo4JEvTi6XfKN3QrDRE5xrIxk/p4ZO8Bs90Wd+fh9q9Mz3Chq9kxoavZOEE90pBUX+FMHv06Qif5pY5EuSGr0fFOTAD4QcOEPKgTPkRo+hh8qeZzMHqnjki5PLJd/onRVs9ATn2kjGz6mhs/xGr41ko3cu9JFwc05Bo/djdo7epZOzrWRyng8lpzmvIDkvKElO0e8ruBhKTnNRQXL+pCQ5Rcv6pdD+jbmkIDkva9i/uUxYv1xRsHa/QvD7Z9La/Wfi2r0caf/mqoIcuErIgWukHLhG3r9h6KG659nMgRoe+eLkcsnv31wX3L8RnGsjGT+nhq4r27/5RW5+1H6R8i8KGr0bwd7oeUhFvpYnuE/wdoN7g3CCr+3RcYK/KXiCF5xrIx0/RmNwk5A3t0jN4S0HV+9PMO/9/hoqbOZXBYXtdrAXtvKkwlbPE/yF7TbhBFXfI5+U9o90YbsjWNgE59pIx49R2O4Q8uYuqbDdpRe2koUkC9tvoetG5jcFhe2ejutGJQtLJuf9UHKa+wqS88GzeFHzdzmn1T4h4HcFyflQw0XNh4QW55GCC1qPCH4/JrV29nFZ3w5fhbQsdOUI/hywOUr7HSUHJwfs4zKfEMDQQ0PPs5kDjTzyxcnlkt8aiCqXq0Zwro1k/JwaipqD/YQA2SVyNLn5UXv3WrQcwc8xeg4FjV50wokuhoIiH4Pgd0xSkbeP6yYlaXVSoxdLQQ7EIuRAbFIOxCbmAEsPTTzPZg409cgXJ5dLvtGLI9joCc61kYyfU0NxHBry/gTzdnPcUKNn4ipo9OJpaPTiEU508RUU+fgEvxOQinwCYpF/ntToJVSQAwkJOZCIlAOJyI0eQw/NPc9mDrTwyBcnl0u+0Uss2OgJzrWRjJ9TQ4n5jZ7oMz+ThBo9k0RBo5dUQ6OXlHCiS6agyCcj+J2cVOSTE4t8HVKjl0JBDqQg5EBKUg6kJDd6DD208jybOdDaI1+cXC75Ri+VYKMnONdGMn5ODaXiN3qiz/xMHWr0TGoFjV4aDY1eGsKJLq2CIp+W4Hc6UpFPRyzy9UmNXnoFOZCekAMZSDmQgdzoMfQQ7nk2c6CdR744uVzyjV5GwUZPcK6NZPycGsrIb/REn/mZKdTomUwKGj23hkbPTTjRZVZQ5DMT/M5CKvJZiEW+IanRy6ogB7ISciAbKQeykRs9hh46ep7NHOjkkS9OLpd8o5ddsNETnGsjGT+nhrLzG71Wko1eDsFzidZGL4eCRi9nDo7epZOztWRy5golp8mlIDlzK0lO0e8ryBNKTpNHQXLmVZKcomU9X2j/xuRTkJz5Nezf5CesXwooWLsXIPhdkLR2L0hcuzcj7d+EKciBMEIOGFIOGPL+DUMPXT3PZg5088gXJ5dLfv+mkOD+jeBcG8n4OTVUSNn+TWG5+VH7RcqFFTR6RYK90XuJVOR7eoL7BG83uEUIJ/heHh0n+KKCJ3jBuTbS8WM0BkUJeVOM1BwWc3D1/gTz3m/xUGEzxRUUthLBXtiakwpbX0/wF7YShBNUP498Uto/0oWtpGBhE5xrIx0/RmErScibUqTCVope2FqFSRa250LXjcxzCgpbaR3XjVoZyeQsE0pOU0ZBcpZ9Fi9qlpNzWu0TAsopSE6PhouaHkKLU17BBa3yBL8rkFo7+7isb4dvTVoWVlSQAxUJOVCJlAOVcnCfEMDQw0DPs5kDgzzyxcnlkt8aqCy4NSA410Yyfk4NVc7BfkKA7BK5SujuNVNFQaNXVUOjV5VwoqumoMhXI/hdnVTkqxPvXAonNXo1FORADUIO1CTlQE3y3WsMPQzxPJs5MNQjX5xcLvlG73nBRk9wro1k/Jwaep5+95rsdnOtUKNnailo9GpraPRqE050dRQU+ToEv+uSinxdYpHvQGr06inIgXqEHKhPyoH65EaPoYfhnmczB0Z45IuTyyXf6DUQbPQE59pIxs+poQb8Rk/0mZ8vhBo984KCRq+hhkavIeFE10hBkW9E8Lsxqcg3Jhb5zqRG70UFOfAiIQeakHKgCbnRY+hhtOfZzIExHvni5HLJN3pNBRs9wbk2kvFzaqgpv9ETfeZns1CjZ5opaPRe0tDovUQ40TVXUOSbE/xuQSryLYhFvhup0WupIAdaEnLgZVIOvExu9Bh6eN3zbObAOI98cXK55Bu9VoKNnuBcG8n4OTXUit/oiT7zs3Wo0TOtFTR6bTQ0em0IJ7q2Cop8W4Lf4aQiH04s8j1JjV47BTnQjpAD7Uk50J7c6DH0MN7zbObABI98cXK55Bu9DoKNnuBcG8n4OTXUgd/olZBs9DqGPhJuOipo9Drl4OhdOjlLSiZn51Byms4KkrOLkuQU/b6CrqHkNF0VJGc3JckpWta7h/ZvTHcFydlDw/5ND8L6paeCtXtPgt+9SGv3XsS1e3/S/k1vBTnQm5ADfUg50Ie8f8PQwyTPs5kDkz3yxcnlkt+/6Su4fyM410Yyfk4N9VW2f9NPbn7UfpFyPwWNXv9gb/QGkIr8257gPsHbDW5/wgl+mkfHCX6A4AlecK6NdPwYjcEAxreLkZrDgQ6u3p9g3vsdFCpsZpCCwjY42AvbQFJhe8cT/IVtMOEENdMjn5T2j3Rhe0WwsAnOtZGOH6OwvcL4NiVSYRvCL2zhkoVtaOi6kRmqoLANU3LdqJ1kcr4aSk7zqoLkHP4sXtQcIee02icEjFCQnCM1XNQcSWhxRim4oDWK8bF6UmtnH5f17fBDScvCMQpyYAwhB8aScmBsDu4TAhh6mO15NnNgjke+OLlc8lsDrwluDQjOtZGMn1NDr+WgPyFAdIn8eujuNfO6gkZvnIZGbxzhRPeGgiL/BsHvN0lF/k3inUvDSY3eeAU5MJ7xyTNSDkwg373G0MN8z7OZAws88sXJ5ZJv9N4SbPQE59pIxs+pobf4d6+JbjdPDDV6ZqKCRm+ShkZvEuM2XQVFfjLB7ymkIj+FWORHkRq9qQpyYCohB94m5cDb5EaPoYf3PM9mDiz2yBcnl0u+0Zsm2OgJzrWRjJ9TQ9PojV5r0Wd+Tg81ema6gkZvhoZGbwbhRPeOgiL/DuNuTlKRn0ks8mNJjd67CnLgXUIOzCLlwCxyo8fQw1LPs5kDyzzyxcnlkm/0Zgs2eoJzbSTj59TQbH6jJ/rMzzmhRs/MUdDozdXQ6M0lnOjmKSjy8xiXqkhFfj6xyI8jNXoLFOTAAkIOLCTlwEJyo8fQwwrPs5kDKz3yxcnlkm/0Fgk2eoJzbSTj59TQIn6jJ/rMz/dCjZ55T0Gjt1hDo7eYcKJboqDILyH4/T6pyL9PLPLjSY3eUgU5sJSxm0PKgWXkRo+hhzWeZzMH1nrki5PLJd/ofSDY6AnOtZGMn1NDH/AbvWKSjd7y0EfCzXIFjd6KHBy9SydnccnkXBlKTrNSQXKuUpKcot9XsDqUnGa1guRcoyQ5Rcv62tD+jVmrIDnXadi/WUdYv6xXsHZfT/B7A2ntvoG4dp9C2r/ZqCAHNhJy4ENSDnxI3r+h6MHzbObARo98cXK55PdvNgnu3wjOtZGMn1NDm5Tt32yWmx+1X6S8WUGjtyXYG72ppCK/2RPcJ3i7wd1COMFv8eg4wX8keIIXnGsjHT9GY/ARIW+2kprDrQ6u3p9g3vv9OFTYzMcKCtu2YC9sb5MK28ee4C9s2wgnqG0e+aS0f6QL23bBwiY410Y6fozCtp2QNztIhW0Hv7C1kSxsn4SuG5lPFBS2nUquG7WVTM5PQ8lpPlWQnJ89ixc1P5dzWu0TAj5XkJy7NFzU3EVocb5QcEHrC4Lfu0mtnX1c1rfDzyQtC/coyIE9hBzYS8qBvTm4Twhg6OETz7OZAzs98sXJ5ZLfGtgnuDUgONdGMn5ODe3LwX5CgOwS+cvQ3WvmSwWN3n4Njd5+wonugIIif4Dg91ekIv8V8c6l2aRG72sFOfA1IQcOknLgIPnuNYYePvc8mzmwyyNfnFwu+UbvkGCjJzjXRjJ+Tg0d4t+9Jrrd/E2o0TPfKGj0vtXQ6H1LONEdVlDkDxP8PkIq8keIRX4eqdE7qiAHjhJy4DtSDnxHbvQYetjjeTZzYK9Hvji5XPKN3jHBRk9wro1k/JwaOsZv9ESf+Xk81OiZ4woavRMaGr0ThBPd9wqK/PcEv0+SivxJYpFfSGr0TinIgVOEHDhNyoHT5EaPoYf9nmczBw545IuTyyXf6P0g2OgJzrWRjJ9TQz/wGz3RZ36eCTV65oyCRu+shkbvLOFEd05BkT9H8PtHUpH/kVjkF5MavfMKcuA8IQcukHLgArnRY+jhoOfZzIFDHvni5HLJN3oXBRs9wbk2kvFzaugivdFrI/rMz59CjZ75SUGjd0lDo3eJcKK7rKDIXyb4fYVU5K8Qi/xSUqP3s4Ic+JmQA1dJOXCV3Ogx9HDY82zmwBGPfHFyueQbvWuCjZ7gXBvJ+Dk1dI3f6BWRbPSuhz4Sbq4raPR+ycHRu3RyFpVMzhuh5DQ3FCTnTSXJKfp9BbdCyWluKUjOX5Ukp2hZvx3avzG3FSTnHQ37N3cI65e7Ctbudwl+/0Zau/9GXLuvIu3f3FOQA/cIOXCflAP3yfs3DD0c8zybOXDcI1+cXC75/ZsHgvs3gnNtJOPn1NADZfs3v8vNj9ovUv5dQaP3MNgbvdWkIn/SE9wneLvBfUg4wZ/y6DjBPxI8wQvOtZGOH6MxeETIm8ek5vCxg6v3J5j3fl05Q4VNMAY0jlFyBnlhW0MqbGc8wV/Y7MmR9vusRz4p7R/pwhZVLjGN4Fwb6fgxCltUQt5Ey8kpbNFy0gtbK8nCFl0wDloLW3QFhS1GTs55Tjo5W0smZ8xQcpqYCpIzlpLkFN3rii3ntNonBMRWkJxxgn1JYLfGcQgtTtycwd/axSX4HY/U2tnHZX07/EbSsjC+ghyIT8iBBKQcSJCT+4QAhh7Oe57NHLjgkS9OLpf81kBCwa0Bwbk2kvFzaihhTvYTAmSXyInk5kft3WuJFDR6iTU0eokJJ7okCop8EoLfSUlF3j6um5Skm0mNXjIFOZCMkAPJSTmQnJkDJD1c8jybOXDZI1+cXC75Ri+FYKMnONdGMn5ODaVwaMj7E8zbzSlDjZ5JqaDRS6Wh0UtFONGlVlDkUxP8TkMq8mmIRX4rqdFLqyAH0hJyIB0pB9KRGz2GHq56ns0cuOaRL04ul3yjl16w0ROcayMZP6eG0vMbPdFnfmYINXomg4JGL6OGRi8j4USXSUGRz0Tw200q8m5ikd9OavQyK8iBzIQcyELKgSzkRo+hhxueZzMHbnrki5PLJd/oZRVs9ATn2kjGz6mhrPxGT/SZn9lCjZ7JpqDRy66h0ctOONHlUFDkcxD8zkkq8jmJRX4nqdHLpSAHchFyIDcpB3KTGz2GHm57ns0cuOORL04ul3yjl0ew0ROcayMZP6eG8vAbPdFnfuYNNXomr4JGL5+GRi8f4USXX0GRz0/wuwCpyBcgFvnPSY1eQQU5UJCQA2GkHAgjN3oMPdzzPJs5cN8jX5xcLvlGzwg2eoJzbSTj59SQoTd6bQtJNnqFQh8JN4UUNHqFc3L0Lp2chSWTs0goOU0RBclZVElyin5fQbFQcppiCpKzuJLkFC3rJUL7N6aEguQsqWH/piRh/VJKwdq9FMHv50hr9+eIa/d9pP2b0gpyoDQhB8qQcqAMef+GoYeHnmczBx555IuTyyW/f1NWcP9GcK6NZPycGiqrbP+mnNz8qP0i5XIKGj1PsDd6X5KKfJTywX2CtxtcD+EEH7W8jhN8ecETvOBcm6hBnjf2Sbw8IW8qkJrDCg6u3p9g3vutGCpspqKCwlYp2AvbflJhi6GgsFUinKBiKilslQULm+Bcm5gKCltlQt5UIRW2KvzCVkKysFUNXTcyVRUUtmpKrhuVlEzO6qHkNNUVJGeNZ/GiZk05p9U+IaCmguR8XsNFzecJLU4tBRe0ahH8rk1q7ezjsr4d/hBpWVhHQQ7UIeRAXVIO1M3JfUIAQw9xFCzxGDkQV8nWQD3BrQHBuTaS8XNqqF5O9hMCZJfI9UN3r5n6Chq9BhoavQaEE90LCor8CwS/G5KKfEPinUuHSY1eIwU50IiQA41JOdCYfPcaQw8JFDR6jBxIqKTRe1Gw0ROca5OQ1Oi9yL97TXS7uUmo0TNNFDR6TTU0ek0JJ7pmCop8M4LfL5GK/EvEIv8dqdFrriAHmhNyoAUpB1qQGz2GHpIoaPQYOZBUSaPXUrDRE5xrk5TU6LXkN3qiz/x8OdTomZcVNHqtNDR6rQgnutYKinxrgt9tSEW+DbHInyA1em0V5EBbQg6Ek3IgnNzoMfSQQkGjx8iBlEoavXaCjZ7gXJuUpEavHb/RE33mZ/tQo2faK2j0Omho9DoQTnQdFRT5jgS/O5GKfCdikT9FavQ6K8iBzoQc6ELKgS7kRo+hhzQKGj1GDqRV0uh1FWz0BOfapCU1el35jZ7oMz+7hRo9001Bo9ddQ6PXnXCi66GgyPcg+N2TVOR7Eov8GVKj10tBDvQi5EBvUg70Jjd6DD1kUNDoMXIgo5JGr49goyc41yYjqdHr46fRk45pX8GYji8rd6wJZTkx7cvchMjkcl3ILK/PfqRzdL9/kV9hT/djJPPLGYenjWl/Ukz7E/PL7n+HEHqfzEFe9+x+bxvB7yxK6t4AQQ0JzrXJEuR5Y+tlKCFvsivQy3aC3zmU6GWgoF4E59rkUKCXYYS8ya1ALzsIfudRopdBgnoRnGujJX6DBeM3SXANNZm0hhpM7HF/JK2hXiH1+68EYA0lmV+vCK6hhpBiOoSYX+dJ+ZVfwd7hbkKNK6DkHD1UUEOCc20k4+fU0FDHPrF0Ll0gacgo0NCXBA0VUqKhYYIaEpxrU4ikoWFEDdlrrVcJuVRUwVrrK4LfxZRo6FVBDQnOtSkW5Hlj62U4IW9KKtDLQYLfpZToZbigXgTn2miJ3wjB+M0W3JuYQ9qbGEFcO14h9b0jSevokQHYm5DMr5GCexOjSDEdFYB7MkYLxnS+oGYXkDQ7mqjZayTNjiHl15gAaFYyv8YIanYsKaZjyfdkjCD0Z2UU9KVnCH6XVdJXvSaoIcG5NmWDPG9svYwk5E15BXo5R/C7ghK9vC6oF8G5NhUU6GUUIW8qK9DLeYLfVZToZZygXgTn2miJ3xuC8XtPcA21mLSGeoPY4/5KWkO9Ser33wzAGkoyv94UXEONJ8V0PDG/bpPyq7qC68nXCTWuhpJz9ARBDQnOtZGMn1NDE4jXk++QNFRLgYZuETRUW4mG3hLUkOBcm9okDb1FvidjNCGX6ilYa90h+F1fiYYmCmpIcK5N/SDPG1svYwh501CBXn4j+N1IiV4mCepFcK6NlvhNFozfGsG9ibWkvYnJxLXjA1LfO4W0jp4SgL0JyfyaIrg3MZUU06kBuCfjbcGYbhDU7EaSZt8mavYRSbPTSPk1LQCalcyvaYKanU6K6XTyPRljCf1ZEwV9aeys8n43VdJXzRDUkOBcm6ZBnje2Xl4j6KW5Ar3EJeilhRK9vCOoF8G5Ni0U6OV1gl5aKdBLfIJeWivRy0xBvQjOtdESv3cF47dZcA21hbSGepfY40Z3c9ZQs0j9/qwArKEk82uW4BpqNimms4n5FYOUX+EKrienJNS4dkrO0XMENSQ410Yyfk4NzSFeT47p5mioowINpSVoqJMSDc0V1JDgXJtOJA3NJd+TMY6w1uqqYK2VgaChbko0NE9QQ4JzbboFed7YenmDoJeeCvSSiaCXXkr0Ml9QL4JzbbTEb4Fg/D4X3JvYRdqbWEBcO8Zzc/rehaR19MIA7E1I5tdCwb2JRaSYLgrAPRnvCcZ0j6Bm95I0+x5RswndHM0uJuXX4gBoVjK/FgtqdgkppkvI92S8SehL+yroSwsS+tJ+Svqq9wU1JDjXpl+Q542tl/EEvQxUoBdD0MsgJXpZKqgXwbk2gxToZQJBL0MU6KUwQS9DlehlmaBeBOfaaInfB4Lx2y+4hjpAWkN9QOxxk7s5a6jlpH5/eQDWUJL5tVxwDbWCFNMVxPxKQcqv4QquJ5ch1LgRSs7RKwU1JDjXRjJ+Tg2tJF5PTunmaGi0Ag2VJ2hojBINrRLUkOBcmzEkDa0i35PxFmGt9bqCtVYlgobGKdHQakENCc61GRfkeWPrZSJBL+MV6KUKQS8TlOhljaBeBOfaaInfWsH4HRPcmzhO2ptYS1w7pnNz+t51pHX0ugDsTUjm1zrBvYn1pJiuD8A9GRsEY3pSULOnSJrdQNRsRjdHsxtJ+bUxAJqVzK+Ngpr9kBTTD8n3ZDQk9GeTgrwvvWr5PYDQj09W0ldtEtSQ4FybyUGeN7ZeGhH08naQ+32NpJdpSvSyWVAvgnNtpinQS2OCXt4Jcr+vk/QyU4letgjqRXCujZb4fSQYvzOCa6izpDXUR8QeN6ebs4baSur3twZgDSWZX1sF11Afk2L6MTG/cpHya7aC68ktCbV9jpJz9DZBDQnOtZGMn1ND24jXk3O7ORqar0BDrQkaWqBEQ9sln3MtqKEFJA1tJ9+T0ZaQS+8FuYZ+Ia21FivR0A7J5xwKamhxkOeNrZdwgl6WBrnfN0h6WaZEL58I6kVwro2W+O0UjN9Vwb2Ja6S9Cdvf2BHHldZiATen7/2UtI7+1BGLv8uvsKf7MZL59ang3sRnpJh+9i9i+rTcPxeM6Q1Bzd4kafZz4n6PcXM0u4uUX7sCsJ8omV+7BDX7BSmmXwTgPqrdgjG9LajZOyTN7iZqtoibo9k9pPzaEwDNSubXHkHN7iXFdG8ANLtPMKb3BDV7n6TZfUTNFndzNPslKb++DIBmJfPrS0HN7ifFdH8ANHtAMKYPBTX7iKTZA0TNlnJzNPsVKb++CoBmJfPrK0HNfk2K6dcB0OxBwZhGKSd3rKjlODE9SNRsGTdHs4dI+XUoAJqVzK9Dgpr9hhTTb8ifMRhHuM6yonxwX2e5SbrOslLJdYJvBTUkONdmZZDnzR/f30/Qy5og9/sWSS9rlejlsKBeBOfarFWgl/EEvWwIcr9/JelloxK9HBHUi+BcGy3xOyoYvxiCa6iYpDXUUWKPW9HNWUN9R+r3vwvAGkoyv74TXEMdI8X0GDG/KpHya3OQ1zj7/ujphNq+Rck5+righgTn2kjGz6mh48T7oyu7ORr6WIGG3iVoaJsSDZ0Q1JDgXJttJA2dIH/GYA4hlz4Jcg3dJq21dirR0PeCGhKca7MzyPPG1ss8gl4+D3K/75D0skuJXk4K6kVwro2W+J0SjF8Swb2JpKS9iVPEzxjUcHP63tOkdfTpAHzGQDK/TgvuTfxAiukPAfiMwRnBmKYQ1GxKkmbPEPd7ark5mj1Lyq+zAdhPlMyvs4KaPUeK6bkA3Ef1o2BM0whqNi1Jsz8SNVvXzdHseVJ+nQ+AZiXz67ygZi+QYnohAJq9KBjTDIKazUjS7EWiZhu4OZr9iZRfPwVAs5L59ZOgZi+RYnopAJq9LBjTzIKazULS7GWiZhu5OZq9QsqvKwHQrGR+XRHU7M+kmP4cAM1eFYxpdkHN5iBp9ipRs03cHM1eI+XXtQBoVjK/rglq9jopptfJnzH4knCdZU/54L7Ocpd0nWWvkusEv0h+hl3wOsveIM8bWy8HCHrZH+R+/0bSywElerkhqBfBuTYHFOjla4JeDga53/dIejmkRC83BfUiONdGS/xuCcYvt+AaKg9pDXWL2OO2dHPWUL+S+v1fA7CGksyvXwXXULdJMb1NzK+XSfl1OMhrnH1/9HFCbT+i5Bx9R1BDgnNtJOPn1NAd4v3RrdwcDR1ToKFTBA0dV6Khu4IaEpxrc5ykobvkzxicIeTSySDX0H3SWuuUEg39Jqghwbk2p4I8b2y9nCPo5UyQ+/2ApJezSvRyT1AvgnNttMTvvmD8igruTRQj7U3cJ37GoJ2b0/c+IK2jHwTgMwaS+fVAcG/id1JMfw/AZwweCsa0pKBmS5E0+5C439PRzdHsI1J+PQrAfqJkfj0S1OxjUkwfB+A+KlcuuZiWEdRsWZJmbX/dEceV1mwXN0ezUXJxYhElF1+zkvnljMPTxjQqKaZRc/E1G00wpuUFNVuBpNloRM12d3M0G52UX9EDoFnJ/IouqNkYpJjGCIBmYwrGtLKgZquQNBuTqNlebo5mY5HyK1YANCuZX7EENRubFNPYAdBsHMGYVhfUbA2SZuMQNdvXzdFsXFJ+xQ2AZiXzK66gZuORYhqPmF/2dZZE2Qif7y4f3NdZfiddZ7mg5DpBfEENCc61uRDkeWPrJQlBL5eC3O+HJL1cVqKXBIJ6EZxrc1mBXpIR9HI1yP1+RNLLNSV6SSioF8G5Nlril0gwfrUE11C1SWuoRMQed7Cbs4ZKTOr3EwdgDSWZX4kF11BJSDFNQsyvV0j5dSPIa5x9f3QGQm2/qeQcnVRQQ4JzbSTj59SQ7W8UkoaGuDkauq1AQ5kJGrqjREPJBDUkONfmDklDyYgastda2Qi5dC/INfSYtNa6r0RDyQU1JDjX5n6Q542tlxwEvTwMcr9dWTh6eaRELykE9SI410ZL/FIKxq+J4N5EU9LehO1v7IjjSmtxhJvT96YiraNT5eJ/xkAyv1IJ7k2kJsU0dS7+ZwzSCMa0uaBmW5A0m4a43zPazdFsWlJ+pQ3AfqJkfqUV1Gw6UkzTBeA+qvSCMW0lqNnWJM2mJ2r2NTdHsxlI+ZUhAJqVzK8MgprNSIppxgBoNpNgTMMFNduOpNlMRM2+4eZo1k3KL3cANCuZX25BzWYmxTRzADSbRTCmHQU124mk2SxEzU5wczSblZRfWQOgWcn8yiqo2WykmGYLgGazC8a0q6Bmu5E0m52o2UlujmZzkPIrRwA0K5lfOQQ1m5MU05zkzxjUJ1xniVIhuK+zRCFdZ4kq7PffaehpeeaS/Ay7nM8mapDnja2XFwh6iRHkfkcl6SWmEr3kFtSL4FybmAr00oiglzhB7nc0kl7iKtFLHkG9CM610RK/vILx6ym4hupFWkPlJfa4092cNVQ+Ur+fLwBrKMn8yie4hspPiml+Yn7NIOVXgiCvcfb90S8TantCJefoAoIaEpxrIxk/p4YKEO+PfsfN0VASBRpqS9BQUiUaKiioIcG5NklJGipI/oxBe0IupQhyDUUnrbVSKtFQmKCGBOfapAzyvLH10pGglzRB7ncMkl7SKtGLEdSL4FwbLfErJBi/IYJ7E0NJexOFiJ8xmOPm9L2FSevowgH4jIFkfhUW3JsoQoppkQB8xqCoYEyHC2p2BEmzRYn7PfPdHM0WI+VXsQDsJ0rmVzFBzRYnxbR4AO6jKiEY09GCmh1D0mwJomYXuTmaLUnKr5IB0KxkfpUU1GwpUkxLBUCzzwnG9HVBzY4jafY5omaXuDmaLU3Kr9IB0KxkfpUW1GwZUkzLBECzZQVjOl5QsxNImi1L1OwyN0ez5Uj5VS4AmpXMr3KCmvWQYuoJgGbLC8Z0kqBmJ5M0W56o2RVujmYrkPKrQgA0K5lfFQQ1W5EU04rkzxi8TbjOkiHIr7PEJF1nySjs999p6Gl5VpL8DLvgdZaMQZ43tl6mE/SSOcj9jkXSSxYleqksqBfBuTZZFOjlHYJesge537FJesmhRC9VBPUiONdGS/yqCsbvbcE11DTSGqoqscdd5+asoaqR+v1qAVhDSeZXNcE1VHVSTKsT82s9Kb9yB3mNs++PXkio7XmUnKNrCGpIcK6NZPycGqpBvD96g5ujofwKNLSEoKECSjRUU1BDgnNtCpA0VJP8GYNlhFwyQa6hOKS1ViElGnpeUEOCc20KBXne2HpZTtBL0SD3Oy5JL8WU6KWWoF4E59poiV9twfjNF9ybWEDam6hN/IzBFjen761DWkfXCcBnDCTzq47g3kRdUkzrBuAzBvUEY/qeoGYXkzRbj7jf87Gbo9n6pPyqH4D9RMn8qi+o2QakmDYIwH1ULwjGdKmgZpeRNPsCUbM73BzNNiTlV8MAaFYyvxoKarYRKaaNAqDZxoIxXSGo2ZUkzTYmavZTN0ezL5Ly68UAaFYyv14U1GwTUkybBECzTQVjukZQs2tJmm1K1OwuN0ezzUj51SwAmpXMr2aCmn2JFNOXAqDZ5oIx3SCo2Y0kzTYnanaPm6PZFqT8ahEAzUrmVwtBzbYkxbQl+TMG3xGus5QM8uss8UjXWUoJ+/13Gnpani9LfoZd8DpLqSDPG1svxwl6KRPkfscn6aWsEr20EtSL4Fybsgr08j1BL+WD3O8EJL1UUKKX1oJ6EZxroyV+bQTjt1lwDbWFtIZqQ+xxv3Jz1lBtSf1+2wCsoSTzq63gGiqcFNNwYn59TcqvykFe4+z7oy8QansVJefodoIaEpxrIxk/p4baEe+PPujmaKi6Ag1dJmiohhINtRfUkOBcmxokDbUnf8bgKiGXagW5hhKS1lq1lWiog6CGBOfa1A7yvLH1cp2gl3pB7ncikl7qK9FLR0G9CM610RK/ToLx+1xwb2IXaW+iE/EzBkfcnL63M2kd3TkAnzGQzK/OgnsTXUgx7RKAzxh0FYzpHkHN7iVptitxv+eYm6PZbqT86haA/UTJ/OomqNnupJh2D8B9VD0EY7pfULMHSJrtQdTs926OZnuS8qtnADQrmV89BTXbixTTXgHQbG/BmB4U1OwhkmZ7EzV72s3RbB9SfvUJgGYl86uPoGb7kmLaNwCa7ScY08OCmj1C0mw/ombPujma7U/Kr/4B0KxkfvUX1OwAUkwHBECzAwVjekxQs8dJmh1I1Ox5N0ezg0j5NSgAmpXMr0GCmh1Miulg8mcM0mUnfL47yK+zJCZdZ2kk7Pffaehpeb4i+Rl2wessjYI8b2y9ZCDopUmQ+52EpJemSvQyRFAvgnNtmirQSyaCXpoHud9JSXppoUQvQwX1IjjXRkv8hgnG76TgGuoUaQ01jNjjXnFz1lCvkvr9VwOwhpLMr1cF11DDSTEdTsyvn0n51SrIa5x9f3RuQm1vreQcPUJQQ4JzbSTj59TQCOL90VfdHA2FK9BQfoKG2inR0EhBDQnOtWlH0tBI8mcMwgi51DHINZSMtNbqpERDowQ1JDjXplOQ542tl0IEvXQNcr+Tk/TSTYleRgvqRXCujZb4jRGM3yXBvYnLpL2JMcTPGNx0c/resaR19NgAfMZAMr/GCu5NvEaK6WsB+IzB64IxvSqo2Wskzb5O3O+57eZodhwpv8YFYD9RMr/GCWr2DVJM3wjAfVRvCsb0hqBmb5I0+yZRs7+5OZodT8qv8QHQrGR+jRfU7ARSTCcEQLNvCcb0tqBm75A0+xZRsw/cHM1OJOXXxABoVjK/JgpqdhIpppMCoNnJgjG9J6jZ+yTNTiZq9pGbo9kppPyaEgDNSubXFEHNTiXFdGoANPu2YEwfCmr2EUmzbxM1GyUzR7PTSPk1LQCalcyvaYKanU6K6XTyZwxaEK6z9Azy6ywpSNdZegn7/XcaelqeMyQ/wy54naVXkOeNrZeXCXrpG+R+pyTppZ8SvbwjqBfBuTb9FOilNUEvA4Pc71QkvQxSopeZgnoRnGujJX7vCsYvikfuWFHljvWXHvddYo8bi7SGmkXq92cFYA0lmV+zBNdQs0kxnU3Mr9ik/BoS5DXOvj+6C6G2D1Vyjp4jqCHBuTaS8XNqaA7x/ug4JA0NV6ChHgQNjVCiobmCGhKcazOCpKG55M8Y9Cbk0ugg11Bq0lprjBINzRPUkOBcmzFBnje2XvoS9PJ6kPudhqSXcUr0Ml9QL4JzbbTEb4Fg/BJ45I6V0MOp2QuInzFISOp7F5LW0QsD8BkDyfxaKLg3sYgU00UB+IzBe4IxTeKRO1ZSDyem7xH3e5KQNLuYlF+LA7CfKJlfiwU1u4QU0yUBuI/qfcGYpvAIXgv2cGL6PlGzyUmaXUrKr6UB0Kxkfi0V1OwyUkyXBUCzHwjGNI1H7lhpPZyYfkDUbCqSZpeT8mt5ADQrmV/LBTW7ghTTFQHQ7ErBmGbwyB0ro4cT05VEzaYlaXYVKb9WBUCzkvm1SlCzq0kxXR0Aza4RjGlmj9yxsng4MV1D1GwGkmbXkvJrbQA0K5lfawU1u44U03XkzxjMJ1xnGR/k11nSkq6zTBD2++809LQ810t+hl3wOsuEIM8bWy8LCXqZFOR+pyPpZbISvWwQ1IvgXJvJCvTyHkEvbwe53+lJepmmRC8bBfUiONdGS/w+FIxfdo/csXLIHesvPe6HxB43K2kNtYnU728KwBpKMr82Ca6hNpNiupmYX9lI+fVOkNc4+/7oVYTaPlPJOXqLoIYE59pIxs+poS3E+6OzkzQ0W4GG1hE0NEeJhj4S1JDgXJs5JA19RP6MwUZCLs0Pcg1lIK21FijR0FZBDQnOtVkQ5Hlj62UTQS/vBbnfGUl6WaxELx8L6kVwro2W+G0TjJ/xyB2rkIdTs7cRP2OQh9T3bieto7cH4DMGkvm1XXBvYgcppjsC8BmDTwRjWtQjd6xiHk5MPyHu9+QnaXYnKb92BmA/UTK/dgpq9lNSTD8NwH1UnwnGtKRH7lilPJyYfkbUbBhJs5+T8uvzAGhWMr8+F9TsLlJMdwVAs18IxrSMR+5YZT2cmH5B1GxhkmZ3k/JrdwA0K5lfuwU1u4cU0z0B0OxewZiW98gdq4KHE9O9RM0WI2l2Hym/9gVAs5L5tU9Qs1+SYvplADS7XzCmlT1yx6ri4cR0P1GzJUmaPUDKrwMB0Kxkfh0Q1OxXpJh+Rf6MwY+E6yxLg/w6SybSdZZlwn7/nYaelufXkp9hF7zOsizI88bWywWCXlYEud9ukl5WKtHLQUG9CM61WalALz8R9LImyP3OTNLLWiV6OSSoF8G5Nlri941g/Kp75I5VQ+5Yf+lxvyH2uOVIa6hvSf3+twFYQ0nm17eCa6jDpJgeJuaXh5RfG4K8xtn3R98k1PaNSs7RRwQ1JDjXRjJ+Tg0dId4fXZ6koc0KNHSHoKEtSjR0VFBDgnNttpA0dJT8GYN7hFz6OMg1lIW01tqmREPfCWpIcK7NtiDPG1svDwh6+STI/c5K0stOJXo5JqgXwbk2WuJ3XDB+DT1yx2rk4dTs48TPGFQh9b0nSOvoEwH4jIFkfp0Q3Jv4nhTT7wPwGYOTgjFt4pE7VlMPJ6Ynifs91UmaPUXKr1MB2E+UzK9Tgpo9TYrp6QDcR/WDYEybe+SO1cLDiekPRM0+T9LsGVJ+nQmAZiXz64ygZs+SYno2AJo9JxjTVh65Y7X2cGJ6jqjZOiTN/kjKrx8DoFnJ/PpRULPnSTE9HwDNXhCMabhH7ljtPJyYXiBqtj5JsxdJ+XUxAJqVzK+Lgpr9iRTTnwKg2UuCMe3okTtWJw8nppeImm1I0uxlUn5dDoBmJfPrsqBmr5BieoX8GYOcOQif7w7y6yzZSNdZdgn7/XcaelqeP0t+hl3wOsuuIM8bWy+5CXrZE+R+ZyfpZa8SvVwV1IvgXJu9CvSSl6CX/UHudw6SXg4o0cs1Qb0IzrXREr/rgvHr6pE7Vje5Y/2lx71O7HGbkdZQv5D6/V8CsIaSzK9fBNdQN0gxvUHMr5dI+XUwyGucfX90UUJtP6TkHH1TUEOCc20k4+fU0E3i/dHNSRo6rEBDJQkaOqJEQ7cENSQ41+YISUO3yJ8xKE3IpWNBrqGcpLXWcSUa+lVQQ4JzbY4Hed7YeilL0MvJIPc7F0kvp5To5bagXgTn2miJ3x3B+A30yB1rkIdTs+8QP2PQmtT33iWto+8G4DMGkvl1V3Bv4jdSTH8LwGcM7gnGdIhH7lhDPZyY3iPu94STNHuflF/3A7CfKJlf9wU1+4AU0wcBuI/qd8GYDvfIHWuEhxPT34ma7UDS7ENSfj0MgGYl8+uhoGYfkWL6KACafSwY09EeuWON8XBi+pio2c4kzbpyc2JhH9ftenJ+hT3dj5HML2ccnjamUUgxjZKbr9moctzN6x65Y43zcGIaNTdPs91Imo1Gyq9oAdCsZH5FE9RsdFJMowdAszEEYzreI3esCR5OTGMQNduTpNmYpPyKGQDNSuZXTEHNxiLFNBYxv+zrLJ0I11nOBPl1ltyk6yxnhf3+Ow09Lc/YghoSnGtzNsjzxtZLF4Jezge533lIermgRC9xBPUiONfmggK9dCPo5VKQ+52XpJfLSvQSV1AvgnNttMQvnmD8JnnkjjVZ7lh/6XHjEXvc/qQ1VHxSvx8/AGsoyfyKL7iGSkCKaQJifg0g5dfVIK9x9v3RAwi1/ZqSc3RCQQ0JzrWRjJ9TQ7a/UUgaGkjS0A0FGnqFoKGbSjSUSFBDgnNtbpI0lIioIXutNYyQS7eDXEP5SGutO0o0lFhQQ4Jzbe4Eed7YehlO0Mu9IPc7P0kv95XoJYmgXgTn2miJX1LB+M32yB1rjodTs21/WZ8xGErqe5OR1tHJcvM/YyCZX8kE9yaSk2KaPDf/MwYpBGM63yN3rAUeTkxTEPd7hpM0m5KUXykDsJ8omV8pBTWbihTTVAG4jyq1YEzf88gda7GHE9PURM2OImk2DSm/0gRAs5L5lUZQs2lJMU0bAM2mE4zpUo/csZZ5ODFNR9TsWJJm05PyK30ANCuZX+kFNZuBFNMMAdBsRsGYrvDIHWulhxPTjETNjiNpNhMpvzIFQLOS+ZVJULNuUkzdAdBsZsGYrvHIHWuthxPTzETNjidpNgspv7IEQLOS+ZVFULNZSTHNSv6MwQrCdZaHQX6dpQDpOssjYb//TkNPyzOboIYE59o8CvK8sfWyiqCXKBWD2++CJL1ErahDL9kF9SI41yZqkOeNrZc1BL3ECHK/w0h6ialELzkE9SI410ZL/HIKxm+DR+5YG+WO9ZceNyexx51CWkPlIvX7uQKwhpLMr1yCa6jcpJjmJubXVFJ+xQnyGmffH/0RobbHVXKOziOoIcG5NpLxc2ooD/H+6LdJGkqgQEPbCRpKqERDeQU1JDjXJiFJQ3nJnzHYScilJEGuIUNaayVVoqF8ghoSnGuTVMHexGcEvaQIcr8LkfSSUole8gvqRXCujZb4FRCM3yceuWPt9HBqdgHiZwxmkvregqR1dMEAfMZAMr8KCu5NhJFiGhaAzxgYwZh+7pE71i4PJ6aGuN8zm6TZQqT8KhSA/UTJ/CokqNnCpJgWDsB9VEUEY7rHI3esvR5OTIsQNTuPpNmipPwqGgDNSuZXUUHNFiPFtFgANFtcMKb7PXLHOuDhxLQ4UbMLSZotQcqvEgHQrGR+lRDUbElSTEsGQLOlBGN60CN3rEMeTkxLETW7mKTZ50j59VwANCuZX88JarY0KaalA6DZMoIxPeyRO9YRDyemZYiaXUrSbFlSfpUNgGYl86usoGbLkWJajvwZg18I11nSBPl1lsKk6yxplVwn8Eh+hl3wOkvaIM8bWy83CXrJEOR+FyHpJaMSvZQX1IvgXJuMCvTyK0EvmYPc76IkvWRRopcKgnoRnGujJX4VBeN3zCN3rONyx/pLj1uR2OOuIq2hKpH6/UoBWENJ5lclwTVUZVJMKxPzazUpv7IruD/6EaG251Byjq4iqCHBuTaS8XNqqArx/ug1JA3lVqChqDnl/c6jRENVBTUkONcmD0lDVcmfMYhByKX8Qa6hYqS1VgElGqomqCHBuTYFFOxNxCLoxQS538VJeimkRC/VBfUiONdGS/xqCMbvvEfuWBc8nJpdg/gZg42kvrcmaR1dMwCfMZDMr5qCexPPk2L6fAA+Y1BLMKaXPHLHuuzhxLQWcb9nM0mztUn5VTsA+4mS+VVbULN1SDGtE4D7qOoKxvSqR+5Y1zycmNYlanYrSbP1SPlVLwCalcyveoKarU+Kaf0AaLaBYExveOSOddPDiWkDoma3kzT7Aim/XgiAZiXz6wVBzTYkxbRhADTbSDCmtz1yx7rj4cS0EVGzO0mabUzKr8YB0KxkfjUW1OyLpJi+GADNNhGM6T2P3LHuezgxbULU7OckzTYl5VfTAGhWMr+aCmq2GSmmzcifMShMuM5SNMivs5QgXWcppuQ6wUuSn2EXvM5SLMjzxtZLUYJeSga53yVJeimlRC/NBfUiONemlAK9FCfopUyQ+12KpJeySvTSQlAvgnNttMSvpWD8HnrkjvVI7lh/6XFbEnvcfaQ11Mukfv/lAKyhJPPrZcE1VCtSTFsR8+tLUn6VV3B/dHlCba+g5BzdWlBDgnNtJOPn1FBr4v3R+0kaqqxAQ5UJGqqiRENtBDUkONemCklDbcifMahGyKXqQa6h50hrrRpKNNRWUEOCc21qKNibqEHQS60g97s0SS+1leglXFAvgnNttMSvnWD84pSXO1bc8pya3Y74GYNDpL63PWkd3T4AnzGQzK/2gnsTHUgx7RCAzxh0FIxpAkHNJiRptiNxv+cwSbOdSPnVKQD7iZL51UlQs51JMe0cgPuougjGNImgZpOSNNuFqNnvSJrtSsqvrgHQrGR+dRXUbDdSTLsFQLPdBWOaQlCzKUma7U7U7AmSZnuQ8qtHADQrmV89BDXbkxTTngHQbC/J79sV1GxakmZ7ETV7iqTZ3qT86h0AzUrmV29BzfYhxbRPADTbV/I7fwU1m5Gk2b5EzZ4habYfKb/6BUCzkvnVT1Cz/Ukx7e8nptL5MECMe6EwJs+BOM9Cvi/Y3FJZI7qDqx2HRxG/P+f68/d0Mf/8fWDEe7y4Qdb/B1vjFWsMyf3X40nmfTU7F6xrYlEJx5Wan6EkDQwlnmM1xHUYKa7DnhDXp/5+PVJc7WNKcXyVFNdXA1AHBXPCvCpYB4eTYjo8AOcAaQ2MIMVihJ/8iirMXTK+1eWOFcb0OYqgzzWU+BxV0OeaSnyOJujz80p8ji7oc60A+Rz2dD+mtmD8MkTj+Cxdy+oomZu6gnPzYRwdGqwqGL96Lh35WF8JzwbCPMWvk1vnn++jEb6Lj3xP7NPys30+RfC7PumezujC8/6CoM/fRRM8/wjeX8uaC+ma1VBwLrIo6ScauXTwbKyE54tKeDZRwrOpEp7NlPB8SQnP5kp4tlDCs6USni8r4dlKCc/WSni2UcKzrRKe4Up4tlPCs70Snh2U8OyohGcnJTw7K+HZRQnPrkp4dlPCs7sSnj2U8OyphGcvJTx7k3gG8z0MfQLkc9jT/Zi+gvHLrGRftp9LB8/+SngOUMJzoBKeg5TwHKyE5ytKeA5RwnOoEp7DlPB8VQnP4Up4jlDCc6QSnqOU8BythOcYJTzHKuH5mhKeryvhOU4JzzeU8HxTCc/xSnhOUMLzLSU8JyrhOUkJz8lKeE5RwnOqEp5vK+E5TQnP6Up4zlDC8x0lPGcq4fmuEp6zlPCcrYTnHCU85yrhOU8Jz/lKeC5QwnOhEp6LlPB8TwnPxUp4LlHC830lPJcq4blMCc8PlPBcroTnCiU8VyrhuUoJz9VKeK5RwnOtEp7rlPBcr4TnBiU8Nyrh+aESnpuU8NyshOcWJTw/UsJzqxKeHyvhuU0Jz+1KeO5QwvMTJTx3KuH5qRKenynh+bkSnruU8PxCCc/dSnjuUcJzrxKe+5Tw/FIJz/1KeB5QwvMrJTy/VsLzoBKeh5Tw/EYJz2+V8DyshOcRJTyPKuH5nRKex5TwPK6E5wklPL9XwvOkEp6nlPA8rYTnD0p4nlHC86wSnueU8PxRCc/zSnheUMLzohKePynheUkJz8tKeF5RwvNnJTyvKuF5TQnP60p4/qKE5w0lPG8q4XlLCc9flfC8rYTnHSU87yrh+ZsSnveU8LyvhOcDJTx/V8LzoRKej5TwfKyEp31ADTyjKOEZVQnPaMI8ffk97fe5V7OOMSi3vN/RSfMTVZhnjChysRyRW0dOxlSinVhKeMZWwjOOEp5xlfCMp4RnfCU8EyjhmVAJz0RKeCZWwjOJEp5JlfBMpoRnciU8UyjhmVIJz1RKeKZWwjONEp5plfBMp4RneiU8MyjhmVEJz0xKeLqV8MyshGcWJTyzKuGZTQnP7Ep45lDCM6cSnrmU8MythGceJTzzKuGZTwnP/Ep4FlDCs6ASnmFKeBolPAsp4Vk4yO8NuJDZ5RqSRf64DSsGt9+bLZ8H5JQ/bqOKnLyMJpyXReTy0gjOtWkU5Hlj62UoQS9NFOhlIEEvTZXopaigXgTn2jRVoJdhBL00V6CXQQS9tFCil2KCehGca8OKX1Th+BUXvGdxSE4dPpcQ9HmoEp9LCvo8LGfw14JXCbWglYJa8CqhFrRWUgtKCdYCwbk2rRX0TsMJeglXoJfhBL20U6KX5wT1IjjXpp2S3qm0YE0dpaSPKCPo81gFfcQIwnmxo4Lz4muE82InJefFsoLnRcG5Np0U9BEjCXrpqkAvrxP00k2JXsoJ6kVwrk03BXoZRdBLTwV6GUfQSy8levEI6kVwrk0vJX13ecEedLySvruCoM8TlPhcUdDntxSsNUYTakFfBbVgIqEW9FNSCyoJ1gLBuTb9FPROYwh6GahAL5MIehmkRC+VBfUiONdmkJLeqYpgTZ2qpI+oKujzdAV9xFjCeXGIgvPiDMJ5caiS82I1wfOi4FyboQr6iNcIehmuQC/vEPQyQoleqgvqRXCuzQgFenmdoJfRCvQyk6CXMUr0UkNQL4JzbcYo6btrCvags5X03c8L+jxHic+1BH2eq2CtMY5QC15XUAvmEWrBOCW1oLZgLRCcazNOQe/0BkEv4xXoZT5BLxOU6KWOoF4E59pMUNI71RWsqYuU9BH1BH1eoqCPeJNwXpyk4Lz4PuG8OFnJebG+4HlRcK7NZAV9xHiCXt5WoJelBL1MU6KXBoJ6EZxrM02BXiYQ9PKOAr0sI+hlphK9vCCoF8G5NjOV9N0NBXvQFUr67kaCPq9U4nNjQZ9XKVhrvEWoBbMV1ILVhFowR0kteFGwFgjOtZmjoHeaSNDLfAV6WUPQywIlemkiqBfBuTYLlPROTQVr6nolfUQzQZ8/VNBHXM0sf9z3FJwXNxHOi4uVnBdfEjwvCs61Waygj7hG0MtSBXrZTNDLMiV6aS6oF8G5NssU6OU6QS8rFOhlC0EvK5XopYWgXgTn2qxU0ne3FOxBP1bSd78s6PM2JT63EvR5u4K1xi+EWrBGQS3YQagFa5XUgtaCtUBwrs1aBb3TDYJeNijQyycEvWxUopc2gnoRnGuzUUnv1Fawpn6mpI8IF/T5CyU+txP0ea8Sn9sL+rxfic8dBH3+WonPHQV9/kbBuuAmoc/ZrKDP+ZbQ52xR0ud0EuxzBOfabFGwLrhF0MvHCvRymKCXbUr00llQL4JzbbYp0MuvBL18okAvRwh62alEL10E9SI412anknV0V8Ee9JiSvruboM/HlfjcXdDnEwrWGrcJteBzBbXge0It2KWkFvQQrAWCc212Keid7hD0skeBXk4S9LJXiV56CupFcK7NXiW9Uy/BmvqDkj6it6DP55T43EfQ5wtKfO4r6PMlJT73E/T5ZyU+9xf0+bqCdcFdQp+zX0Gf8wuhzzmgpM8ZINjnCM61OaBgXfAbQS8HFejlBkEvh5ToZaCgXgTn2hxSoJd7BL0cVqCXmwS9HFGil0GCehGca3NEyTp6sGAPeltJ3/2KoM93lPg8RNDnuwrWGvcJteCYglrwG6EWHFdSC4YK1gLBuTbHFfRODwh6OalAL/cIejmlRC/DBPUiONfmlJLe6VXBmvq7kj5iuKDPj5X4PELQ56i5dPg8UtDnGEp8HiXoc2wlPo8W9DleruCu93af8zuhzzmjoM+Jn0v+uGeV9DljBPscwbk2ZxWsCx4S9HJegV4SEPRyQYlexgrqRXCuzQUFenlE0MslBXpJSNDLZSV6eU1QL4JzbS4rWUe/LtiDJlHSd48T9DmpEp/fEPQ5mYK1xmNCLbiqoBYkJ9SCa0pqwZuCtUBwrs01Bb2TK4v8cW8o0EsKgl5uKtHLeEG9CM61uamkd5ogWFNTK+kj3hL0OZ0SnycK+pxRic+TBH3OrMTnyYI+Z1Pi8xRBn3MqWBdEIfQ5txX0ObkIfc4dJX3OVME+R3CuzR0F64KoBL3cU6CX3AS93Feil7cF9SI41+a+Ar1EI+jloQK95CHo5ZESvUwT1IvgXJtHStbR0wV70PxK+u4Zgj4XUOLzO4I+F1Sw1ohOqAVRKgV/LQgj1IKolXTUgpmCtUBwrk3UIM8bWy8xCHqJoUAvhqCXmEr08q6gXgTn2rDiJ11TZwnW1CJK+ojZgj4XV+LzHEGfSynxea6gz2WU+DxP0GePEp/nC/pcUcG6ICahz4mjoM+pROhz4irpcxYI9jmCc23iKlgXxCLoJYECvVQm6CWhEr0sFNSL4FybhAr0EpuglyQK9FKFoJekSvSySFAvgnNtkipZR78n2INWV9J3Lxb0uYYSn5cI+lxTwVojDqEWpFBQC54n1IKUSmrB+4K1QHCuTUoFvVNcgl7SKNBLLYJe0irRy1JBvQjOtUmrpHdaJlhT6yrpIz4Q9LmBEp+XC/rcSInPKwR9bqLE55WCPr+kxOdVgj63VLAuiEfoczIo6HNeJvQ5GZX0OasF+xzBuTYZFawL4hP0klmBXloR9JJFiV7WCOpFcK5NFgV6SUDQS3YFemlN0EsOJXpZK6gXwbk2OZSso9cJ9qDhSvru9YI+t1Pi8wZBn9srWGskJNSC3ApqQQdCLcijpBZsFKwFgnNt8ijonRIR9JJfgV46EvRSQIlePhTUi+BcmwJKeqdNgjW1i5I+YrOgz92V+LxF0OdeSnz+SNDnvkp83iro8wAlPn8s6PNgBeuCxIQ+xyjoc14h9DmFlPQ52wT7HMG5NoUUrAuSEPRSVIFehhD0UkyJXrYL6kVwrk0xBXpJStBLSQV6GUrQSykletkhqBfBuTallKyjPxHsQYcr6bt3Cvo8QonPnwr6PFLBWiMZoRaUUVALRhFqQVklteAzwVogONemrILeKTlBL+UV6GU0QS8VlOjlc0G9CM61qaCkd9olWFNfU9JHfCHo8xtKfN4t6PMEJT7vEfR5khKf9wr6PFWJz/sEfZ6uYF2QgtDnVFbQ58wg9DlVlPQ5Xwr2OYJzbaooWBekJOilugK9vEPQSw0letkvqBfBuTY1FOglFUEvtRToZSZBL7WV6OWAoF4E59rUVrKO/kqwB52tpO/+WtDnOUp8Pijo81wFa43UhFpQT0EtmEeoBfWV1IJDgrVAcK5NfQW9UxqCXhoq0Mt8gl4aKdHLN4J6EZxr00hJ7/StYE1dpKSPOCzo8xIlPh8R9HmZEp+PCvq8QonP3wn6vFqJz8cEfV6nYF2QltDnNFHQ56wn9DlNlfQ5xwX7HMG5Nk0VrAvSEfTSXIFeNhD00kKJXk4I6kVwrk0LBXpJT9BLKwV62UjQS2slevleUC+Cc21aK1lHnxTsQTcr6btPCfq8RYnPpwV9/kjBWiMDoRaEK6gFWwm1oJ2SWvCDYC0QnGvTTkHvlJGgl44K9PIxQS+dlOjljKBeBOfadFLSO50VrKk7lPQR5wR9/lSJzz8K+rxLic/nBX3eo8TnC4I+f6nE54uCPn+lYF2QidDndFXQ53xN6HO6KelzfhLscwTn2nRTsC5wE/TSU4FeDhL00kuJXi4J6kVwrk0vBXrJTNBLXwV6OUTQSz8lerksqBfBuTb9lKyjrwj2oIeV9N0/C/p8RInPVwV9PqpgrZGFUAsGKqgF3xFqwSAlteCaYC0QnGszSEHvlJWglyEK9HKMoJehSvRyXVAvgnNthirpnX4RrKnfK+kjbgj6fFqJzzcFfT6rxOdbgj6fV+Lzr4I+/6TE59uCPl9RsC7IRuhzhivoc34m9DkjlPQ5dwT7HMG5NiMUrAuyE/QyWoFerhL0MkaJXu4K6kVwrs0YBXrJQdDL6wr0co2gl3FK9PKboF4E59qMU7KOvifYg95Q0nffF/T5phKfHwj6fEvBWiMnoRaMV1ALfiXUgglKasHvgrVAcK7NBAW9Uy6CXiYp0Mttgl4mK9HLQ0G9CM61maykd3okWFN/U9JHPBb0+YESn+0DSvn8SInPUQR9jpJbh89RBX2OrsTnaII+x8od3PXe7nNyE/qctxX0ObFzyx93mpI+J3pUuWMJzrWZpmBdkIegl3cU6CUOQS8zleglhqBeBOfazFSgl7wEvcxWoJe4BL3MUaKXmIJ6EZxrM0fJOjqWYA+aQEnfHVvQ54RKfI4j6HMiBWuNfIRaMF9BLUhMqAULlNSCuIK1QHCuzQIFvVN+gl7eU6CXJAS9LFail3iCehGca7NYSe8UX7CmJlfSRyQQ9DmVEp8TCvqcVonPiQR9zqDE58SCPruV+JxE0OesCtYFBQh9zlIFfU42Qp+zTEmfk1SwzxGca7NMwbqgIEEvKxToJTtBLyuV6CWZoF4E59qsVKCXMIJe1ijQSw6CXtYq0UtyQb0IzrVZq2QdnUKwB82tpO9OKehzHiU+pxL0Oa+CtYYh1IINCmpBPkIt2KikFqQWrAWCc202KuidChH0slmBXvIT9LJFiV7SCOpFcK7NFiW9U1rBmhqmpI9IJ+hzYSU+pxf0uZgSnzMI+lxSic8ZBX0urcTnTII+l1OwLihM6HM+VtDneAh9zjYlfY5bsM8RnGuzTcG6oAhBL58o0Et5gl52KtFLZkG9CM612alAL0UJevlcgV4qEPSyS4lesgjqRXCuzS4l6+isgj1oZSV9dzZBn6so8Tm7oM9VFaw1ihFqwR4FtaAaoRbsVVILcgjWAsG5NnsV9E7FCXrZr0Av1Ql6OaBELzkF9SI41+aAkt4pl2BNfV5JH5Fb0Oc6SnzOI+hzfSU+5xX0uaESn/MJ+vyiEp/zC/rcTMG6oAShzzmooM95idDnHFLS5xQQ7HME59ocUrAuKEnQy2EFemlO0MsRJXopKKgXwbk2RxTopRRBL8cU6KUFQS/HleglTFAvgnNtjitZRxvBHrSVkr67kKDPrZX4XFjQ5zYK1hrPEWrBSQW1oC2hFpxSUguKCNYCwbk2pxT0TqUJejmjQC/hBL2cVaKXooJ6EZxrc1ZJ71RMsKZ2UNJHFBf0ubMSn0sI+txNic8lBX3uqcTnUoI+91Hi83OCPvcn+RxF2OfSUXXwLKOEZ1klPMsp4elRwrO8Ep4VlPCsqIRnJSU8KyvhWUUJz6pKeFZTwrO6Ep41lPCsqYTn80p41lLCs7YSnnVIPKP68HzadVwOQZ/rBsjnsKf7MfUE18HDlayD6yvRTQMlPF9QwrOhEp6NlPBsrITni0p4NlHCs6kSns2U8HxJCc/mSni2UMKzpRKeLyvh2UoJz9ZKeLZRwrOtEp7hSni2U8KzvRKeHZTw7KiEZyclPDsr4dlFCc+uSnh2U8KzuxKePZTw7KmEZy8lPHsr4dlHCc++Snj2U8KzvxKeA5TwHKiE5yAlPAcr4fmKEp5DlPAcqoTnMCU8X1XCc7gSniOU8ByphOcoJTxHK+E5RgnPsUp4vqaE5+tKeI5TwvMNJTzfVMJzvBKeE5TwfEsJz4lKeE5SwnOyEp5TlPCcqoTn20p4TlPCc7oSnjOU8HxHCc+ZSni+q4TnLCU8ZyvhOUcJz7lKeM5TwnO+Ep4LlPBcqITnIiU831PCc7ESnkuU8HxfCc+lSnguU8LzAyU8lyvhuYLEM6oPz6f9HHQMQZ9XKvE5pqDPq5T4HEvQ59VKfI4t6PMaJT7HEfR5rRKf4wr6vE6Jz/EEfV6vxOf4gj5vUOJzAkGfNyrxOaGgzx8q8TmRoM+blPicWNDnzUp8TiLo8xYlPicV9PkjJT4nE/R5qxKfkwv6/LESn1MI+rxNic8pBX3ersTnVII+71Dic2pBnz9R4nMaQZ93KvE5raDPnyrxOZ2gz58p8Tm9oM+fK/E5g6DPu5T4nFHQ5y+U+JxJ0OfdSnx2C/q8R4nPmQV93qvE5yyCPu9T4nNWQZ+/VOJzNkGf9yvxObugzwcEfbbvB4gecazqDv+jRMQgWsTf7evn9vVk+/qqfb3Rvv5mX4+yr8/Y1yvs/Xt7P9ve37X3O+39P3s/zN4fsvdL7P0Dez1try/t9Za9/rD7cbs/tfs1u3+x67ld39zWsM9/9vnA1oedL3b87O+Cz2mNXNbIbY081shrjXzWyG+NAtYoaMfEGsYahex5s0YRaxS1RjFrFLdGCWuUtEYpazxnjdLWKGONstYoFzFP5a1RwRoVrVHJGpWtUcUaVa1RzRGnMVH/jF0Na9S0xvPWqGWN2taoY4261qhnjfrWaGCNF6zR0BqNrNHYGi9ao4k1mlqjmTVeskZza7SwRktrvGyNVtZobY021mhrjXBrtLNGe2t0sEZHa3SyRmdrdLFGV2t0s0Z3a/SwRk9r9LJGb2v0sUZfa/SzRn9rDLDGQGsMssZga7xijSHWGGqNYdZ41RrDrTHCGiOtMcoao23frTHWGq9Z43VrjLPGG9Z40xrjrTHBGm9ZY6I1JlljsjWmWGOqNd62xjRrTLfGDGu8Y42Z1njXGrOsMdsac6wx1xrzrDHfGgussdAai6zxnjUWW2OJNd63xlJrLLPGB9ZYbo0V1lhpjVXWWG2NNdZYa4111lhvjQ3W2GiND62xyRqbrbHFGh9ZY6s1PrbGNmtst8YOa3xijZ3W+NQan1njc2vsssYX1thtjT3W2GuNfdb40hr7rXHAGl9Z42trHLTGIWt8Y41vrXHYGkescdQa31njmDWOW+OENb63xklrnLLGaWv8YI0z1jhrjXPW+NEa561xwRoXrfGTNS5Z47I1rljjZ2tctcY1a1y3xi/WuGGNm9a4ZY1frXHbGnescdcav1njnjXuW+OBNX63xkNrPLLGY2vYJ4Mo1ohqjWjWiG6NGNaIaY1Y1ohtjTjWiGuNeNaIb40E1khojUTWSGyNJNZIao1k1khujRTWSGmNVNZIbY001khrjXTWSG+NDNbIaI1M1nBbI7M1slgjqzWyWSO7NXJYI6c1clkjtzXyWCOvNfJZI781ClijoDXsk5yxRiFrFLZGEWsUtUYxaxS3RglrlLRGKWs8Z43S1ihjjbLWKGcNjzXKW6OCNSpao5I1KlujijWqWqOaNapbo4Y1alrjeWvUskZta9SxRl1r1LNGfWs0sMYL1mhojUbWaGyNF63RxBpNrdHMGi9Zo7k1WlijpTVetkYra7S2RhtrtLVGuDXaWaO9NTpYo6M1OlmjszW6WKOrNbpZo7s1elijpzV6WaO3NfpYo681+lmjvzUGWGOgNQZZY7A1XrHGEGsMtcYwa7xqjeHWGGGNkdYYZY3R1hhjjbHWeM0ar1tjnDXesMab1hhvjQnWeMsaE60xyRqTrTHFGlOt8bY1plljujVmWOMda8y0xrvWmGWN2daYY4251phnjfnWWGCNhdZYZI33rLHYGkus8b41llpjmTU+sMZya6ywxkprrLLGamusscZaa6yzxnprbLDGRmt8aI1N1thsjS3W+MgaW63xsTW2WWO7NXZY4xNr7LTGp9b4zBqfW2OXNb6wxm5r7LHGXmvss8aX1thvjQPW+MoaX1vjoDUOWeMba3xrjcPWOGKNo9b4zhrHrHHcGies8b01TlrjlDVOW+MHa5yxxllrnLPGj9Y4b40L1rhojZ+scckal61xxRo/W+OqNa5Z47o1frHGDWvctMYta/xqjdvWuGONu9b4zRr3rHHfGg+s8bs1HlrjkTUeW8NuBKJYI6o1olkjujViWCOmNWJZI7Y14lgjrjXiWSO+NRJYI6E1ElkjsTWSWCOpNZJZI7k1UlgjpTVSWSO1NdJYI6010lkjvTUyWCOjNTJZw22NzNbIYo2s1shmjezWyGGNnNbIZY3c1shjjbzWyGeN/NYoYI2C1gizhrFGIWsUtob9bHb7edP2M5PtZwjbz9S1nzFrP3PVfgap/UxO+3mX9rMk/3hOozXs5wvaz+6zn4tnP3POfp6b/aw0+zlk9jO+7Odn2c+msp/7ZD9TyX5ekf0sIPs5O/ZzZ+xnutjPOLGfH2I/m8N+7oX9TAn7eQ32sxDs5wzY3+Fvfz++/d3z9ve629+Zbn8f+cvWsL9H2/6Oavv7n+3vVra/t9j+TmD7+3bt77K1vyfW/g5W+/tN7e8Otb+X0/7OS/v7JO3varS/B9H+jkH7+/vs78azv3fO/k43+/vS7O8is7/ny/4OLfv7qezvfrK/V8n+ziL7+4BetYb9PTb2d8TY379if7eJ/b0hdu9jf9+F/V0S9vc02N+BYH+/gP3Zfftz8fZnzu3Pc9uflbY/h2x/xtf+/Kz92VT7c5/2ZyrtzyvanwW0P2dnf4bN/nyY/dkr+3NN9meG7M/jzLOG/TkS+zMa9ucf7M8W2Pft2/fE2/eb2/dy2/dJ2/cg2/f32vfO2vel2vdp2vct2vfx2fe12fd52fc92fcB2ffF2PeJ2PdN2PcR2NfV7evM9nVX+zqkfV3Ovk5lX7exr2PY+/r2Pre972vvg9r7gvY+mb1vZO+j2PsK9jrbXnfa6zB7XWL36Snthjjip96fv/7R89o/rfr0Ce/ao4+7T3d3q7Zt3f079ung7t4vvFe7Lt3t1uyPfjGymC8cmBwR/9bq2Ltrqz5tOri7de8T7u4Q3qpteC93m+7d+vRq1aaPfZhe4b172w30H92M9yfLk9C9+3Tv1ap9uLt3l+59/kDafUFkue6IBvgHYPY5MJn/F9O1b5c+HXt0Gfi/wAMo8BDA8jBq7BgK/B4FnkaBZ1HgjyjwAgr8CZjCn1FjN1DgLRR4FwU+QIFRo0c+oLEdmKQR//bo29t6U98+7u7t3K279+3W1l7WuuJFB2mlAWhlBjC5AEwYgCkGYMoBmKoAphaAaQBgmgCYlgAmHMB0BjB9AMwgADPsX8ttBCq3iQCtGQBmLoBZAmBWAJgNAOZjAPM5gNkPYI4AmONoAp1EgWcAlpdRY1dR4A2A5X0AEy0GSDAmCowbI/IsE6HGkqLAlADLzKixAiiwMAosiwJrosC6KLAZCuyAAruiwJ4osA8KHACk6TDU2AgUOAZgOQHATEcJzkKB81HgYhT4AQpcjQLXocAPgSnciRr7CgV+iwKPocBTKPAcCvwJBd5CgX/cKIAAY6DAuCgwEQpMjgLToMBsKNCgwGIo8DkU6EGBlVFgDRTYEAW2RoHtUWAXFNgTBfZDgYNR4BgUOAUFzkCBs1HgAhS4BAUuR4EfosDPUOAeFHgABX6DAr9DgSdR4E8o8DYKvI8CH6PA6LFAYBwUmBAFpkGBOVBgXhQYhgKLosBSKLAcCqyBAhujwJdQYCsU2A4FdkaBPVDgYBT4GgocjwIno8DpKHAWCpyPApejwM0ocBsK/BQF7kaB+1HgIRR4EgVeRoHXUeCvKPAeCnyEAqPFBoEJUWA6FOhGgdlRYB4UWBAFFkGB5VDg8yiwHgpshAKbocCXUWA4CuyBAoegwBEocCwKfBMFTkKB01DgOyhwNgqc7wD+28sAC1Fj76HAJQDLNaixdShwA8ByC4DZiRL8DAXuAljuRo3tRYFfAiwPosaOosBjKPAUCvwRBV5AgVdQ4A0UeAsF3kaBd1HgPSBNo8UBjcVAgbHiRJ5lfACTFCWYHAWmRIGpUWBaFJgeBWZEgW5gCrOjxvKiwPwosCAKNCiwMAosigJLoUAPCqyAAiuhwCoosBoKrIEC66DAhiiwMQpsggKbocDmKLAlCmyLAjuhwC4osBsK7IECe6HAPihwIAochgKHo8CRKHA0ChyLAl9HgRNQ4FQUOA0FzkCBM1HgLBQ4BwUuRIFLUeAHKHAFClyFAtegwHUocBMK3IYCd6DAnSjwMxS4CwXuRoH7UeA3KPAwCjyKAo+hwBMo8CQKPIsCf0KBl1HgzyjwGgr8BQXeRIF3UeBDFPgYBUaJCwKjocAYKDAWCoyPApOiwOQoMCUKTI0C06LA9CgwMwrMiQJzo8C8KDA/CiyIAg0KLIYCS6PAsijQgwIroMBKKLAKCqyJAuuhwAYosCEKbIwCm6DAZiiwOQpsiQJbOYD/9jJAJwDTw4F58pdZ9EJduQHQugdg/vim3UhiYgOYhAAmFYDJBGCyA5i8AMYAmOIApgyAqQhgagKYegCmkQPzZLm96Hhn5DY7AVrjAcxUADMLwCwAMMsAzFoAswXA7AQwewHMATSBDqLAwwDL71Fjp1HgOYDlJQDzC4C5hzr1Owr846vpI8kyRnzQWGwUGB9gmQo1lhYFZgRYZgcw+QBMUdSpEiiwNMCyPGqsEgqsBrBsgBprhAKbAixbAZgOAKYn6lQfFDgAYDkENfYqChwFsHwLNTYZBU4DWM4GMIsAzArUqdUocD3AcjNqbCsK3AGw/BQ1tgsF7gVYHkSNfYsCvwNYngIwPwKYy6hTV1HgDYDlbdTYbyjwd4DlH49fQoxFQ4GxEkSeZTzUWEIUmBRgmRI1lgYFZgBYZkaNZUOBuQCWBjVWBAWWAFiWAzBVAEwd1Kn6KLARwLIZaqwFCmwNsGyPGuuEArsBLHujxvqhwEEAy2GosREocAzA8g3U2AQUOBlgORs1Ng8FLgJYfgBg1gKYj1CntqHAnQDLL1Bje1HgAYDlN6ixIyjwOMDyNGrsLAq8ALC8ghq7hgJvAizvosbuo8BHAMs4CUFj8VFg4oSRZ5kKwGQEMDlRp/KgwAIAy8KosWIosBTAshxqrAIKrAKwrIkaq40C6wMsG6PGmqLAFgDLNqixdiiwE8CyL2psAAp8BWA5EsCMAzBTUKemocCZAMu5qLEFKHAxwPID1NhKFLgWYPkhamwLCtwGsPwUNbYLBe4FWH6FGjuEAo8ALM+gxn5EgT8BLK8DmDsA5jHqVNREIDBmosizjIcaS4gCkwIsU6HG0qLAjADLrKixHCgwD8CyIGqsEAosBrB8DjVWFgVWAFjWQo3VRYEvACybAZjWAKYz6lQ3FNgLYNkfNTYIBQ4FWI5EjY1BgeMAlm+hxiajwGkAy3dRY3NQ4AKA5RLU2DIUuBJguRk1thUF7gBYfgFgDgCYo6hTx1HgKYDlOdTYBRR4GWB5HTV2EwXeAVg+QI09QoFRE0eeZazEoLG4KDAhwDIZaiwlCkwLsMyOGsuFAvMBLAsDmFIApiLqVBUUWANgWQc1Vh8FNgJYNkONtUCBrQGW7VFjnVBgN4Blb9RYPxQ4CGA5DDU2AgWOAVhOQo1NRYEzAJZzAcxiALMKdWotCtwIsPwINbYNBe4EWH6BGtuLAg8ALL9BjR1BgccBlqdRY2dR4AWA5RXU2DUUeBNg+RA15koCAqMniTzLeAAmKYBJhzqVEQVmAVjmRI3lQYEFAJaFUWPFUGApgGU51FgFFFgFYFkTNVYbBdYHWDZGjTVFgS0Alh1RY11QYA+AZX8AMxTAjEWdGocCJwAsp6DGpqHAmQDLuaixBShwMcDyA9TYShS4FmD5IWpsCwrcBrD8FDW2CwXuBVgeRo19hwK/B1ieAzCXAcwt1Kk7KPA+wPIxaixqUhAYM2nkWcZDjSVEgUkBlqlQY2lRYEaAZVbUWA4UmAdgWRA1VggFFgNYlkeNVUKB1QCWdQBMIwDTEnWqNQpsB7DsjBrrhgJ7ASz7o8YGocChAMuRqLExKHAcwPIt1NhkFDgNYPkuamwOClwAsFyBGluNAtcDLD8CMDsBzD7UqQMo8BDA8ihq7DgKPAWwPIcau4ACLwMsr6PGbqLAOwDLB6ixRygwarLIs4yVDDQWFwUmBFimQY2lR4FugGVOAFMAwBRHnSqFAssCLCuixqqgwBoAyzqosfoosBHAshlqrAUKbA2wbI8a64QCuwEse6PG+qHAQQDLIaixV1HgKIDlGNTYayhwHMDybdTYdBT4DsByNoCZD2CWok59gAJXACxXocbWoMB1AMttqLEdKHAnwHIXgNkLYA6hTn2LAo8ALL9DjR1Hgd8DLC+ixi6hwCsAy+sA5haAeYA69RAFPgZYRkkOGouGAmMkjzzLxKixpCgwOcAyNYBJD2CyoU7lQIG5AJZ5UGP5UGABgGUYaqwQCiwCsCyHGiuPAisCLKsCmJoApgHqVEMU2Bhg2QQ11gwFNgdYtkSNtUKBbQCW4aix9iiwI8CyM2qsKwrsDrDsiRrrjQL7AixfRY2NQIGjAJavAZg3AcxU1KlpKHAGwHImamwWCpwDsJyHGluAAhcBLBejxt5HgcsAlstRYytR4GqA5VrU2HoUuBFg+Qlq7FMU+DnAcg+A2Q9gDqNOHUWBxwCWJ1BjJ1HgaYDlGdTYORR4HmB5ETV2CQVeAVheRY1dR4E3AJa3UGO3UeBdgGXUFKCx6CgwZorIs4wLYBICmJSoU6lRYFqAZXrUWEYU6AZYZkGNZUOBOQCWuVBjeVBgPoBlAdRYGAosBLAsghorhgJLACwrosYqo8CqAMuaAKYOgGmMOtUEBTYDWDZHjbVEga0Alm1QY+EosD3AsiNqrDMK7Aqw7I4a64kCewMs+6LG+qPAgQDLUaixMSjwNYDlmwBmIoCZgTo1EwXOAljOQY3NQ4ELAJaLUGOLUeD7AMtlqLHlKHAlwHI1amwtClwPsNyIGtuEArcALD9HjX2BAvcALPcDmIMA5hjq1AkUeBJgeRo1dgYFngNYnkeNXUSBlwCWV1BjV1HgdYDlDdTYLRR4G2B5FzV2DwU+AFjGTAkai40C46aMPMuEACYpgEmLOpUeBWYEWLpRY1lQYDaAZQ7UWC4UmAdgmQ81VgAFhgEsC6HGiqDAYgDLEqixUiiwNMCyKmqsOgqsCbCsA2AaAJhmqFPNUWBLgGUr1FgbFBgOsGyPGuuIAjsDLLuixrqjwJ4Ay96osb4osD/AciBqbDAKHAKwfA01Ng4FvgmwnAhgpgKYWahTc1DgPIDlAtTYIhS4GGD5PmpsGQpcDrBciRpbjQLXAizXo8Y2osBNAMstqLGtKHAbwHIPamwfCtwPsDwIYA4DmJOoU6dR4BmA5TnU2HkUeBFgeQk1dgUFXgVYXkeN3UCBtwCWt1Fjd1HgPYDlA9TYQxT4GGAZNxVoLD4KTJgq8iyTApiUACYj6pQbBWYBWGZDjeVAgbkAlnlQY/lQYAGAZRhqrBAKLAKwLIYaK4ECSwEsS6PGyqJAD8CyJmqsFgqsA7BsAGAaA5iWqFOtUGAbgGU4aqw9CuwIsOyMGuuKArsDLHuixnqjwL4Ay/6osYEocDDAcghqbBgKHA6wfBM1NgEFTgRYTgUwMwDMPNSpBShwEcByMWrsfRS4DGC5HDW2EgWuBliuRY2tR4EbAZabUGNbUOBWgOU21NgOFLgTYLkfNfYVCjwIsDwMYI4BmDOoU+dQ4HmA5UXU2CUUeAVgeRU1dh0F3gBY3kKN3UaBdwGW91BjD1DgQ4DlY9RYlNQgMFrqyLNMiBpLjAKTAixTApi0ACYL6lQ2FJgDYJkLNZYHBeYDWBZAjYWhwEIAyyKosWIosATAshRqrDQKLAuw9KDGKqDASgDLKqixaiiwBsCyHoBp7MB4n7HQo29v6019+7i7t3O37t63W9ve9qtNUFfqp4k8raYAphWA6QhgugOYAQDmVQAzBsC8CWAmA5gZAGYOgFkEYJYDmLUA5kMH5sly2+x4Z6Tk9gigFTNt5DEJAEwKAJMOwGQFMHkBTGEA8xyAqQhgqjowkSs9KLA2wLIhauxFFPgSwLI1gOkIYHqhTvVFgQMBlkNRY8NR4GiA5UTU2BQUOB1gOQfAvAdgVqJOrUGBGwCWW1BjH6PATwCWX6LGvkKB3wAsjwOYMwDmMurUVRR4A2B5BzV2DwU+BFjGTgcai4cCE6WLPMuUACYDgMmBOpUbBeYHWBZCjRVFgSUBlqVRY+VQYEWAZQ3UWC0UWA9g2RjANAcwbVCn2qHATgDLbqixniiwL8ByIGrsFRT4KsByFGpsLAp8A2D5FmpsMgqcBrCciRqbjQLnAyyXocZWoMA1AMtNAGY7gNmNOrUPBX4FsPwWNXYUBZ4AWP6AGjuHAi8CLH9GjV1HgbcAlr+hxh6gwMcAy+jpQWOxUGC89JFnmRI1lgYFZgBYZgMweQFMEdSp4ijwOYClBzVWEQVWBVg+jxqrgwIbACxfRI01Q4EtAZZtUWPtUWBngGUP1FhvFNgfYDkCNTYaBb4OsJwIYKYDmHmoUwtR4BKA5XLU2CoUuA5guQk19hEK3A6w/Aw19gUK3Aew/Bo19g0KPAqw/B41dhoFngNYXkON3UCBtwGWvwOYaBkij4mfAXQqEQpMBrBMjRpLhwIzASyzocZyosC8AMsw1FhhFFgcYFkaNVYOBVYEWFZDjdVEgXUAlk1RY81RYCuAZQcA0x3ADECdGowChwEsR6HGxqLANwCWE1FjU1DgdIDlLNTYXBS4EGD5PmrsAxS4CmC5HjX2IQr8CGC5CzW2BwXuB1h+C2BOAJgfUacuosArAMtfUGO3UOBdgOXvqLHHKDBaxsizjJ0RNBYPBSYCWCZHjaVCgekAlm7UWFYUmBNgWQg1VhQFlgRYegBMVQBTF3WqAQpsDLB8CTXWEgW2AVh2QI11RoHdAZZ9UGP9UeBggOWrqLGRKHAswPJN1NhbKHAKwHIOamw+CnwPYLkcwKwDMFtRp7ajwE8BlrtRY/tQ4FcAy29RY0dR4AmA5Q+osXMo8CLA8mfU2HUUeAtg+Rtq7AEKfAywjJsJNJYABSbJFHmWqQFMJgCTC3UqLwosCLAsghorjgKfA1h6UGMVUWBVgOXzqLE6KLABwPJF1FgzFNgSYNkWNdYeBXYGWPZDjQ1EgUMAlqMAzBsAZirq1HQU+C7Ach5qbCEKXAKwXI4aW4UC1wEsN6HGPkKB2wGWn6HGvkCB+wCWX6PGvkGBRwGWZ1Fj51HgJYDlLwDmLoBxuUGnoqHAWO7Is4yPGkuEApMBLFOjxtKhwEwAy2yosZwoMC/AMgw1VhgFFgdYlkaNlUOBFQGWtVFj9VBgQ4DlSwCmDYDpgjrVHQX2BlgOQI0NRoHDAJajUGNjUeAbAMuJqLEpKHA6wHIWamwuClwIsHwfNfYBClwFsNyCGvsYBX4CsNwNYL4CMN+hTp1AgacBlj+ixi6iwCsAy19QY7dQ4F2A5e+osccoMFrmyLOMnRk0Fg8FJgJYJkeNpUKB6QCWOVBjuVFgfoBlEQDzHICphDpVFQXWBFjWRY01QIGNAZYvocZaosA2AMsOqLHOKLA7wLIPaqw/ChwMsHwVNTYSBY4FWE5Gjb2NAt8BWM4DMEsAzGrUqXUo8EOA5VbU2HYU+CnAcjdqbB8K/Apg+S1q7CgKPAGw/AE1dg4FXgRY/owau44CbwEs76DG7qHAhwDLx6ixKFlAYLQskWeZEDWWGAUmBVimBDBpAUwW1KlsKDAHwDIXaiwPCswHsCyOGiuJAp8DWJYDMBUBTE3UqVoosA7Ash5qrAEKbAiwfBk11hoFtgVYdgAwXQBMH9SpfihwAMByEGrsFRQ4FGD5OmrsDRQ4HmA5CcC8DWBmo07NRYHzAZYLUWPvocAlAMulqLEPUOAKgOUm1NgWFLgVYLkDwHwGYL5EnTqAAr8GWB5CjX2LAo8ALL9DjR1Hgd8DLE+hxn5AgWcBlj+ixi6gwJ8AlpdRYz+jwGsAy3uosQco8CHAMkrWyGNiAJgEWUGnEqHAJADLZKixFCgwFcAyDWosHQrMALDMhBrLjAKzAiyzo8ZyosDcAMu8qLH8KLAgwLIUaqw0CiwLsKwAYKoAmNqoU3VRYH2A5QuosUYo8EWAZVPU2EsosAXA8mXUWGsU2BZg2Q411gEFdgJYdkGNdUOBPQCWg1FjQ1DgMIDlSAAzFsC8hTo1CQVOAVi+jRqbjgLfAVi+ixqbjQLnAizno8YWosD3AJZLUGNLUeAHAMsVqLFVKHANwHIramwbCtwBsPwMwOwGMF+jTh1Cgd8CLI+gxr5DgccBlt+jxk6hwB8AlmdRYz+iwAsAy59QY5dR4M8Ay2uosV9Q4E2A5UPU2GMUGCVb5FnGADBxAEySbKBTyVBgCoBlKtRYGhSYDmCZATWWCQVmBlhmRY1lR4E5AZa5UWN5UWB+gGVB1JhBgYUBlmVRYx4UWAFgWQXA1AAw9VGnXkCBjQCWL6LGmqLAlwCWLVBjL6PA1gDLtqixdiiwA8CyE2qsCwrsBrDsgRrrhQL7ACyHocaGo8CRAMuxAOYNADMFdeptFDgdYPkOauxdFDgbYDkXNTYfBS4EWL6HGluCApcCLD9Aja1AgasAlmtQY+tQ4AaA5Q7U2E4U+BnAcjeA+RLAfIs6dQQFfgewPI4a+x4FngJY/oAaO4sCfwRYXkCN/YQCLwMsf0aNXUOBvwAsb6LGfkWBdwCWUbKDxqKhwBjZI88yDoBJAGBSoE6lQoFpAJbpUGMZUGAmgGVm1FhWFJgdYJkTNZYbBeYFWOZHjRVEgQZgWRg1VhQFFgdYVkCNVUKBVQCWNQBMbQDTCHXqRRTYFGD5EmqsBQp8GWDZGjXWFgW2A1h2QI11QoFdAJbdUGM9UGAvgGUf1Fg/FDgAYDkSNTYaBY4FWL4BYN4CMNNRp95Bge8CLGejxuaiwPkAy4WosfdQ4BKA5VLU2AcocAXAchVqbA0KXAew3IAa+xAFbgZYfoYa24UCdwMsvwQwXwOY71CnjqPA7wGWp1BjP6DAswDLH1FjF1DgTwDLy6ixn1HgNYDlL6ixmyjwV4DlHdTYbyjwPsAyRg7QWCwUGCdH5FkmADBJAEwa1Kl0KDADwDITaiwzCswKsMyOGsuJAnMDLPOixvKjwIIAS4MaK4wCiwIsi6PGSqLA5wCWVVBj1VBgDYBlbQBTH8A0RZ16CQW2AFi+jBprjQLbAizbocY6oMBOAMsuqLFuKLAHwLIXaqwPCuwHsByAGhuEAl8BWI5Fjb2OAt8AWL4FYKYAmHdRp2ajwLkAy/mosYUo8D2A5RLU2FIU+AHAcgVqbBUKXAOwXIca24ACPwRYbkaNfYQCPwZYbkeNfYICPwVY7gUwXzswSSP+7dG3t/Wmvn3c3du5W3fv261tb/vVQ6gr+3JGntY3AOY4gDkLYH4CMDcAzD0A8xjAxMgVeUw8AJMEwKQCMBkATHYAkxfAhDkwT5ZbIcc7IyW3/gCtYQBmDICZAGCmAphZAGYRgFkOYNYDmK0AZgeaQJ+iwC8AlgdQYwdR4GGA5QkAcxbAXEGduoYCbwIs76LG7qPARwDLOLlBY/FRYOLckWeZCsBkBDA5UafyoMACAMvCqLFiKLAUwLIyaqwaCnweYNkAwDQFMG1Qp9qhwE4Ay+6osV4osB/AcjhqbBQKfA1g+RaAmQZg5qJOLUCBiwGWH6DGVqLAtQDLDaixTShwK8DyU9TYLhS4F2D5NYA5AmC+R506jQLPASwvosYuo8BrAMubqLHbKPAewPIhasyVBwRGzxN5lrFRY/FQYCKAZTLUWEoUmBZgmRU1lgMF5gFYGgBTAsCUR52qhAKrASxrocbqosAXAJZNUGMvocCXAZbhqLEOKLALwLInaqwPChwAsByCGnsVBY4CWL6FGpuMAqcBLGcDmEUAZgXq1GoUuB5guRk1thUF7gBYfo4a240CvwRYHkSNfYsCvwNYnkSN/YACfwRYXkKN/YwCfwFYPkCNPUKBUfNGnmUcAJMYwKTJCzqVHgW6AZbZUWO5UGA+gKVBjRVBgSUAlmVQYx4UWAlgWR019jwKrAuwbIgaexEFvgSwbI8a64QCuwEs+wKYVwDMaNSp11DgmwDLSaixqShwBsByNmpsHgpcBLBcihpbjgJXAyw3oMY2ocCtAMtPUGOfocDdAMtvUGNHUOBxgOUZAPMTgLmBOvUrCvwNYPkQNebKBwKj54s8yziosfgoMDHAMgVqLDUKTA+wzIway4YCcwEs86PGwlBgEYBlOdRYBRRYBWBZC8C8AGCao069jALbAiw7osa6oMAeAMu+qLEBKPAVgOVw1NgoFPgawHI8amwiCpwKsHwHNTYLBc4DWH6AGluJAtcCLDcDmB0AZg/q1Jco8GuA5WHU2Hco8HuA5RnU2I8o8CeA5VXU2C8o8FeA5T3U2O8o0JU/8ixj5AeNxUaB8QGWqVBjaVFgRoBldgCTD8AURZ0qgQJLAyzLo8YqocBqAMtaqLG6KPAFgGUT1NhLKPBlgGU4aqwDCuwCsOyJGuuDAgcALEeixsagwHEAy0kAZgaAmY86tQgFvg+wXIEaW40C1wMsN6PGtqLAHQDLz1Fju1HglwDLg6ixb1HgdwDLk6ixH1DgjwDL66ixmyjwDsDyIYCJXiDymAQFQKcSo8DkAMs0qLH0KNANsMyOGsuFAvMBLA1qrAgKLAGwLIMa86DASgDL6qix51FgXYBlM9RYCxTYGmDZEcD0ADADUadeQYGvAixHo8ZeQ4FvAiwnocamosAZAMvZqLF5KHARwHIpamw5ClwNsNyAGtuEArcCLL9Aje1FgQcAlocBzPcA5jzq1E8o8GeA5Q3U2K8o8DeA5UPUmKsgCIxeMPIs46DG4qPAxADLFKix1CgwPcAyM2osGwrMBbAsjBorhgJLASzLA5hqAKYe6tQLKPBFgGVz1NjLKLAtwLIjaqwLCuwBsOyLGhuAAl8BWA5HjY1Cga8BLMejxiaiwKkAy7mosQUocDHAcgWAWQ9gPkad2oECPwNY7kGNfYkCvwZYHkaNfYcCvwdYnkGN/YgCfwJYXkWN/YICfwVY3kON/Y4CXWGRZxkvDDSWEAUmBVimATBuAJMbdSofCgwDWBZFjZVAgaUBluVRY5VQYDWAZS3UWF0U+ALAsglq7CUU+DLAMhw11gEFdgFYdkeN9UKB/QCWA1Bjg1DgKwDLsaix11HgGwDLtwDMFADzLurUbBQ4F2A5HzW2EAW+B7BcjRpbiwLXAyw3AZitAOYz1KldKHA3wHIvauxLFHgAYHkMNXYCBZ4EWJ4BMOcBzFXUqeso8AbA8hZq7DYKvAuwjGpAY9FRYEwTeZZxAUxCAJMSdSo1CkwLsEyPGsuIAt0AyyyosWwoMAfA0qDGCqPAogDLkgCmDICpjDpVFQVWB1jWRI3VQoF1AJb1UGMNUGBDgGVj1FgTFNgMYNkcNdYSBbYCWLZBjYWjwPYAy16osT4osB/AchCAGQpgxqBOvYYCxwEs30SNTUCBEwGWk1FjU1HgNIDlDNTYTBQ4C2A5BzU2DwUuAFguQo0tRoHvAyzXocY2oMAPAZYfAZjtAOYL1Kk9KHAfwHI/auwrFHgQYPkNauwwCjwKsDyGGjuBAk8CLE+jxs6gwHMAy/OosYso8BLA8lfU2B0U+BvA8ncA4yoUeUzsQqBTcVFgfIBlQtRYYhSYFGCZHDWWEgWmBlimRY2lR4EZAZZu1FgWFJgNYJkDNZYLBeYBWBZFjRVHgSUBlmUATHkAUx11qiYKrAWwrIMaq4cCGwAsG6LGGqPAJgDLZqix5iiwJcCyFWqsDQoMB1i2R411RIGdAZb9UGMDUOAggOVQADMCwIxDnXoTBU4AWE5EjU1GgVMBltNQYzNQ4EyA5SzU2BwUOA9guQA1tggFLgZYvo8aW4YClwMsP0SNbUaBHwEstwOYTwHMPtSp/SjwK4DlQdTYNyjwMMDyKGrsGAo8AbA8iRo7jQLPACzPocbOo8CLAMtLqLErKPAqwPI31Nh9FPg7wNJVOPKY6AAmfmHQqYQoMDHAMilqLDkKTAmwTI0aS4sC0wMsM6LG3CgwC8AyG2osBwrMBbDMgxrLhwILACxLosaeQ4FlAJblAUxlAFMLdaoOCqwHsGyAGmuIAhsDLJugxpqhwOYAy5aosVYosA3AMhw11h4FdgRYdkaNdUWB3QGWg1Bjr6DAoQDLEQBmDICZgDo1EQVOBlhORY1NQ4EzAJYzUWOzUOAcgOU81NgCFLgIYLkYNfY+ClwGsFyOGluJAlcDLD9CjX2MArcDLD8FMF8AmK9Qpw6iwG8AlodRY0dR4DGA5QnU2EkUeBpgeQY1dg4FngdYXkSNXUKBVwCWV1Fj11HgDYDl76ixRyjQVSTyLKMDmNgAJnER0KmkKDA5wDIlaiw1CkwLsEyPGsuIAt0AyyyosWwoMAfAMhdqLA8KzAewLIAaC0OBhQCWZVBj5VBgeYBlZQBTHcDUQ51qgAIbAiwbo8aaoMBmAMvmqLGWKLAVwLINaiwcBbYHWHZEjXVGgV0Blt1RYz1RYG+A5VDU2KsocATAcgyAGQdgJqNOTUWB0wCWM1BjM1HgLIDlHNTYPBS4AGC5CDW2GAW+D7BchhpbjgJXAixXo8bWosD1AMvtqLFPUOCnAMsvAMw+APMN6tRhFHgUYHkMNXYCBZ4EWJ5GjZ1BgecAludRYxdR4CWA5RXU2FUUeB1geQM1dgsF3gZYuoqCxqKiwOhFI88yNoCJD2CSo06lRIGpAZZpUWPpUWBGgKUbNZYFBWYDWOZAjeVCgXkAlvlQYwVQYBjAshBqrAgKLAawLIEaK4UCSwMsKwKY6g5M0oh/e/Ttbb2pbx9393bu1t37dmvb2361JupKpWKRp/U8gGkAYJoBmFYAphOA6QVgBgCYoQBmFIAZB2AmAphpAGYBgFniwDxZOksd74yUdK4BtO4AmIcAJkbxyGPiAZhkACYdgMkKYPICmKIOTKSSoQQKLA2wrIgaq4ICawAs6wKYxgDmZdSpNiiwPcCyC2qsOwrsDbAcihobjgJHAyzfBDBTAMws1Km5KHAhwPJ91NgHKHAVwHILauxjFPgJwHI3gPkKwHyHOnUCBZ4GWP6IGruIAq8ALO+gxu6hwIcAy+glIo+JB2CSlwCdSoUC0wEs3aixrCgwJ8CyAGrMoMCiAMvnAEx5AFMVdaoGCqwNsKyPGmuIApsALJujxl5GgW0Blh1QY51RYHeAZW/UWD8UOAhgORQ1NhwFjgZYTkCNTUKBbwMsZwGYhQBmOerUKhS4DmC5CTX2EQrcDrD8DDX2BQrcB7D8GjX2DQo8CrD8HjV2GgWeA1j+hBq7ggKvAyzvo8YeosAoJSPPMjaASQRgUpcEnUqHAjMBLLOhxnKiwLwAyzDUWGEUWBxgWRo1Vg4FVgRYVkON1USBdQCWL6DGGqPAZgDLdqixjiiwK8CyD4AZDGBGoU6NRYFvACwnosamoMDpAMtZqLG5KHAhwPJ91NgHKHAVwHI9auxDFPgRwHIHauxTFPgFwPIQauwwCjwGsPwBwFwEML+gTt1CgXcBlr+jxh6jwGilIs8ydinQWDwUmAhgmRw1lgoFpgNYulFjWVFgToBlPtRYQRRYGGBZFjVWHgVWBlg+D2AaAJiXUKdaosA2AMsOqLHOKLA7wLIPaqw/ChwMsHwVNTYSBY4FWL6JGnsLBU4BWM5Ajb2LAucCLJehxlagwDUAy00AZjuA2Y06tQ8FfgWw/BY1dhQFngBY/oAaO4cCLwIsf0aNXUeBtwCWv6HGHqDAxwDL6M+BxmKhwHjPRZ5lStRYGhSYAWCZDcDkBTBFUKeKo8DnAJYe1FhFFFgVYPk8aqwOCmwAsHwRNdYMBbYEWLZFjbVHgZ0Blj1QY71RYH+A5QjU2GgU+DrAciKAmQ5g5qFOLUSBSwCWy1Fjq1DgOoDlJtTYRyhwO8DyM9TYFyhwH8Dya9TYNyjwKMDye9TYaRR4DmB5DTV2AwXeBlj+DmCilY48Jn5p0KlEKDAZwDI1aiwdCswEsMyGGsuJAvMCLMNQY4VRYHGAZWnUWDkUWBFgWQ01VhMF1gFYNkWNNUeBrQCWHQBMdwAzAHVqMAocBrAchRobiwLfAFhORI1NQYHTAZazUGNzUeBCgOX7qLEPUOAqgOV61NiHKPAjgOUu1NgeFLgfYPktgDkBYH5EnbqIAq8ALH9Bjd1CgXcBlr+jxh6jwGhlIs8ydhnQWDwUmAhgmRw1lgoFpgNYulFjWVFgToBlIdRYURRYEmDpATBVAUxd1KkGKLAxwPIl1FhLFNgGYNkBNdYZBXYHWPZBjfVHgYMBlq+ixkaiwLEAyzdRY2+hwCkAyzmosfko8D2A5XIAsw7AbEWd2o4CPwVY7kaN7UOBXwEsv0WNHUWBJwCWP6DGzqHAiwDLn1Fj11HgLYDlb6ixByjwMcAyblnQWAIUmKRs5FmmBjCZAEwu1Km8KLAgwLIIaqw4CnwOYOlBjVVEgVUBls+jxuqgwAYAyxdRY81QYEuAZVvUWHsU2Blg2Q81NhAFDgFYjgIwbwCYqahT01HguwDLeaixhShwCcByOWpsFQpcB7DchBr7CAVuB1h+hhr7AgXuA1h+jRr7BgUeBVgeQ42dQIEnAZY/ocYuo8CfAZa/AJhfAczvqFOPUKCrXORZRi0HGouOAmMCLJOgxpKhwBQAyzQAJgOAyY46lRMF5gZY5kWN5UeBBQGWpVBjpVFgWYBlBQBTBcDURp2qiwLrAyxfQI01QoEvAizboMbCUWB7gGVnANMdwPRHnRqIAgcDLIegxoahwOEAyzdRYxNQ4ESA5VQAMwPAzEOdWoACFwEsF6PG3keBywCWy1FjK1HgaoDlWtTYehS4EWC5CTW2BQVuBVhuQ43tQIE7AZb7UWNfocCDAMvDAOYYgDmDOnUOBZ4HWF5EjV1CgVcAlldRY9dR4A2A5S3U2G0UeBdgeQ819gAFPgRYPkaNRfGAwGieyLNMiBpLjAKTAixTApi0ACYL6lQ2FJgDYJkLNZYHBeYDWBZAjYWhwEIAyyKosWIosATAshRqrDQKLAuw9KDGKqDASgDLOqixeiiwAcCyMYBpBmDaoE6Fo8D2AMuOqLHOKLArwLI7aqwnCuwNsOyLGuuPAgcCLAejxoagwGEAy+GosZEocDTAciJqbDIKnAqwnAFgZgGYRahTi1Hg+wDLZaix5ShwJcByNWpsLQpcD7DciBrbhAK3ACy3osa2ocAdAMudqLHPUOAugOVB1Ng3KPAwwPIYgDkJYM6jTl1EgZcAlldQY1dR4HWA5Q3U2C0UeBtgeRc1dg8FPgBYPkSNPUaBUcpHnmW08qCxGCgwFsAyKWosOQpMCbBMC2AyApgcqFO5UGAegGU+1FgBFBgGsCyEGiuCAosBLEugxkqhwNIAy7KoMQ8KrACwrIQaq4ICqwEsG6DGGqLAxgDLZgCmJYBpjzrVEQV2Blh2RY11R4E9AZa9UWN9UWB/gOVA1NhgFDgEYDkMNTYcBY4EWI5GjY1Fga8DLKeixqahwBkAy1kAZh6AeR91ahkKXA6wXIkaW40C1wIs16PGNqLATQDLLaixrShwG8ByB2psJwr8DGC5CzW2GwXuBVgeRo0dRYHHAJYnAcwZAHMJdeoKCrwKsLyOGruBAm8BLG+jxu6iwHsAyweosYco8DHAMkoF0Fg0FBijQuRZxkKNxUGB8QCWKVFjqVFgWoBlRgCTBcDkQZ3KhwILACzDUGOFUGARgGUx1FgJFFgKYFkaNVYWBXoAlhVQY5VQYBWAZTXUWA0U+DzAsjFqrAkKbAawbAlg2gCYzqhTXVFgd4BlT9RYbxTYF2DZHzU2EAUOBlgOQY0NQ4HDAZYjUWOjUeBYgOXrqLE3UOB4gOUM1NhMFDgLYDkPwCwCMMtRp1aiwNUAy7WosfUocCPAchNqbAsK3Aqw3IYa24ECdwIsP0ON7UKBuwGWe1FjX6LAAwDLY6ixEyjwJMDyDIA5D2Cuok5dR4E3AJa3UGO3UeBdgOU91NgDFPgQYPkYNRalIgiMVjHyLGOgxmKhwDgAy3iosQQoMBHAMi1qLD0KzAiwzAJgcgCYAqhTYSiwEMCyCGqsGAosAbAshRorjQLLAiw9qLEKKLASwLIKaqwaCqwBsHweNVYbBdYFWDZDjTVHgS0Blm0ATHsA0x11qicK7A2w7Isa648CBwIsB6PGhqDAYQDL4aixkShwNMByLGrsdRT4BsByPGrsLRQ4CWA5DcDMQAnORIGzAJZzEGNRrDeNjnjzxj/xrjQR/5bv1avVQHfHbm3DB7i79+3j7t7O3bp7325tezuBO1DgXhR4EAV+hwJ/QIEXUWD8KH8CoflM7DjAv0kiJzZ5FJB1uqcwmgk1mvspjP7+tGF2RQVZx4uKs06EGk37FEYzokZzP4XR/KjREk9htDRqtOpTGK2JGm30FEabokbDn8JoR9Rov6cwOuQpsMNRwq+hwOlPwfZd1OgCFLjmKdhuQI1uRYFfRJZtnIg3PYoA2v/3HsM+cHRreCL+H/Z0PybOn9xkj12iRMk4Ecdj8Y7BOXZYLOsYFWP/51he/l5bCawRLeJ373vsf9I5uMR1xDS64/3eObS5x6PEvEgR+9jxGccOKxT2h+8RPsd1xCN6xGvxHK/FiHjNy8X+776ofx+j6AGLUTEVMbL/Piri787cGx3xWkzHa2MiXovleG2sIze9r70W+8/Y2j/JrFEp4rXKTl6uv/5E8fl/dMfvUR24mD7vi+PgJBxn8yROXptxHZykzz9RHHa89mP6xMT2P7bDflQ5+2FxXH/Oo3QOR3Ec2+tbHJ/YJnD9md/OOfbmd4wIXFxHLLyx8b7Hqe8Yjv/ni/g3sQPvjKPvuSOu49j2jz0PORx2OTkY9ofWnXHy2ovLsVfySTkf1/EvJy/+k/O+sXfOq/1jxySeDyff820UOU5hiR32nDbi+fCM54dnAtdff2yeCSmxe/L5KqEjXgko9v8zdwl97CfwiYntfyKO/3+cUxL52E/k47/NJ7HPazYuScTv3nOK9z2JHPy970niwMVw/L9SxL+JHXjnOcX7msvHhvOcUtZxDGcd9x7jn3LOiYsZCZwzL+0fT8S/YU/54+STEPRDCy6W4zVvfxPH8S+nHzTF/dWIf9NPsc/jCXzs+zuPJwB5M89hMX3sJ/DDOybIm9kr+tZNf70iqW8wzpoc2ZhQ1mARMfGtB/5qdCIXxptTx/7D27dWJPLDO7EL452YyDuJj33fGhfH9df6Kbhe+SMHk7qwmCQlxiSZj/2kPvYT+LwnMryTEXkn97GfzA/v5C6Md3Ii7xQ+9pP74Z3Ch6edlykpnEyJJ8UkpSMmKSj2/xOTlD72U/jExPY/Fcf/4lEcx/baT+Xjvz0nqX1es3HeXXBvX+59TyoHf+970jhwMRz/fy3i38QOvLPH877m8rHh7MtHON7vG0vfc5w/f5P7eY+v3Zh+3pPG5z2J/Lwnrc97kvl5Tzqf9yTw8570Pu+J5+c9GXzek9TPezL6vCeOn/dk8nmPbz7a/Nyuv/7Yx8nsOEagNOq1GdfBiaHRzD723T4xsdcP3vVk+/A+tbv3Ce8dxcHHi3fq2Puvr3/e9zh7iGiO353r1pQ+WN/89r6W2s9rafy8ltbPa+n8vJbez2sZ/LyW0fW/P85e2LmH6uxPnOsxbz76i4vTVlTX/8bT+7rz/5J/dxGPLf1372vR/+Z332uMT8pN+1znPS+4HTjf+u577kjseL+zpvqu69w+OH9rVi8mlh9O3vdGc/zuW8Ojuf56HcXlwHjf67sm9MfD7Yer7/65FxPXwdV77DgODtF9fLLfs9hx3EyOY0b38377WBkd77eHJ+L/YU/388c11ww+8RA6dlH72Ok5xy5kHzsd59jF7WOn5Rz7j+uUaTjHLhzDkUtRo/yZa6siXrPz01sznNfZfXsn337MXw/mxTh16j2m9728HjeshJOT73WpVI7Xve/5MOJf3/Xq3/nnLwa+cXKuJbwxiOXDIZHL/zW1f7reldj112ue9g9vzfSfeDrjZh/bq11nnL3v+STi37+L59PklNeuM3YpHa+l94mLv146vY8953VH798CnZ9e3fvLz30R/zLy02vXGbtUjhgEMqe851V/OXXoH2LwNDmV1hGDND4cAp0H3nrrLw+O/UMMniYPMjhikNaHA7EPKMaOb4p/EV/ve864nhzfFEB8U/iJb0rX/8aXtN/kV2fe3sgZG+97fvqHGPwbnfnGyYtJ54hBBh8OiRx/d9ZC372SdD72nLUwnZ9jxY3kseL6HCuG68/e5VbEv/5iY/fyGX34J/DDw7m3lt7xmjdGaRyveWOT1vGad+/KuVfn3WPK4HjNu3+Q0fFadB/fnPd+pXa85l2npHK85vXJud7y7kskd7zmvNfM/rH3rZzrGG8ORvc5nrM/jeHoT3s77iF05lp0P/4Q61WYM/e9tlP62HfqKEGUP3l4YxHN9VfNONcoyX2Onczxf++xk/sc++806pvn3jxL7XiPl3tMn/c4ffG+J8kT7BH36os/6dzlr0dI8Q9x8T13uSN+/zc9gvPc4m9v3PfY/s4/vjH3vsdfrU//DzHnXGv6T8yTO/g4Y5DM8br3Pe5/iLnvdSt3xO/OmPtek0vuExdnzXRqyfdc6Nzn8WKd9qO5/rf2Ovd5/m4O0/vx50lz6H1PnifExlkbXI7ju3w4eH+edJ2Plw9hxZ7EyWuTfQ3x7/LDGZOkPpwSO15zXl9K6nMs32smmnH2a96cctZkb1117jGWddQnX71735/B8br3PSui/nmM8hHHcPZz/now59rh3/Rgvsd6Gq34XhuJ42Ll6pPv+fTajOuirXf83ifgvDbr9Z9zrvjPPZ++Wk3m479Tq8558L3n01fP/+aez4YRE+DUhvPa2T9pys7pOo5j+J7b/eVT8J2zn5yHwXLOtv3n3Ofznzz8u7lO5piTJD6v2TjvtUZvHnrf48wV73uc927FcPy/nSOHvHhnHvrel5XEcWz7x87Dlx3H8O1l/MU3g88x/MXAi3Huyyf38Y+Wl+Y/n5/w7YV870ELlA68Ntn3m/nOte85x/57Csc82CS8GLczSJwbBf/6ATavYecH2Jw3zx+JYO0vcfwVH1/RO0/M/9SgDIryp++cE5Vp56/wZPLh5ywwUxzNz1BH8+P1ybmg971p1J9AfW+I9WKcF42SOH73xsv3hgjiBzmeKKJEDr7MG1n/Lk6+Ivqv2KL8iXE7g8S5U/2vInJOlFdEXrtOEf0bx6K4/vfuAy/Gm6DOJEng+NfLx3lm9/KRThL7sJei/mn7v1U0tqyviR3vSeJ4LZ3jd++xfKufPwH+3dnZeZUxsY+9BK7/vRuK2M08UYBem3FdtLspjL9Y+l5B9QrwvyemKH9i3M4gkUp9mL+EdwrQ2YY5q5iXsDN4//TRsMSO9yd22PJXxZY6ltleXk+qNN73DHRUmuWOSuN7a9zTJrq/y7/ORPe9ZTAYEp10i4zfRE/jE0tvov/3BKAh0f2tF3wde9J6wVlpvI47bXv5ZHL4H6hK89970mPL+upsVZ1i971Ol8jl/xqB797Bv937etKx0kTyWGl8juWvRfd3svC9H9yLSeuHUybHa773DURx/e/98Gn98PR3H4b39zSRPFaaJxxLE68ogryigLxiOF7L4Ier7+cPMjyBawY/x0oTyWOlecKxQrz+mRfxPp4SznOL7/V5p31SlxrmPG95baf3se+8x+Chn8bMe30+uQ/OWVO8x07q+L/32Ml8jv13125JMSjhjEEMH1/S+4lBlKh/z9NZ19M6uHPqelhJ37r+3zlz2POtS/5ql++9nr5NtrN5d9437/s5Kef1Gu97vHGI6fMeLzaG4z3xnxBb4j3kfnPAy895Xve+J/G/zAGnhgOVA/9dGD0hB/x9ls+3Hnsx3jgkdvmvvb7X/73vd+aANw4xfd7jvP7/3+uX/5ADzHOxbw741hVnDmT6lzmQ3ME9UDnwX209IQe873HmgG999PeZMn911fcznt73O3PA9x4Q3zXBX+4B+YccIF2D85sDXn7ODQfvewr8yxzI6OAeqBz4r7aekAO+17n9rXW8GG8cEjve41wj+dYC7/v93Usa0+c9zlrgfU/Jf8gB0meVnlgLnPf5ed9T5l/mgPO+5UDlgL91vm8O+Fvn+66T/dUC51x6cf+mFmRy4P6uFnjfU+0fciCT47jSOeCca6dWnLnhfc/z/zIH0ji4/1/WAt/59VcLfPPEd28mseM9zntk/00t8L7/SbXA+57G/5ADTtvsHEjj468zB5opqwW+OeCvFvh+v4Pvnprz+yiiOXDStaDd/2EtcM7139UC73s6KasFvvP7b2qBF+OvFqR0vObdB/Me0/dzCb7nF++egDNHMjqwzvc4z8He9/T/h9j7Yp2fGXfejuBc2/heAMrkh2NiH47e9zhvkfC+Z+g/5DHzeyUTOPhEd/3vLRIxHO8Z8QSezmN54+J7ZdPflWvfK9DOC4mJAhSD+D4xyOT63xh43/P6v9Ty/8WdAv+dS4e9+A5+zng/aU68mP/uazje47xfz3kvp/df3zx3Xrh13urkPDdL62mGEj3NiqSe/H0nkXY9LQya/ZL/ez0579H3/utPT4P+QU++12yfdKODr56cn0vyvmftP+iJc33+P5+f8r2HOJlPPJy63/gPevK9GcUd8fuTbu5I7BMXZ0+QxBED0i17RaO4/v62SmdsvO/5OHj2H4v56um/ueWw5xtvf9/x5jtvXowzDt73POkWWn915e904O9Got1PiK1Tv8774n2P5/y80B/fr8+J/R/n4diOZ2BEd9jyxj+q4z2xHTxiOP5/2NGbx/HeeB9xPG8uxXLcrRnT+5yM2H+Pi+6DS+x4T0wHLpYPLpaDtzeWX0b8J15EPGNy4lnoj7hEHDuajx8xHXemeuMW3fG8kDjEOY7rM8dx/Myx9z1xfebY+/+fHHMc24drbJ+Y26/H+5s8iOMnD+LF/mdcbAcuViRwcRz5E88np/6NPScu5hPyNY6fvDvuyDunv9H85K93jRrT5zgxHO+56rhJ8brjnBnD57j23x/6+bv3J8pf//vf9e0fv/8f52T0SOTkA0dO/pt8i/0v8ibGE/ImdiTn/2bEf+K6/lrPBGNpnHNt51mjiOPqfKZZkWLP0jPNnN9RUslRN7yvVfY5nvN5UlEd80zxKeLzY6FnTv013t4bkv/7fbFR/sS4va85v4DPSTaGz8Fj+Bw8seP9zuRx4rzHcvkcy+VzrDiuv36prSfi37Cn/HFu0DqTNZYr8hydXybkPFY04FjOh4EJ+msSO/jE9mNL+kTi3HD22rBzIgvdtvnLg8l8vzgotuN173vyO/jliPjd+cWrzhtavb87v6zJ+ckN72uxfbDOfHBifXl5m6w4Pnjagw7/ZiMruoOP93XvewpF/Pt3mw++G0f+vhTd96E88R2/u1x//aJG73ujOd7n/LJL53udmnN++bk/nPP3OD4Y5/khrh87/h5m5+XvO6fOfPS9kOOMr/c95SL+/btNKOYD/XzzIJ7Drvd173sqPoHnv80D3y9A9mK8dv9oeH04RHP83XmudL7XmQfxHXb94Zy/x/XBOM/tsZ9gx/lwKPvHE/Fv2NP8WM2Lk1NUh10nv2g+3JkPCfI3r/4uXDrP+c73OPPL+54XIv79pwuX8R3H9NaRrA6f9S0UShR5lhYKvhdivD/RXf4ffkzhHvHwY07zXeQvH7SL7ohHdMdGgfe1GI6NDm+MvDcXOBdJHudxXH/94c1xkScuZJy1kZW//tYaXlvePLHPCd4vsmof3qd83z4dGnfs0y28918eq+E9isfxmvdfXy9932P/RPPzmv3jXNU4Z9v7fu/fvFu2wb4FnsXhZzBugadxxNN76UHpFlFJXif3n69HJnUAfznze/k7u2/vWauST67bf6sS8VoVP3+rGvFaVcffokT8rVrEa9V8/uav0jjPkpUcr3m1WNnxmvfMW8Xxmrfbq+p4zZua1RzVzPk1UNWdLaTrP2clb66Gd+vZN7xveN2+rbt0bFOlb7c2fTp271axVZcuLp8f5x6Vs331d9r1fb9z2yK2n797f3xLr+9rzhOi93dbbFUjXlMqttYhsekWm/M6c3U/e8w1/OwxV/cpIM7vmfb+EOeu8JPap2B5Dnt815+xbWOdk+r26tivVZ9w72nKeSrwfZzIk3ooZ832/gTTKc3fY5WiuP738VK+OxaJXX/dyXGFjvV/eizeSu4/PbXvZRRf+fhbocTy46/vCvmfYhAlEjGI5rDpuxJzPrrM6Us0x3t9bUpyUzLXflea/uY6ts97Yvjx199uoVQ8nSXMud70nWNnqY7jeM13zu3Wronjffpau6JteDsgpiTz/OJs7XzzKJrjbxUdbVhU19+3fd6/eVuuyn7+5q8l9P7NX0vo/Zu/ltD7N2+bVd3P37xtWQ0/f6sZ8VpNP397PuK15/38rVbEa7X8/K12xGu1/fytTsRrdfz8rW7Ea3X9/K1exGv1/PytfsRr9f38rUHEaw38/O2FiNde8PO3hhGvNfTzt0YRrzXy87fGEa819vO3FyNee9HP35pEvNbEz9+aRrzW1Odvzqvywku1wkQ9lwjsrSCm5JOWAMFyK4hzx9q5pPrvvp3jtRg+5yv7v8Wdx4n43VnvKLvDJYq25s1bmPm7PCFdTSn0b3faA9n/PClP/u2VDWcv5MwT3z7E/nuFiN/t5ehLPvtpGvbOy7v+fD0Y985LRPz+32sRDr6sXPKuM7y2nFf3SNsehfz16c7HHts//vT9JA16j8fWoC9vf2sC73ti/R/F0t9axvcuDt+rdM5zx1/WI44tPu9rTzp3MK+W+/PD96q0vy013zlyrgH93RHhxfnup8V3vKdteOu+7Z/v3t7l8+PsubxcfT/C7j2mb544sc5c9/Z0qX1eix7xuq8u4rn+eleQwssB/1/edfF3a0b7fX93R4Y3xs67Dbw/dj7mjPi9W/c+HdsNbBDep1bHbvXD+4X36tOxdZfwBh3bhldu1y68TZ+K3ft26xPey+Xz40wdf5fQvfTiOagQv93qj6khPTE1zNlme/mncPgU1fF3KZvOuDrbt6iO1/zd9BtFnotxHPIPm76nDecndaP44US6ClOId+PsX+fc92ZV5zxE9+O78/eorv+9rOL83d9rCfzYSebntf8Hnybv/2q5QQA=","debug_symbols":"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ZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSTZhSTZhSTZhSTZhTzgiV10oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0Yxi0Yxi0Yxi0YxiXbCkLppRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRbJpRbJpRbJpRbJpR7AuW1E0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0z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6wX72w+9YH/7oRfs7odesLsfesHufijNKCrNKKrA7n4ozSgqzSgqzSgqzSiqwGZqFdhMrUKbqZU2UyttplbaTK2wux/68Ke03yyIltQ0o6g0o6g0o6g0o6i0p2wr7SnbSjOKarSZ+vFP2b5VEC2paUZRjXb3w2h3P4x298NpSe20pHba3Q+aUVSaUVTaU7aV9pRtpT1lW2lP2VbaU7Y1aHc/gnb3I2gzddDuftzHKN6zIFpS04yi0oyi0oyi0oyi0oyi0oyi0oyiJm2mvo9RvGdBj/7bj/Nd+eWj43zl6bcfHe+8cr75oKnrstfL338gX47G98tz3r7492ZzU7O1qdne1Owsavbh3vRDm5VNzeqmZm1Ts76pWdpfzxbtr2dpdlhpdlhpdlhpdlhpdlhpdlibdleynVYQLalpzzdV2vNNlfZ8U6U931RpzzdV2vNNlfZ8U6XZYaXZYR1aUg8tqYeW1ENL6oEltV2wpLYLltR2wZLaaM83tQuW1Eazw0azw0azw0azw0azw0azw0azw0azwya0pBZaUgstqYWW1LTnmxrt+aZGe76p0Z5varTnmxrt+aZGs8NGs8OmtKRWWlIrLamVltRKS2qaHTaaHTajJTXt+aZGe76pGS2pjZbUNDtsNDtsNDtsNDtsNDtsNDtsTktqpyU17fmmRnu+qdGeb2q055sa7fmmRnu+qdGeb2q055sazQ4bzQ5b0JI6aEkdtKQOWlIHLamTltRJS+qkJTXt+aZGe76pJS2pk5bUSUvqpCV10pKa9nxToz3f1IqW1EVL6qIlNc0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oOs0oOs0oOs0oOs0o+gVLaqcZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZxaAZxaAZxaAZxaAZxbhgSR00oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0o5g0o5g0o5g0o5g0o5gXLKmTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSLZhSLZhSLZhSLZhTrgiV10Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi04xi04xi04xi04xiX7CkbppRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRHJpRHJpRHJpRHJpRnAuW1EMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzigMzin7BjOIpiJXUpyBWUp+CWEl9CmIl9SmIldSnIFZSn4JYSX0KYiX1KYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqiJTXMKJ6CaEkNM4qnIFpSw4ziKYiW1DCjeAqCJbXQjKLQjKLQjKLQjKJcsKQWmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlEUmlFUmlFUmlFUmlFUmlHUC5bUSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKSjOKRjOKRjOKRjOKRjOKdsGS2mhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WhG0WlG0WlG0WlG0WlG0S9YUjvNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKDrNKAbNKAbNKAbNKAbNKMYFS+qgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWkGcWkGcWkGcWkGcW8YEmdNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKNYNKNYNKNYNKNYNKNYFyypi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUm2YUm2YUm2YUm2YU+4IlddOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOM4tCM4tCM4tCM4tCM4lywpB6aURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaURyaUZyHG0W98vp+scoVbwt67+KIeLn6iv5xuch71+foy+V5fpv88eLfm+1Nzc6iZh/uNj+0WdnUrG5q1jY165uajU3N5qZm0ROUnJuU/lpIXXKjWdXzTfDl1e265k/X/9Eweor6HQ2jJ6m7NxzXhZ6mfkfD6InqdzSMnqp+R8N3mazktaqyufHFu/L1i3f1jw6qvxfktIKCVlA+uqC+rh//oOvngopWUNMKGti/ofvY83sWJLSClFYQLamFltRCS2pJWkFFK4iW1DKwgvSiFSS0gh6d1Kr6OlVr5tuC3nnlyNcJX6Ikf57B1T57A/7ZG4jP3gDtk0ZpnzTatIKG/W+urV9eOq9459aBXZ+9AfnsDdzjky/j9W5VXbfuVnm9XKxx+Y2X1mp7ubrlTf393mtbxEu7Ft9e7+Vq03euHsmX154zIPz7v3wj7C5rCJ5n+cdZ+vMs73aW8TzLu51lPs/ybmdZz7O821n2Zx9EPvss6599lvXPPss6/C7O7Qbgd3FuN+CwG3setIJov7w67ZdXp93Pd9r9/KDdzw/a/fxQWkFGK4iW1EFL6qAlddCSOmhJHbSkTlpSJy2pk5bUSUvqpCV10pI6aUmdtKROWlInLamLltRFS+qiJXXRkrpoSV20pC5aUhctqYuW1EVL6qYlddOSumlJ3bSkblpSNy2pm5bUTUvqpiV105J6aEk9tKQeWlIPLamHltRDS+qhJfXQknpoST2wpJYLltRywZJaLlhSywVLarlgSS0XLKmFpu6Fpu6Fpu7loiW10JJaaEkttKQWWlILLamFltRCS2qhJTVN3QtN3QtN3QtN3YvSklppSa20pFZaUistqZWW1EpLaqUltdGS2mhJbbSkNlpSGy2pjZbURktqoyW10ZLaaEnttKR2WlI7LamdltQ0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oyg0oygPf+K72rwsM1V/+6yndx9Tkm8erlnXZa+X/xMPkjrN9qZmZ1GzdW1qVjY1q5uaZT1v+hTktIJYz5s+BbGeN30KKlpBTStoYAX1RStIaAUprSBaUjctqZuW1E1L6qYlddOSumlJPbSkHlpSDy2ph5bUQ0vqoSX10JJ6aEk9tKQeWFLrBUtqvWBJrRcsqfWCJbVesKTWC5bUesGSWi9YUusFS2q9aEkttKQWWlILLamFltRCS2qhJbXQklpoSS20pBZaUistqZWW1EpLaqUltdKSWmlJrbSkVlpSKy2plZbURktqoyW10ZLaaElttKQ2WlIbLamNltRGS2qjJbXTktppSe20pHZaUjstqZ2W1E5LaqcltdOS2mlJHbSkDlpSBy2pg5bUQUvqoCV10JI6aEkdtKQOWlInLamTltRJS+qkJXXSkjppSZ20pE5aUictqZOW1EVL6qIlddGSmmYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUjWYUjWYUjWYUjWYU7YIltdGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotOMotOMotOMotOMol+wpHaaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUQyaUQyaUQyaUQyaUYwLltRBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pJM4pJM4pJM4pJM4p5wZI6aUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUaxaEaxaEaxaEaxaEaxLlhSF80oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0oFs0o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0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0Yyi0Yyi0Yyi0YyiXbCkNppRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRdJpRdJpRdJpRdJpR9AuW1E4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zikEzikEzikEzikEzinHBkjpoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFpRjFpRjFpRjFpRjEvWFInzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgWzSgWzSgWzSgWzSjWBUvqohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFphnFphnFphnFphnFvmBJ3TSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSjODSjODSjODSjODSjOBcsqYdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFAdmFPuCGcVTECupT0GspD4FsZL6FMRK6lMQK6lPQaykPgWxkvoUxErqUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RQES2qhGUWhGUWhGUWhGUW5YEktNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKOoNKOoNKOoNKOoNKOoFyyplWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUjWYUjWYUjWYUjWYU7YIltdGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotOMotOMotOMotOMol+wpHaaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUQyaUQyaUQyaUQyaUYwLltRBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pJM4pJM4pJM4pJM4p5wZI6aUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxH24U9crr+8UqV7wt6L2LI+Ll6iv6x+Ui711/2nm5PMf6x4t/b9Y2Neubmo1NzeamZmtTs72p2dnTbD3c4H5os7KpWfQEJXO+ar4Wct6ZG82qTr++ul3X/On6PxpGT1G/o2Hf1jB6mvodDaMnqt/RMHqq+h0N32WykteqyubGF+/K1y/e1T86qP5e0MAKuo89v2dB8uiC+rp+/IOunwtSWkFGK8hp/4aCVlDSCipaQbSkFlpSKy2pVWgFKa0gWlKr0woKWkFJK+jRSa2qr1O1Zr4t6J1Xjnyd8CVK8ucZXPuzNzCfvAG7PnsDtE8ao33SmNEKcva/ubZ+eem84p1bBxafvYH87A3c45Mv4/Vu1blnf6MBr5eLNS6/8dJabS9Xt7ypv997bYt4adfi2+u9XG36ztUj+fLacwaEf/+Xb4TdZQ3B8yz/OMt5nuW9zvIuyx+eZ/nHWcrzLO92lvo8y7udpX3yQeQ+20U+soHPPsv6Z59lHX4X53YD8Ls4txsY2I29uGgF0X55Ddovr0G7n3+fbSr3LIh2Pz9o9/OjaAU1rSBaUictqZOW1ElL6qQlddKSOmlJnbSkTlpSJy2pk5bURUvqoiV10ZK6aEldtKQuWlIXLamLltRFS+qiJXXTkrppSd20pG5aUjctqZuW1E1L6qYlddOSumlJPbSkHlpSDy2ph5bUQ0vqoSX10JJ6aEk9tKQeWFL3BUvqvmBJ3RcsqfuCJXVfsKTuC5bUfcGSui9YUvcFS+q+aEkttKSmqfumqfumqfsWWlILLamFltRCS2qhJbXQklppSa20pFZaUtPUfdPUfdPUfdPUfSstqZWW1EpLaqMltdGS2mhJbbSkNlpSGy2pjZbURktqoyW10ZLaaUnttKR2WlI7LamdltROS2qnJbXTktppSU0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0ziv3wJ76rzcsyU/W3z3p69zEl+ebhmnVd9nr5P/MgqX740+Q/tFnf1GxsajY3NVubmoU9b7oL9rzpbtjzprthz5vuVlpBRivIaQUFraCkFVS0gmhJ3bSkHlpSDy2ph5bUQ0vqoSX10JJ6aEk9tKQeWlIPLKnngiX1XLCknguW1HPBknouWFLPBUvquWBJPRcsqeeCJfVctKQWWlILLamFltRCS2qhJbXQklpoSS20pBZaUgstqZWW1EpLaqUltdKSWmlJrbSkVlpSKy2plZbUSktqoyW10ZLaaElttKQ2WlIbLamNltRGS2qjJbXRktppSe20pHZaUjstqZ2W1E5LaqcltdOS2mlJ7bSkDlpSBy2pg5bUQUvqoCV10JI6aEkdtKQOWlIHLamTltRJS+qkJXXSkjppSZ20pE5aUictqZOW1ElL6qIlddGSumhJXbSkLlpSFy2pi5bURUtqmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmFGcC2YUT0GspD4FsZL6FMRK6lMQK6lPQaykPgWxkvoUxErqUxArqU9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTEC2pYUbxFERLaphRPAXRkhpmFE9BtKSGGcVTECyphWYUhWYUhWYUhWYU5YIltdCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotCMotKMotKMotKMotKMol6wpFaaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUVSaUTSaUTSaUTSaUTSaUbQLltRGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pGM4pOM4pOM4pOM4pOM4p+wZLaaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUbRaUYxaEYxaEYxaEYxaEYxLlhSB80oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oBs0oJs0oJs0oJs0oJs0o5gVL6qQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaQZxaIZxaIZxaIZxaIZxbpgSV00o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o1g0o9g0o9g0o9g0o9g0o9gXLKmbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSbZhSHZhSHZhSHZhSHZhTngiX10Izi0Izi0Izi0Izi0Izi0Izi0Izi0Izi0Izi0Izi0Izi0Izi0IziPNwo6pXX94tVrnhb0HsXR8TL1Vf0j8tF3rs+R18uz7H+8eLfm51FzT7cVn5os7KpWd3UrG1qFvSJ/s7FUa+vHPPjlU2/f5iQ5Os/Uz5oWvhnyi/yfyky2f5aSF1y478U1enXV7frmj9d/0fD6NnldzSMnl9+Q8OGnmF+R8PoOUa+LQx7/bS7JN5p4GvNJm2vH9cd+h8/ru1rzSY3mvVNzcamZnNTs+gp6R9vtvP1+8T10/cJ+1p3d240+7Xu7vy6Wf9ad3duNPu17u7caPaLTVC/bvaLTVC/btY3NfvFJqhfN/vFJqhfN7tpgvJNE5RvmqBi0wQVmyao2DRBxaYJ6uHbTj602U0TVGyaoGLTBBWbJqjYNEHlpgkqN01QuWmCyk0T1MO3EH1os5smqNw0QeWmCSo3TVC5aYKqTRNUbZqgatMEVZsmqIdvB/vQZjdNULVpgqpNE1RtmqBq0wTVmyao3jRB9aYJqjdNUA/f2vehzW6aoHrTBNWbJqjeNEH1pglqNk1Qs2mCmk0T1GyaoB6+TfNDm900Qc2mCWo2TVCzaYKaPROUXNe1Z4T61u2eGepbt3uGqG/d7pmivnXrq7rdM0d963bPIPWt2z2T1Ldu94xS37pdNUvJqllKVs1SsmqWklWz1MOXUX9st6tmKVk1S8mqWeqLLQC/1e2qWeqLrQC/1e2qWeqLLQG/1e2qWerha8A/tttVs5SumqXYO8nv3u2qWYq9jfze3bJXkd+921Wz1FdbWn6j21Wz1FdbW36j21Wz1FdbXH6j21Wz1KLV5d+6XTVLLVpe/q3bVbPUovXl37pdNUstWmD+rdtVs9SiFebful01Sy1aYv6t21Wz1KI15t+6XTVLLVpk/q3bVbPUolXm37pdNUstWmb+rdtVs9Sidebful01Sy1aaP6t21Wz1KKV5t+6XTVLLVpq/q3bVbPUorXm37pdNUstWmz+rdtVs9Si1ebful01Sy1abv6t21Wz1KL15t+6XTVLLVpw/q3bVbPUohXn37pdNUstWnL+rdtVs9SiNefful01Sy1adP6t21Wz1KJV59+6XTVLLVp2/q3bVbPUonXn37pdNUstWnj+rdtVs9Silefful01Sy1aev6t21Wz1KK159+63TRLyaq957Jq77ms2nsuq/aey+Wrut00S8mqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rtp7rqv2nuuqvee6au+5Xr6q202zlK7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rF9t7Phqv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FecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgFecgDecgDecgDecgDecg7aJltuEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOEcpOMcpOMcpOMcpOMcpF+0zHacg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scgwycgwycgwycgwycg4yLltmBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CJc5CJc5CJc5CJc5B50TI7cQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ6ycA6ycA6ycA6ycA6yLlpmF85BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BNs5BNs5BNs5BNs5B9kXL7MY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5yMY5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TJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDTJyDLJyDLJyDLJyDLJyDrIuW2YVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkIVzkI1zkI1zkI1zkI1zkH3RMrtxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDrJxDnJwDnJwDnJwDnJwDnIuWmYPzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzkEOzUHaRXOQpyJYZp+KYJl9KoJl9qkIltmnIlhmn4pgmX0qgmX2qQiW2aciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpCJfZNAd5KsJlNs1BnopwmU1zkKciXGbTHOSpiJbZgnOQgnOQgnOQgnOQctEyW3AOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnEOUnEOUnEOUnEOUi9aZivOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQRrOQRrOQRrOQRrOQdpFy2zDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjDOUjHOUjHOUjHOUjHOUi/aJntOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAfpOAcZOAcZOAcZOAcZOAcZFy2zA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgA+cgE+cgE+cgE+cgE+cg86JlduIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZOIcZD7cQeqV1/eLVa54W9F7F0fEy9XXubH8ernIe9fn6MvlOdY/XvylW1/VbazqNld1W6u67VXdgj7b37k46vWVz83+H3Xoy2cKSdf+U/WD5oZ/qn4l/9cik+2vhdQlN/5rUZ1+fXW7rvnT9d87Rk8xv6VjX9cxepr5LR2jJxo5Dfz41Lsk3uvga00pba+f2x360+e2fa0p5Va3s6nbh+vzj+1WVnWLnpf+8W47X79dXD9/u/CvdcfnVre+qtuvdcfnVrdf647PrW6/2Cx1o9svNkvd6PaLzVK/7ja+2Cx1o9svNkvd6HbVLBWrZqmHb+H42G5XzVKxapaKVbNUrJqlYtUslatmqVw1S+WqWSpXzVIP347zsd2umqVy1SyVq2apXDVL5apZqlbNUrVqlqpVs1StmqUevrXqY7tdNUvVqlmqVs1StWqWqlWzVK+apXrVLNWrZqleNUs9fJvcx3a7apbqVbNUr5qletUs1atmqVk1S82qWWpWzVKzapZ6+JbHj+121Sw1q2apWTVLzapZajbNUnVtmqXq2jRL1bVplqpr0yxVl6/qdtMsVdemWaquTbNUXZtmqbpWzVKyapaSVbOUrJqlZNUs9fCtyB/b7apZSlbNUrJqlpJVs5SsmqV01Sylq2YpXTVLfbGN4re69VXdrpqlvthG8VvdrpqlvthG8VvdrpqlbNUsZatmKfZu87t3u2qWYu80v3u3q2Yp9i7zu3e7apb6anvPb3S7apb6anvPb3S7apZatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu09r1V7z2vV3vNatfe8Vu0971V7z3vV3vNetfe8V+0978tXdbtplupVe8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zXrX3vFftPe9Ve8971d7zWbX3fFbtPZ9Ve89n1d7zuXxVt5tmqVm193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193xW7T2fVXvPZ9Xe81m193z+/+3d7W4kSXbe8VvK837O1RiSYBgLLHYNaW3AH/beHd3TLHaL3OawJiv452R/ETTYyoonqiseBpP5y7zUfc/nUvc9n0vd93wudd/zudR9z+dS9z2fS933fC513/O51H3P51L3PZ/99z230af8bv3z2Uq09dNb5xHzw2y/zUA//QwMPYM8nt86Rf21Gfinn0F8+hnkp59BsWewfhV7eus6Dnuzee2pqLNDXzZvX2q2c6XZ7r/f94fOlr2HOHu27P3Gu2f78/3hwPcmJ8/W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HKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKThHKTjHKTjHKTjHKTjHKQftM52nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIN0nIMMnIMMnIMMnIMMnIOMg9bZgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQgXOQiXOQiXOQiXOQiXOQedA6O3EOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOMnEOsnAOsnAOsnAOsnAOsg5aZxfOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQRbOQTbOQTbOQTbOQTbOQfZB6+zGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjGOcjBOcjBOcjBOcjBOcg5aJ09OAc5OAc5OAc5OAc5OAc5OAc5OAc5OAc5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g3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scg3Scgwycgwycgwycgwycg4yD1tmBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CBc5CJc5CJc5CJc5CJc5B50Do7cQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ4ycQ6ycA6ycA6ycA6ycA6yDlpnF85BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5BFs5B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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000004c141a0"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaKAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaKAccount::constructor_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_abi"}]}},"file_map":{"102":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/history/public_storage.nr","source":"use dep::protocol_types::{\n constants::GENERATOR_INDEX__PUBLIC_LEAF_INDEX, hash::poseidon2_hash_with_separator,\n address::AztecAddress, header::Header, utils::field::full_field_less_than\n};\nuse dep::protocol_types::merkle_tree::root::root_from_sibling_path;\n\nuse crate::{oracle::get_public_data_witness::get_public_data_witness};\n\ntrait PublicStorageHistoricalRead {\n fn public_storage_historical_read(header: Header, storage_slot: Field, contract_address: AztecAddress) -> Field;\n}\n\nimpl PublicStorageHistoricalRead for Header {\n fn public_storage_historical_read(self, storage_slot: Field, contract_address: AztecAddress) -> Field {\n // 1) Compute the leaf index by siloing the storage slot with the contract address\n let public_data_tree_index = poseidon2_hash_with_separator(\n [contract_address.to_field(), storage_slot],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n );\n\n // 2) Get the membership witness for the tree index.\n let witness = unsafe {\n get_public_data_witness(\n self.global_variables.block_number as u32,\n public_data_tree_index\n )\n };\n\n // 3) The witness is made up of two parts: the preimage of the leaf and the proof that it exists in the tree.\n // We first prove that the witness is indeed valid for the public data tree, i.e. that the preimage is of a\n // value present in the tree. Note that `hash` returns not just the hash of the value but also the metadata\n // (slot, next index and next slot).\n assert(\n self.state.partial.public_data_tree.root\n == root_from_sibling_path(witness.leaf_preimage.hash(), witness.index, witness.path), \"Proving public value inclusion failed\"\n );\n\n // 4) Now that we know the preimage is valid, we determine the value that's represented by this tree entry. Here\n // we have two scenarios:\n // 1. The tree entry is initialized, and the value is the same as the one in the witness\n // 2. The entry was never initialized, and the value is default zero (the default)\n // The code below is based on the same checks in `validate_public_data_reads` in `base_rollup_inputs`.\n let preimage = witness.leaf_preimage;\n\n let is_less_than_slot = full_field_less_than(preimage.slot, public_data_tree_index);\n let is_next_greater_than = full_field_less_than(public_data_tree_index, preimage.next_slot);\n let is_max = ((preimage.next_index == 0) & (preimage.next_slot == 0));\n let is_in_range = is_less_than_slot & (is_next_greater_than | is_max);\n\n let value = if is_in_range {\n 0\n } else {\n assert_eq(preimage.slot, public_data_tree_index, \"Public data tree index doesn't match witness\");\n preimage.value\n };\n\n value\n }\n}\n"},"110":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\nuse crate::oracle::{execution::{get_chain_id, get_version, get_contract_address, get_block_number}, storage::storage_read};\n\nstruct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n fn block_number(self) -> u32 {\n self.block_number\n }\n\n fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n fn version(self) -> Field {\n self.version\n }\n\n fn chain_id(self) -> Field {\n self.chain_id\n }\n\n unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n unconstrained fn storage_read<T, let N: u32>(\n self,\n storage_slot: Field\n ) -> T where T: Deserialize<N> {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"},"116":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n let call_request = PublicCallRequest { item, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n self.public_teardown_call_request = PublicCallRequest {\n item,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let NB: u32, let MB: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<NB, MB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> [u8; M] where Note: NoteInterface<N, NB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n\n let log: [u8; 448] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n for i in 0..encrypted_note_log_from_typescript.len() {\n assert_eq(log[i], encrypted_note_log_from_typescript[i]);\n }\n assert_eq(encrypted_note_log_from_typescript.len(), log.len());\n }\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::{get_current_public_keys, get_ovsk_app}, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{hash::sha256_to_field, address::AztecAddress, abis::note_hash::NoteHash};\n\nfn compute_raw_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n // TODO(#8589): use typesystem to skip this check when not needed\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n let log_hash = sha256_to_field(encrypted_log);\n\n (note_hash_counter, encrypted_log, log_hash)\n}\n\nunconstrained fn compute_raw_note_log_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let ovsk_app = get_ovsk_app(ovpk.hash());\n compute_raw_note_log(context, note, ovsk_app, ovpk, ivpk, recipient)\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, iv);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Note: We could save a lot of gates by obtaining the following keys in an unconstrained context but this\n // function is currently not used anywhere so we are not optimizing it.\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n\n // See the comment in `encode_and_encrypt_note_with_keys_unconstrained` for why having note hash counter\n // and log hash unconstrained here is fine.\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, iv)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, recipient);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Having the log hash be unconstrained here is fine because the way this works is we send the log hash\n // to the kernel, and it gets included as part of its public inputs. Then we send the tx to the sequencer,\n // which includes the kernel proof and the log preimages. The sequencer computes the hashes of the logs\n // and checks that they are the ones in the public inputs of the kernel, and drops the tx otherwise (proposing\n // the block on L1 would later fail if it didn't because of txs effects hash mismatch).\n // So if we don't constrain the log hash, then a malicious sender can compute the correct log, submit a bad\n // log hash to the kernel, and then submit the bad log preimage to the sequencer. All checks will pass, but\n // the submitted log will not be the one that was computed by the app.\n // In the unconstrained case, we don't care about the log at all because we don't do anything with it,\n // and because it's unconstrained: it could be anything. So if a sender chooses to broadcast the tx with a log\n // that is different from the one that was used in the circuit, then they'll be able to, but they were already\n // able to change the log before anyway, so the end result is the same. It's important here that we do not\n // return the log from this function to the app, otherwise it could try to do stuff with it and then that might\n // be wrong.\n // Regarding the note hash counter, this is used for squashing. The kernel assumes that a given note can have\n // more than one log and removes all of the matching ones, so all a malicious sender could do is either: cause\n // for the log to be deleted when it shouldn't have (which is fine - they can already make the content be\n // whatever), or cause for the log to not be deleted when it should have (which is also fine - it'll be a log\n // for a note that doesn't exist).\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, recipient)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n"},"126":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\nstruct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{address::AztecAddress, scalar::Scalar};\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n #[test]\n fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n for i in 0..outgoing_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], outgoing_body_ciphertext_from_typescript[i]);\n }\n assert_eq(outgoing_body_ciphertext_from_typescript.len(), ciphertext.len());\n }\n}\n"},"127":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\nstruct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nfn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"128":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\nstruct EncryptedLogIncomingBody<let M: u32> {\n plaintext: [u8; M]\n}\n\nimpl<let M: u32> EncryptedLogIncomingBody<M> {\n pub fn from_note<T, let N: u32>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N, M> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T, let MR: u32>(\n event: T,\n randomness: Field\n ) -> Self where T: EventInterface<M, MR> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::NoteInterface},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: Field = 3;\n global ADDRESS_NOTE_BYTES_LEN = 32 * 3 + 64;\n\n impl NoteInterface<ADDRESS_NOTE_LEN, ADDRESS_NOTE_BYTES_LEN> for AddressNote {\n fn compute_note_hiding_point(_self: Self) -> Point {\n crate::generators::Ga1\n }\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn compute_nullifier(\n _self: Self,\n _context: &mut PrivateContext,\n _note_hash_for_nullify: Field\n ) -> Field {\n 1\n }\n\n fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] {\n [self.address.to_field(), self.owner.to_field(), self.randomness]\n }\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote {\n address: AztecAddress::from_field(fields[0]),\n owner: AztecAddress::from_field(fields[1]),\n randomness: fields[2],\n header: NoteHeader::empty()\n }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_BYTES_LEN] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_BYTES_LEN] = [0; ADDRESS_NOTE_BYTES_LEN];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: Field = 3;\n global TEST_EVENT_BYTES_LEN = 32 * 3 + 64;\n global TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS = 32 * 3 + 32;\n\n impl EventInterface<TEST_EVENT_BYTES_LEN, TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime\n {\n EventSelector::from_signature(\"TestEvent(Field,Field,Field)\")\n }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_BYTES_LEN] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN] = [0; TEST_EVENT_BYTES_LEN];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] = [0; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 201, 247, 40, 80, 60, 188, 158, 251, 242, 103, 197, 79, 165, 195, 10, 160, 255, 35, 167, 152, 25, 233, 77, 145, 214, 243, 210, 119, 0, 20, 29, 95, 15, 63, 33, 190, 184, 67, 254, 96, 128, 243, 220, 228, 201, 130, 86, 163, 52, 127, 111, 10, 212, 7, 160, 16, 87, 13, 39, 11, 5, 1, 164, 65, 8, 56, 82, 245, 13, 68, 176, 90, 100, 69, 243, 78, 117, 188, 221, 34, 178, 31, 155, 89, 143, 176, 129, 118, 36, 236, 64, 179, 52, 239, 184, 51, 51, 199, 221, 49, 81, 197, 17, 199, 192, 99, 49, 168, 157, 164, 190, 33, 240, 182, 214, 173, 7, 156, 102, 95, 65, 217, 225, 123, 42, 21, 124, 144\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::NoteInterface, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N, M> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N, M> {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32, let M: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N, M> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N, M> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32, let M: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N, M>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N, M> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"134":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{context::PrivateContext, note::{note_header::NoteHeader, note_interface::NoteInterface}};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32, let M: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N, M> {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32, let M: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N, M> {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the \n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the \n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from \n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let M: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N, M> {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"135":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::NoteInterface,\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N, M>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, N, M>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, N, M>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, N, M>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N, M> {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"136":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\nstruct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting \n * a change note in a token's transfer function only when there is \"change\" left).\n */\nstruct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"144":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"145":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let instance = get_contract_instance_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"147":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"149":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"150":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{constants::PUBLIC_DATA_TREE_HEIGHT, data::PublicDataTreeLeafPreimage, utils::arr_copy_slice};\n\nglobal LEAF_PREIMAGE_LENGTH: u32 = 4;\nglobal PUBLIC_DATA_WITNESS: Field = 45;\n\nstruct PublicDataWitness {\n index: Field,\n leaf_preimage: PublicDataTreeLeafPreimage,\n path: [Field; PUBLIC_DATA_TREE_HEIGHT],\n}\n\n#[oracle(getPublicDataTreeWitness)]\nunconstrained fn get_public_data_witness_oracle(\n _block_number: u32,\n _public_data_tree_index: Field\n) -> [Field; PUBLIC_DATA_WITNESS] {}\n\nunconstrained pub fn get_public_data_witness(\n block_number: u32,\n public_data_tree_index: Field\n) -> PublicDataWitness {\n let fields = get_public_data_witness_oracle(block_number, public_data_tree_index);\n PublicDataWitness {\n index: fields[0],\n leaf_preimage: PublicDataTreeLeafPreimage { slot: fields[1], value: fields[2], next_index: fields[3] as u32, next_slot: fields[4] },\n path: arr_copy_slice(fields, [0; PUBLIC_DATA_TREE_HEIGHT], 1 + LEAF_PREIMAGE_LENGTH)\n }\n}\n"},"151":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"154":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\n#[oracle(storageRead)]\nunconstrained fn storage_read_oracle<let N: u32>(address: Field, storage_slot: Field, block_number: Field, length: Field) -> [Field; N] {}\n\nunconstrained pub fn raw_storage_read<let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> [Field; N] {\n storage_read_oracle(\n address.to_field(),\n storage_slot,\n block_number as Field,\n N as Field\n )\n}\n\nunconstrained pub fn storage_read<T, let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> T where T: Deserialize<N> {\n T::deserialize(raw_storage_read(address, storage_slot, block_number))\n}\n\nmod tests {\n use crate::oracle::storage::{raw_storage_read, storage_read};\n use dep::protocol_types::address::AztecAddress;\n\n use std::test::OracleMock;\n use crate::test::mocks::mock_struct::MockStruct;\n\n global address = AztecAddress::from_field(29);\n global slot = 7;\n global block_number = 17;\n\n #[test]\n fn test_raw_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: [Field; 2] = raw_storage_read(address, slot, block_number);\n assert_eq(read[0], 13);\n assert_eq(read[1], 42);\n }\n\n #[test]\n fn test_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: MockStruct = storage_read(address, slot, block_number);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n}\n"},"155":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"157":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"158":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"160":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let NB: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N, NB> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr","source":"use dep::protocol_types::{\n address::AztecAddress, contract_instance::ContractInstance, constants::CONTRACT_INSTANCE_LENGTH,\n utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// Returns a ContractInstance plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstance)]\nunconstrained fn get_contract_instance_oracle_avm(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {}\n\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\nunconstrained pub fn get_contract_instance_internal_avm(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {\n get_contract_instance_oracle_avm(address)\n}\n\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\npub fn get_contract_instance_avm(address: AztecAddress) -> Option<ContractInstance> {\n let mut reader = Reader::new(get_contract_instance_internal_avm(address));\n let found = reader.read();\n if found == 0 {\n Option::none()\n } else {\n Option::some(reader.read_struct(ContractInstance::deserialize))\n }\n}\n"},"162":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"164":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/execution.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n#[oracle(getContractAddress)]\nunconstrained fn get_contract_address_oracle() -> AztecAddress {}\n\n#[oracle(getBlockNumber)]\nunconstrained fn get_block_number_oracle() -> u32 {}\n\n#[oracle(getChainId)]\nunconstrained fn get_chain_id_oracle() -> Field {}\n\n#[oracle(getVersion)]\nunconstrained fn get_version_oracle() -> Field {}\n\nunconstrained pub fn get_contract_address() -> AztecAddress {\n get_contract_address_oracle()\n}\n\nunconstrained pub fn get_block_number() -> u32 {\n get_block_number_oracle()\n}\n\nunconstrained pub fn get_chain_id() -> Field {\n get_chain_id_oracle()\n}\n\nunconstrained pub fn get_version() -> Field {\n get_version_oracle()\n}\n"},"167":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{storage::map::derive_storage_slot_in_map, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V, Context> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T, Context> Storage<T> for Map<K, T, Context> {}\n\nimpl<K, V, Context> Map<K, V, Context> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n\n"},"169":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\nuse dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:public_mutable_struct\nstruct PublicMutable<T, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_mutable_struct\n\nimpl<T, Context> Storage<T> for PublicMutable<T, Context> {}\n\nimpl<T, Context> PublicMutable<T, Context> {\n // docs:start:public_mutable_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicMutable { context, storage_slot }\n }\n // docs:end:public_mutable_struct_new\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, &mut PublicContext> where T: Serialize<T_SERIALIZED_LEN> + Deserialize<T_SERIALIZED_LEN> {\n // docs:start:public_mutable_struct_read\n pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write(self, value: T) {\n self.context.storage_write(self.storage_slot, value);\n }\n // docs:end:public_mutable_struct_write\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, UnconstrainedContext> where T: Deserialize<T_SERIALIZED_LEN> {\n unconstrained pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n}\n"},"185":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes}, note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions, note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\nstruct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<N, M>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"189":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_positive_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_positive_sign[i]);\n }\n }\n\n #[test]\n fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_negative_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_negative_sign[i]);\n }\n }\n}\n"},"206":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{traits::{Empty, Serialize, Deserialize}, point::Point};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\nstruct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self { pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool }, sk_app: fields[3] }\n }\n}\n\n"},"24":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\nstruct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\nstruct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n// This is a hack as returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\nfn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint\n) -> EmbeddedCurvePoint\n// docs:end:embedded_curve_add\n{\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n EmbeddedCurvePoint { x, y, is_infinite: point_array[2] == 1 }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n"},"25":{"path":"std/field/bn254.nr","source":"use crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\nglobal TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n\n let mut low: Field = 0;\n let mut high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n low += (x_bytes[i] as Field) * offset;\n high += (x_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n\n (low, high)\n}\n\nunconstrained pub(crate) fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nfn compute_lt(x: Field, y: Field, num_bytes: u32) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i];\n let y_byte = y_bytes[num_bytes - 1 - i];\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nfn compute_lte(x: Field, y: Field, num_bytes: u32) -> bool {\n if x == y {\n true\n } else {\n compute_lt(x, y, num_bytes)\n }\n}\n\nunconstrained fn lt_32_hint(x: Field, y: Field) -> bool {\n compute_lt(x, y, 32)\n}\n\nunconstrained fn lte_16_hint(x: Field, y: Field) -> bool {\n compute_lte(x, y, 16)\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n unsafe {\n let borrow = lte_16_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size(128);\n rhi.assert_max_bit_size(128);\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size(128);\n xhi.assert_max_bit_size(128);\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(compute_lt(b, a, 32));\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n compute_lt(b, a, 32)\n } else if a == b {\n false\n } else {\n // Take a hint of the comparison and verify it\n unsafe {\n if lt_32_hint(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{decompose, compute_lt, assert_gt, gt, TWO_POW_128, compute_lte, PLO, PHI};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n fn check_compute_lt() {\n assert(compute_lt(0, 1, 16));\n assert(compute_lt(0, 0x100, 16));\n assert(compute_lt(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lt(0, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_compute_lte() {\n assert(compute_lte(0, 1, 16));\n assert(compute_lte(0, 0x100, 16));\n assert(compute_lte(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lte(0, TWO_POW_128, 16));\n\n assert(compute_lte(0, 0, 16));\n assert(compute_lte(0x100, 0x100, 16));\n assert(compute_lte(TWO_POW_128 - 1, TWO_POW_128 - 1, 16));\n assert(compute_lte(TWO_POW_128, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"},"252":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr","source":"use crate::{merkle_tree::leaf_preimage::IndexedTreeLeafPreimage, traits::{Empty, Hash}};\n\nstruct PublicDataTreeLeafPreimage {\n slot : Field,\n value: Field,\n next_slot :Field,\n next_index : u32,\n}\n\nimpl Empty for PublicDataTreeLeafPreimage {\n fn empty() -> Self {\n Self { slot: 0, value: 0, next_slot: 0, next_index: 0 }\n }\n}\n\nimpl Hash for PublicDataTreeLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash([self.slot, self.value, (self.next_index as Field), self.next_slot])\n }\n }\n}\n\nimpl IndexedTreeLeafPreimage for PublicDataTreeLeafPreimage {\n fn get_key(self) -> Field {\n self.slot\n }\n\n fn get_next_key(self) -> Field {\n self.next_slot\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl PublicDataTreeLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.slot == 0) & (self.value == 0) & (self.next_slot == 0) & (self.next_index == 0)\n }\n}\n"},"259":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr","source":"use crate::{hash::pedersen_hash, traits::ToField};\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f);\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript = 0x2499880e2b1b831785c17286f99a0d5122fee784ce7b1c04e380c4a991da819a;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"},"26":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"265":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"266":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"270":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"276":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Deserialize, Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: Field = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n\nimpl Deserialize<POINT_LENGTH> for Point {\n fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point {\n Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool }\n }\n}\n"},"277":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::CONTRACT_INSTANCE_LENGTH,\n traits::{Deserialize, Hash, Serialize}\n};\n\nstruct ContractInstance {\n salt : Field,\n deployer: AztecAddress,\n contract_class_id : ContractClassId,\n initialization_hash : Field,\n public_keys_hash : PublicKeysHash,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys_hash.eq(other.public_keys_hash)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys_hash.to_field()\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys_hash: PublicKeysHash::from_field(serialized[4])\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys_hash,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer\n )\n )\n }\n}\n"},"289":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr","source":"use crate::{hash::merkle_hash, merkle_tree::merkle_tree::MerkleTree};\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like\n// this because it means we never even need to consider cases where\n// the index is greater than p.\npub fn root_from_sibling_path<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N]\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\npub fn calculate_subtree_root<let N: u32>(leaves: [Field; N]) -> Field {\n MerkleTree::new(leaves).get_root()\n}\n\n// These values are precomputed and we run tests to ensure that they\n// are correct. The values themselves were computed from the cpp code.\n//\n// Would be good if we could use width since the compute_subtree\n// algorithm uses depth.\npub fn calculate_empty_tree_root(depth: u32) -> Field {\n if depth == 0 {\n 0\n } else if depth == 1 {\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1\n } else if depth == 2 {\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290\n } else if depth == 3 {\n 0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20\n } else if depth == 4 {\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e\n } else if depth == 5 {\n 0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf\n } else if depth == 6 {\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76\n } else if depth == 7 {\n 0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b\n } else if depth == 8 {\n 0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1\n } else if depth == 9 {\n 0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972\n } else if depth == 10 {\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686\n } else {\n assert(false, \"depth should be between 0 and 10\");\n 0\n }\n}\n\n#[test]\nfn test_merkle_root_interop_test() {\n // This is a test to ensure that we match the cpp implementation.\n // You can grep for `TEST_F(root_rollup_tests, noir_interop_test)`\n // to find the test that matches this.\n let root = calculate_subtree_root([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n assert(0x1a09d935ae110b4c861fcec8f9099ec30b4485022aeb3d3cf9d7168e38fdc231 == root);\n\n let empty_root = calculate_subtree_root([0; 16]);\n assert(0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e == empty_root);\n}\n\n#[test]\nfn test_empty_subroot() {\n assert(calculate_empty_tree_root(0) == 0);\n\n let expected_empty_root_2 = calculate_subtree_root([0; 2]);\n assert(calculate_empty_tree_root(1) == expected_empty_root_2);\n\n let expected_empty_root_4 = calculate_subtree_root([0; 4]);\n assert(calculate_empty_tree_root(2) == expected_empty_root_4);\n\n let expected_empty_root_8 = calculate_subtree_root([0; 8]);\n assert(calculate_empty_tree_root(3) == expected_empty_root_8);\n\n let expected_empty_root_16 = calculate_subtree_root([0; 16]);\n assert(calculate_empty_tree_root(4) == expected_empty_root_16);\n\n let expected_empty_root_32 = calculate_subtree_root([0; 32]);\n assert(calculate_empty_tree_root(5) == expected_empty_root_32);\n\n let expected_empty_root_64 = calculate_subtree_root([0; 64]);\n assert(calculate_empty_tree_root(6) == expected_empty_root_64);\n\n let expected_empty_root_128 = calculate_subtree_root([0; 128]);\n assert(calculate_empty_tree_root(7) == expected_empty_root_128);\n\n let expected_empty_root_256 = calculate_subtree_root([0; 256]);\n assert(calculate_empty_tree_root(8) == expected_empty_root_256);\n\n let expected_empty_root_512 = calculate_subtree_root([0; 512]);\n assert(calculate_empty_tree_root(9) == expected_empty_root_512);\n\n let expected_empty_root_1024 = calculate_subtree_root([0; 1024]);\n assert(calculate_empty_tree_root(10) == expected_empty_root_1024);\n}\n"},"29":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n __pedersen_hash_with_separator(input, separator)\n}\n\nfn pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let value = __pedersen_commitment_with_separator(input, separator);\n if (value[0] == 0) & (value[1] == 0) {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n } else {\n EmbeddedCurvePoint { x: value[0], y: value[1], is_infinite: false }\n }\n}\n\n#[no_predicates]\nfn pedersen_commitment_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n#[no_predicates]\nfn pedersen_hash_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: Vec<EmbeddedCurveScalar> = Vec::from_slice([EmbeddedCurveScalar { lo: 0, hi: 0 }; N].as_slice()); //Vec::new();\n\n for i in 0..N {\n scalars.set(i, from_field_unsafe(input[i]));\n }\n scalars.push(EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\n let length_generator : [EmbeddedCurvePoint; 1] = derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n vec_generators.push(length_generator[0]);\n multi_scalar_mul_slice(vec_generators.slice, scalars.slice)[0]\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n __pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\nfn __pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {}\n\n#[foreign(pedersen_commitment)]\nfn __pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\n#[field(bn254)]\nfn derive_generators<let N: u32, let M: u32>(domain_separator_bytes: [u8; M], starting_index: u32) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n // Same as from_field but:\n // does not assert the limbs are 128 bits\n // does not assert the decomposition does not overflow the EmbeddedCurveScalar\n fn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\ntrait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\ntrait Hasher{\n fn finish(self) -> Field;\n \n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\ntrait BuildHasher<H> where H: Hasher{\n fn build_hasher(self) -> H;\n}\n\nstruct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere \n H: Hasher + Default {\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default {\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H) where H: Hasher {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B) where A: Hash, B: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1), 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1), EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false\n }\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2), 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2), EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3), 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3), EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4), 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4), EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5), 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5), EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6), 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6), EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7), 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7), EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false\n }\n );\n}\n\n"},"293":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"3":{"path":"std/array/mod.nr","source":"use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n // Apply a function to each element of an array, returning a new array\n // containing the mapped elements.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. This function is also sometimes\n // called `foldl`, `fold_left`, `reduce`, or `inject`.\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given array as its starting accumulator value.\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n // Returns true if all elements in the array satisfy the predicate\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n // Returns true if any element in the array satisfies the predicate\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Ord + Eq {\n pub fn sort(self) -> Self {\n self.sort_via(|a: T, b: T| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Eq {\n\n /// Sorts the array using a custom predicate function `ordering`.\n ///\n /// The `ordering` function must be designed to return `true` for equal valued inputs\n /// If this is not done, `sort_via` will fail to sort inputs with duplicated elements.\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n unsafe {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = quicksort::quicksort(self, ordering);\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]), \"Array has not been sorted correctly according to `ordering`.\"\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Convert a sequence of bytes as-is into a string.\n /// This function performs no UTF-8 validation or similar.\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"311":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<let N: u32>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes: [u8; 31] = field.to_be_bytes();\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2: [u8; 31] = field.to_be_bytes();\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n // Tests the hardcoded value in constants.nr vs underlying modulus\n // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n let max_value = crate::constants::MAX_FIELD_VALUE;\n assert_eq(max_value, 0 - 1);\n // modulus == 0 is tested elsewhere, so below is more of a sanity check\n let max_bytes: [u8; 32] = max_value.to_be_bytes();\n let mod_bytes = std::field::modulus_be_bytes();\n for i in 0..31 {\n assert_eq(max_bytes[i], mod_bytes[i]);\n }\n assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n"},"313":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"326":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"328":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH = 1;\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"329":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\nstruct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"393":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on the same curve as Ethereum.\n// The signing key is stored in an immutable private note and should be different from the signing key.\ncontract EcdsaKAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_current_public_keys\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n public_key: PrivateImmutable<EcdsaPublicKeyNote>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_current_public_keys(&mut context, this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[aztec(private)]\n #[aztec(noinitcheck)]\n #[aztec(view)]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n"},"394":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteInterface, NoteGetterOptions, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}\n};\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5;\n// ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN: Field = 5 * 32 + 64;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[aztec(note)]\nstruct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN, ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n\n fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret,\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"58":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\nstruct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::mem::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n\n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"74":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\nstruct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"76":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"78":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: Field = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: Field = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS = 2;\n\n// docs:start:fee-payload-struct\nstruct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nfn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr","source":"use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH};\nuse dep::protocol_types::traits::{Serialize, Deserialize};\n\n// This struct represents how public keys are stored in the key registry. We store not just the keys themselves but also\n// their hash, so that when reading in private we can perform a historical read for the hash and then show that it\n// corresponds to a preimage obtained from an unconstrained hint. We do store the keys keys regardless as they might be\n// needed during public execution, and since we need to broadcast and produce hints in some standardized way.\n// While it might seem odd to create a struct for what is effectively some data and a pure function called on it, state\n// variables rely on serializable structs in order to persist data to storage, so we must use this abstraction.\nstruct StoredKeys {\n public_keys: PublicKeys,\n hash: Field,\n}\n\nimpl StoredKeys {\n // Instances of StoredKeys are expected to only be created by calling this function so that we guarantee that the\n // hash field does indeed correspond to the hash of the keys. Ideally we'd forbid direct access to the struct, but \n // Noir doesn't yet support private members.\n fn new(public_keys: PublicKeys) -> Self {\n Self { public_keys, hash: public_keys.hash().inner }\n }\n}\n\n// Our serialization is the concatenation of the public keys serialization plush the hash, so we need one extra field.\nglobal STORED_KEYS_LENGTH: u32 = PUBLIC_KEYS_LENGTH + 1;\n\nimpl Serialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn serialize(self) -> [Field; STORED_KEYS_LENGTH] {\n // The code below is equivalent to:\n // [ ...self.public_keys.serialize(), self.hash ]\n\n let mut array = [0; STORED_KEYS_LENGTH];\n\n let serialized_keys = self.public_keys.serialize();\n for i in 0..serialized_keys.len() {\n array[i] = serialized_keys[i];\n }\n\n array[PUBLIC_KEYS_LENGTH] = self.hash;\n\n array\n }\n}\n\nimpl Deserialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn deserialize(array: [Field; STORED_KEYS_LENGTH]) -> Self {\n // The code below is equivalent to:\n // Self { public_keys: PublicKeys::deserialize(array[0 : PUBLIC_KEYS_LENGTH]), hash: array[PUBLIC_KEYS_LENGTH] }\n\n let mut serialized_keys = [0; PUBLIC_KEYS_LENGTH];\n for i in 0..serialized_keys.len() {\n serialized_keys[i] = array[i];\n }\n\n let hash = array[PUBLIC_KEYS_LENGTH];\n\n Self { public_keys: PublicKeys::deserialize(serialized_keys), hash }\n }\n}\n"},"86":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\nstruct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\ntrait ToPoint {\n fn to_point(self) -> Point;\n}\n\nstruct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nstruct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m: NpkM { inner: Point::empty() },\n ivpk_m: IvpkM { inner: Point::empty() },\n ovpk_m: OvpkM { inner: Point::empty() },\n tpk_m: TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x: serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"88":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, address::AztecAddress, constants::CANONICAL_KEY_REGISTRY_ADDRESS,\n storage::map::derive_storage_slot_in_map\n};\nuse crate::{\n context::{PrivateContext, UnconstrainedContext},\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{\n public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}, stored_keys::StoredKeys,\n constants::{NULLIFIER_INDEX, OUTGOING_INDEX}\n},\n state_vars::{public_mutable::PublicMutable, map::Map}\n};\n\nmod test;\n\n// This is the number of blocks that must pass after a key rotation event until the old keys are fully phased out and\n// become invalid.\nglobal KEY_REGISTRY_UPDATE_BLOCKS = 5;\n\nglobal KEY_REGISTRY_STORAGE_SLOT = 1;\n\n// A helper function that gets app-siloed nullifier secret key for a given `npk_m_hash`. This function is used\n// in unconstrained contexts only - in Note::compute_nullifier_without_context which in turn is called by\n// `compute_note_hash_and_optionally_a_nullifier` function that is used by the NoteProcessor. The safe alternative\n// is `request_nsk_app` function define on `PrivateContext`.\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used\n// in unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app`\n// function defined on `PrivateContext`.\nunconstrained pub fn get_ovsk_app(ovpk_m_hash: Field) -> Field {\n get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app\n}\n\n// Returns all current public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys {\n // We're going to perform historical reads from public storage, and so need to constrain the caller so that they\n // cannot use very old blocks when constructing proofs, and hence e.g. read very old keys. We are lax and allow\n // _any_ recent block number to be used, regardless of whether there may have been a recent key rotation. This means\n // that multiple sets of keys are valid for a while immediately after rotation, until the old keys become phased\n // out. We *must* be lax to prevent denial of service and transaction fingerprinting attacks by accounts that rotate\n // their keys frequently.\n // Note that we constrain the max block number even if the registry ends up being empty: this ensures that proof of\n // an empty registry is also fresh.\n let current_header = context.get_header();\n context.set_tx_max_block_number(current_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS);\n\n get_historical_public_keys(current_header, account)\n}\n\n// Returns historical public keys for a given account at some block determined by a block header. We read all keys at\n// once since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys\n// that are not required by the caller can simply be discarded.\n// WARNING: if called with a historical header created from a fixed block this function will explicitly ignore key\n// rotation! This means that callers of this may force a user to use old keys, potentially leaking privacy (e.g. if the\n// old keys were leaked). Only call this function with a header from a fixed block if you understand the implications of\n// breaking key rotation very well.\npub fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys {\n // TODO: improve this so that we always hint the correct set of keys (either registry or canonical) and hash them\n // once instead of having two different hints and twice as many constraints due to the double hashing.\n\n // The key registry is the primary source of information for keys, as that's where accounts store their new keys\n // when they perform rotation. The key registry conveniently stores a hash of each user's keys, so we can read that\n // single field and then prove that we know its preimage (i.e. the current set of keys).\n let key_registry_hash = key_registry_hash_public_historical_read(historical_header, account);\n if key_registry_hash != 0 {\n let hinted_registry_public_keys = key_registry_get_stored_keys_hint(\n account,\n historical_header.global_variables.block_number as u32\n );\n assert_eq(hinted_registry_public_keys.hash().to_field(), key_registry_hash);\n\n hinted_registry_public_keys\n } else {\n // If nothing was written to the registry, we may still be able to produce the correct keys if we happen to know\n // the canonical set (i.e. the ones that are part of the account's preimage).\n let (hinted_canonical_public_keys, partial_address) = get_public_keys_and_partial_address(account);\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n }\n}\n\nfn key_registry_hash_public_historical_read(historical_header: Header, account: AztecAddress) -> Field {\n // The keys are stored in a Map that is keyed with the address of each account, so we first derive the corresponding\n // slot for this account.\n let keys_storage_slot = derive_storage_slot_in_map(KEY_REGISTRY_STORAGE_SLOT, account);\n\n // The keys are stored as [ ...serialized_keys, hash ], and since arrays get allocated sequential storage slots\n // (prior to siloing!), we simply add the length to the base slot to get the last element.\n let hash_storage_slot = keys_storage_slot + PUBLIC_KEYS_LENGTH as Field;\n\n historical_header.public_storage_historical_read(hash_storage_slot, CANONICAL_KEY_REGISTRY_ADDRESS)\n}\n\nunconstrained fn key_registry_get_stored_keys_hint(account: AztecAddress, block_number: u32) -> PublicKeys {\n // This is equivalent to the key registry contract having an unconstrained getter that we call from an oracle, but\n // PXE does not yet support that functionality so we do this manually instad. Note that this would be a *historical*\n // call!\n\n // TODO (#7524): call the unconstrained KeyRegistry.get_current_keys() function instead\n\n let context = UnconstrainedContext::at_historical(CANONICAL_KEY_REGISTRY_ADDRESS, block_number);\n let keys_storage = Map::new(\n context,\n KEY_REGISTRY_STORAGE_SLOT,\n |context, slot| { PublicMutable::new(context, slot) }\n );\n\n let stored_keys: StoredKeys = keys_storage.at(account).read();\n stored_keys.public_keys\n}\n"}}}